背景
项目运行依赖着 DPDK 程序库
现存至少4类运行环境:
- 功能开发环境 – 指令集完备 虚拟环境
- 功能测试环境 – 老旧的CPU 缺少AES,AVX2,AVX512等相关指令
- 性能测试环境 – 志强银牌CPU
- 项目运行环境 – ACTA刀片
出现的问题:
功能开发环境 编译出来的程序, 测试人员此时只想测试其某个功能, 手头仅有老旧的设备。 没有最新的志强CPU可以使用。
DPDK的编译选项里, 虽然可以禁用某些 CPU 特性,
但是 ACL 模块的编译不受限制,
我们当然知道可以通过手动修改完成目的,
但是要修改多少处代码呢?
又怎么维护这些修改项呢?
别人是否认同这种做法呢?
最简单的做法,将整个项目, 在一台非常老旧的机器上编译。
结果是: 这种2008年之前的机器, 特别难找!!!
还好, 强大的虚拟机再一次的发挥了至关重要的能力!
KVM 虚拟机可以通过 启用/禁用相关指令集。
VMware 里我只看到了 XV-T 指令集的 控制,其他的没有找到。
KVM 可以控制各种 特种的指令集。
- disable 禁用相关指令集
- require 启用相关指令集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| 关闭目标虚拟机 root@debian:~# virsh destroy XXXXXXXXXX
更改指令集 root@debian:~# vim /etc/libvirt/qemu/XXXXXXXXXX.xml <cpu mode='host-passthrough' check='none' migratable='on'> <topology sockets='1' dies='1' cores='1' threads='1'/> <feature policy='disable' name='abm'/> <feature policy='disable' name='aes'/> <feature policy='disable' name='arat'/> <feature policy='disable' name='avx'/> <feature policy='disable' name='avx2'/> <feature policy='disable' name='bmi1'/> <feature policy='disable' name='bmi2'/> <feature policy='disable' name='erms'/> <feature policy='disable' name='f16c'/> <feature policy='disable' name='fma'/> <feature policy='disable' name='fsgsbase'/> <feature policy='disable' name='invpcid'/> <feature policy='disable' name='movbe'/> <feature policy='disable' name='pcid'/> <feature policy='disable' name='pdpe1gb'/> <feature policy='disable' name='popcnt'/> <feature policy='disable' name='rdrand'/> <feature policy='disable' name='rdtscp'/> <feature policy='disable' name='smep'/> <feature policy='disable' name='tsc_adjust'/> <feature policy='disable' name='x2apic'/> <feature policy='disable' name='xsave'/> <feature policy='disable' name='xsaveopt'/> </cpu>
保存退出
更新配置文件 root@debian:~# virsh define /etc/libvirt/qemu/blog.xml
开启目标虚拟机 root@debian:~# virsh start XXXXXXXXXX
|
无法控制的指令
也存在这相当一部分的指令, 无法控制
原因未明
1 2 3 4 5 6 7 8 9
| error: unsupported configuration: unknown CPU feature: sdbg error: unsupported configuration: unknown CPU feature: sdbg error: unsupported configuration: unknown CPU feature: shadow_vmcs error: unsupported configuration: unknown CPU feature: sse4_2 error: unsupported configuration: unknown CPU feature: tsc_offset error: unsupported configuration: unknown CPU feature: unrestricted_guest error: unsupported configuration: unknown CPU feature: vapic error: unsupported configuration: unknown CPU feature: vnmi error: unsupported configuration: unknown CPU feature: vpid
|
效果
更改之前
更改之后
已经没有了 AES,AVX指令功能