基于上一次的dpdk和ovs配合使用的环境,目前还差qemu与ovs的sock通信。由于使用的是dpdkvhostuserclient端口类型,需要qemu提供/tmp/sock0供ovs连接。在创建端口时如果重连失败,ovs会将该fd加入队列,由线程vhost_reconn线程进行重连,成功后由vhost_reconn线程进行消息读取和本地配置。网桥配置如下:
ovs-vsctl add-br br0
ovs-vsctl set bridge br0 datapath_type=netdev
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
ovs-vsctl add-port br0 qemu-dpdk0 -- set interface qemu-dpdk0 type=dpdkvhostuserclient options:vhost-server-path="/tmp/sock0"
第二步:创建虚拟机
qemu-system-x86_64 -m 4096 -drive file=/home/centos/CentOS-7-x86_64-DVD-2207-02.qcow2,format=qcow2 -cpu host -enable-kvm -smp 4 -usbdevice tablet -usb -chardev socket,id=char1,path=/tmp/sock0,server -netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce -device virtio-net-pci,netdev=mynet1,id=net1,mac=a2:11:22:33:44:55
此时出现错误qemu-system-x86_64: -netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce: Invalid parameter 'vhost-user'。经过研究发现低版本的qemu并不支持vhostuser,于是将qemu升级到qemu5.0版本,并解决编译问题。
第三步:继续执行上述命令,仍出现报错qemu: could not load PC BIOS 'bios-256k.bin',该问题与路径有关,需要指定该文件存在的路径 -L /share/qemu/。
第四步:执行添加-L之后的命令,报错如下:
qemu-system-x86_64: Failed initializing vhost-user memory map, consider using -object memory-backend-file share=on
qemu-system-x86_64: vhost_set_mem_table failed: Interrupted system call (4)
qemu-system-x86_64: unable to start vhost net: 4: falling back on userspace virtio
根据提示我们需要进一步配置内存相关的配置,同时保证系统中预留的大页内存充足。-object memory-backend-file,id=mem,mem-path=/dev/hugepages,size=4096M,share=on -numa node,memdev=mem -mem-prealloc
第五步:基于上述配置后,执行最终命令
qemu-system-x86_64 -m 4096 -drive file=/home/centos/CentOS-7-x86_64-DVD-2207-02.qcow2,format=qcow2 -cpu host -enable-kvm -smp 4 -chardev socket,id=char1,path=/tmp/sock0,server -netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce -device virtio-net-pci,netdev=mynet1,id=net1,mac=a2:11:22:33:44:55 -L /share/qemu/ -object memory-backend-file,id=mem,mem-path=/dev/hugepages,size=4096M,share=on -numa node,memdev=mem -mem-prealloc
发现命令执行正常,但没有虚拟机界面,日志一直停留VNC server running on ::1:5900。原因是没有安装SDL相关组件,包括SDL、SDL_image、SDL2、SDL2_image 及其devel,同时qemu编译需要configure增加--enable-vhost-user --enable-sdl选项。解决玩编译问题后重新执行命令即可。最终ovs侧连接qemu成功,虚拟机启动缓慢但能够成功起来。
尝试配置ip并ping,发现网络不通,且修改队列失败,问题还在排查中,有小伙伴知道原因请相告,谢谢