searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

qemu挂在SPDK vhost-user设备

2023-05-26 05:37:03
446
0

qemu使用vhost-user设备

使用vhost-user虚拟出的设备,需要依赖libvirt7.1.0版本及以上和qemu5.0.0版本及以上
可以用下面命令查看是否支持
qemu-system-x86_64 -device vhost-user-scsi-pci,help
qemu-system-x86_64 -device vhost-user-blk-pci,help

 编译libvirt

本教程前提是主机已通过yum安装了低版本libvirt,然后将其升级到7.1.0版本
注:最好不要卸载已有的libvirt,不然自行编译安装的libvirt很可能在使用过程中出现问题,本教程可以认为是直接将已安装libvirt升级的方法
官方编译安装教程为<https://libvirt.org/compiling.html>
1. 环境准备
yum install -y meson
yum install -y gcc
yum install qemu-kvm
 
2. 获取libvirt7.1.0源码
wget https://libvirt.org/sources/libvirt-7.1.0.tar.xz
tar -xvf libvirt-7.1.0.tar.xz
cd libvirt-7.1.0
3. 安装依赖
 
yum install glib2-devel
yum install gnutls-devel
yum install libxml2-devel
yum install libtirpc-devel
yum install rpcgen
yum install python3-docutils
yum install libpciaccess-devel
 
4. 编译
 
# 检查当前libvirt的安装目录
[root@compute-01 stl]# which virsh
/usr/bin/virsh
# 指定编译安装的位置
meson build --prefix=/usr -Dsystem=true -Ddriver_qemu=enabled
# 编译并运行test
ninja -C build
 
5. 安装
 
# 安装覆盖现有libvirt,在meson configure时指定路径
ninja -C build install
# 检查版本是否更新成功
virsh --version
libvirtd --version
 
6. 启动
 
systemctl daemon-reload
systemctl restart libvirtd
 
7. 问题解决
若编译过程中报错rpc/rpc.h:没有那个文件或目录,则执行
 
meson configure --includedir /usr/include/tirpc/rpc/
 
如果运行时发现缺某种功能,可尝试执行,查看是否有特性在编译的时候没有enable
 
meson configure
 

qemu使用共享大页内存

qemu使用vhost-user设备时,要求使用大页内存并设置共享
 
# 创建大页内存挂载点
mkdir /dev/hugepages
# 挂载大页内存
mount -t hugetlbfs hugetlbfs /dev/hugepages
# 为虚拟化保留大页内存,若一页为2M,那么下述命令保留了4G
sysctl vm.nr_hugepages=2048
# 在libvirt xml配置文件中加入,如果是vhost的话,需要开启大页内存共享
<memoryBacking>
<hugepages>
<page size='2048' unit='KiB'/>
</hugepages>
<access mode='shared'/>
</memoryBacking>
 
libvirt使用大页内存的时候有三种配置方式,可参考<https://libvirt.org/kbase/virtiofs.html>
但是需要注意的是,如果使用memfd的方式使用的话,vhost-user的盘挂载到虚机后spdk立马就会产生coredump

 

 qemu使用vhost-user-blk

此处使用动态挂载方式使用
 
virsh attach-device centos7 ../virtio.xml
virsh detach-device centos7 ../virtio.xml
 
virtio.xml文件内容如下
 
<disk type='vhostuser' device='disk'>
<driver name='qemu' type='raw'/>
<source type='unix' path='/var/tmp/vhost.0'>
<reconnect enable='yes' timeout='20'/>
</source>
<target dev='sdb' bus='scsi'/>
</disk>
 
同时,虚机的xml文件中内存要配置成共享型大页内存
 
<memoryBacking>
<hugepages>
<page size='2048' unit='KiB'/>
</hugepages>
<access mode='shared'/>
</memoryBacking>
 

qemu使用vhost-user-scsi

目前libvirt暂时不支持挂载`vhost-user-scsi`类型的盘,所以我们直接使用qemu命令行挂载
下述命令执行成功的前提是,vhost已启动,且已经创建了scsi类型的controller,其路径为/var/tmp/vhost.0
 
qemu-system-x86_64 \
--enable-kvm \
-cpu host -smp 1 \
-m 1G -object memory-backend-file,id=mem0,size=1G,mem-path=/dev/hugepages,share=on -numa node,memdev=mem0 \
-drive file=/root/CentOS-10-17-qemu.qcow2,if=none,id=disk \
-device ide-hd,drive=disk,bootindex=0 \
-chardev socket,id=spdk_vhost_scsi0,path=/var/tmp/vhost.0 \
-device vhost-user-scsi-pci,id=scsi0,chardev=spdk_vhost_scsi0,num_queues=2 \
-serial stdio
 
0条评论
0 / 1000