VFIO的使用及原理

vfio设备透传主要用于将设备直通给虚拟机以提高性能,本篇以一张网卡为例讲述VFIO设备的配置使用及底层原理。其中涉及的技术背景主要有qemu+kvm+vfio。

一、VFIO网卡的配置使用

1.host配置iommu

首先是宿主机host必须支持硬件虚拟化技术,如x86架构的VT-d,其中有关IO的有iommu的支持,x86默认是不开启的,可以通过追加内核参数“intel_iommu=on”来打开。

vim /etc/default/grub

VFIO的使用及原理_第1张图片

添加完后重启宿主机,并dmesg | grep -i iommu查看是否开启成功

VFIO的使用及原理_第2张图片

powerpc架构下的iommu是默认开启的,所以可以直接跳过此步。

VFIO的使用及原理_第3张图片

2.选择设备

本次以一张网卡为例,常见的intel网卡如I350等都是支持VFIO透传的,先看一下系统总体网卡情况,然后在dmesg看到网卡的iommu支持。

ethtool -i ethxxx                //查看某个网卡信息

lshw -C network                //查看系统总体网络信息

VFIO的使用及原理_第4张图片

记住一定要选择一个宿主机不用的网卡,如state=DOWN的或ifconfig查看 rx和tx=0 bytes的网卡来配置透传,毕竟vfio属于二选一,透传给VM则host不能再用了。

VFIO的使用及原理_第5张图片

VFIO的使用及原理_第6张图片

本次选择enP1p27s0fx这张网卡;

3.设备解绑与重新绑定vfio-pci驱动

#查看group里面的设备,可以发现这个group中共有4个设备

[root@localhost jcf]# ls /sys/bus/pci/devices/0001\:1b\:00.0/iommu_group/devices/
0001:1b:00.0  0001:1b:00.1  0001:1b:00.2  0001:1b:00.3
#将设备与驱动程序解绑,注意这里要把同一group下的4张网卡全部解绑
[root@localhost jcf]# echo 0001:1b:00.0 > /sys/bus/pci/devices/0001\:1b\:00.0/driver/unbind

[root@localhost jcf]# echo 0001:1b:00.1 > /sys/bus/pci/devices/0001\:1b\:00.1/driver/unbind
[root@localhost jcf]# echo 0001:1b:00.2 > /sys/bus/pci/devices/0001\:1b\:00.2/driver/unbind
[root@localhost jcf]# echo 0001:1b:00.3 > /sys/bus/pci/devices/0001\:1b\:00.3/driver/unbind
#找到设备的生产商&设备ID
[root@localhost jcf]# lspci -n -s 0001:1b:00.0
0001:1b:00.0 0200: 8086:1521 (rev 01)

#将设备绑定到vfio-pci驱动,这会导致一个新的设备节点“/dev/vfio/5”被创建
[root@localhost jcf]# echo 8086 1521 > /sys/bus/pci/drivers/vfio-pci/new_id
#查看刚生成的设备节点
[root@localhost jcf]# ls /dev/vfio/

VFIO的使用及原理_第7张图片

VFIO的使用及原理_第8张图片

若/sys/bus/pci/drivers/目录下没有vfio-pci目录,则记得insmod vfio_pci模块

VFIO的使用及原理_第9张图片

此时host中已看不到之前的enP1p27s0fx网卡

VFIO的使用及原理_第10张图片

4.创建虚机,添加参数 -device vfio-pci,host=xxxx,id=net0

/home/jcf/qemu-6.2.0/build/qemu-system-ppc64 -m 32G -smp 8 -boot c -hda /home/jcf/pseries.img -machine pseries --enable-kvm -device vfio-pci,host=0001:1b:00.0,id=net0 -vnc :25

通过qemu monitor可以看到该网卡已经透传到了虚机内。

VFIO的使用及原理_第11张图片

若是通过libvirt创建虚机,则需添加如下xml透传配置

   
     
       
       
         
5.登录并配置网络

qemu启动虚机后,可以通过vnc登录进虚机查看,如图发现有一张VFIO网卡。

VFIO的使用及原理_第12张图片

ip addr add 10.100.11.111/24 dev enp0s2# 设置enp0s2 网口IP地址为10.100.11.111

此处VM的IP需要与Host保持在同一网段。

VFIO的使用及原理_第13张图片

route -n  //查看路由

ip route add default via 10.100.11.254   # 设置系统默认路由

ip route add default via 10.100.11.254  dev enp0s2  # 设置enp0s2默认网关为10.100.11.254
# 或
ip route add 10.100.11.0/24  via  10.100.11.254 dev enp0s2 # 设置10.100.11.0网段的网关为10.100.11.254,数据走enp0s2接口

VFIO的使用及原理_第14张图片

此时也可通过ssh直接链接到VM

VFIO的使用及原理_第15张图片

将上述配置写入到/etc/sysconfig/network-scripts/ifcfg-xxx,配置好其中的IPADDR,GATEWAY,ONBOOT=yes,就可以自动联网了。

抑或将以上两项写成sh脚本,放入/etc/rc.d/rc.local或单独成一个sh文件,这样可以方便手动调试自动联网。

VFIO的使用及原理_第16张图片

二、VFIO原理

你可能感兴趣的:(linux,qemu,VFIO)