正因为进了爱国为网技大赛,所以终于有机会用上大名鼎鼎的eNSP了。一开始看着那是个小软件,所以没怎么当一回事,像EDA软件一样直接装在了虚拟机中。但当我看到它装了个VirtualBox的时候,我意识到问题的严重性——半虚拟化虽然能有很快的速度,但虚拟CPU并没有VT-d的支持,也就是那个vmx指令集,完全的二进制转译的虚拟化肯定要卡死。开了一个拓扑图,开机,果不其然。
macOS下Parallels Desktop配置方法
这是来得非常愉快了,自己也意识到这个问题的重要性,所以试着打开了nested虚拟化,在任务管理器中系统识别为非虚拟机,开启了虚拟化,再开机,一切正常,CPU占用40%左右。
在VirtualBox中出现了半虚拟化接口,就是nested虚拟化开启了的一个标志。
Linux QEMU/KVM 配置方案
这里配置好了,但感觉笔记本运行还是很力不从心,所以决心折腾Linux KVM虚拟机。大致这次配置的内容有几个:
使用逻辑卷管理器(LVM)配置存储池
听说(真的就是听说罢了),对于KVM而言,LVM这种映射真实设备的存储池类型,能最大程度接近物理磁盘本身的性能。所以就试着搞一个。
首先,通过fdisk/gdisk命令建立一个或多个LVM分区;
其次,在/etc/libvirt/storage中加入lvm池配置文件lvm_pool.xml:
<pool type='logical'>
<name>lvm_pool</name>
<source>
<device path='/dev/sdb4'/>
<name>lvm_pool</name>
<format type='lvm2'/>
</source>
<target>
<path>/lvm_pool</path>
</target>
</pool>
再次,执行以下命令定义和初始化LVM存储池:
virsh # pool-define /etc/libvirt/storage/lvm_pool.xml
virsh # pool-build lvm_pool
顺便,启动、自动启动,了解一下!
virsh # pool-start lvm_pool
virsh # pool-autostart lvm_pool
大概看到这样子就很好了:
名称 状态 自动开始
-------------------------------------------
default 活动 是
image 活动 是
lvm_pool 活动 是
CPU配置的一部分问题
因为我们要强求支持嵌套虚拟化,所以CPU配置的弯路是少不了的。先确认下nested虚拟化是否开启:
cat /sys/module/kvm_intel/parameters/nested
如果出现Y,那么就很好了;反之,这样子处理下:
echo "options kvm-intel nested=1" >> /etc/modprobe.d/kvm-intel.conf
#重启 或者
rmmod kvm-intel
modprobe kvm-intel nested=1
这里选择的是直通,会把CPU信息暴露给VM,有可能会影响部分系统的迁移。
修改命令:
virsh # edit <hostname>
然后CPU部分配置修改如下:
<cpu mode='host-passthrough'>
<topology sockets='1' cores='4' threads='2'/>
</cpu>
里面拓扑配置设定的是1插槽、4内核、2线程,一共1*4*2=8个逻辑处理器。
具体分配的CPU数目不应超出宿主机逻辑处理器的总和。
如果在VirtualBox上出现上文硬件加速选项,即配置已妥当。
FAQ
- 为什么我分配了多个内核,但Windows只出现2个内核?
A: 对于普通的Windows来说,最多只支持2个插槽的CPU,如果使用默认的拓扑规则,可能会生成8个插槽的CPU,导致只能使用前2个插槽的CPU,一共2个逻辑处理器。 - 我的Windows更新了,为什么eNSP启动会出现40错误?
A: 这时候需要做的有两个:- 重新新建Host-Only网络适配器
管理->全局设定->网络->Host-Only网络
新建网卡,IP地址为192.168.56.1,关闭DHCP - 在eNSP中重新注册设备
- 重新新建Host-Only网络适配器
- 我的Windows大版本更新经常卡在某个进度,怎么办?
A: 关闭nested虚拟化进行更新即可。
References
[1]. 在 libvirt 上使用 LVM 存储设备, IBM中国Linux与虚拟化实验室.