首页 > 数据库 > 数据库开发技术 > 37 KVM管理设备-管理设备直通
37 KVM管理设备-管理设备直通37.1 PCI直通37.2 SR-IOV直通37.2.1 概述37.2.2 操作方法37.2.2.1 开启网卡的SR-IOV模式37.2.2.2 获取PF和VF的PCI BDF信息37.2.2.3 识别和管理PF/VF对应关系37.2.2.4 挂载SR-IOV网卡到虚拟机中37.2.3 HPRE加速器SR-IOV直通
设备直通技术是指将host上的物理设备直接呈现给一台虚拟机,虚拟机可以直接访问该设备资源的一种使用方式。使用设备直通的方式可以让虚拟机获得良好的I/O性能。
当前设备直通使用的是VFIO方式,按照直通的设备类型可以分为PCI直通和SR-IOV直通两种类型。
PCI直通是指将host上的物理PCI设备直接呈现给一台虚拟机,供虚拟机直接访问的一种使用方式。PCI直通使用了vfio设备直通方式,为虚拟机配置PCI直通的xml配置如下:
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x04' slot='0x10' function='0x01'/>
</source>
<rom bar='off'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</hostdev>
表 1 PCI直通设备配置项
说明:VFIO直通方式的最小直通单位是iommu_group,host根据硬件上的ACS位,来划分iommu_group。同一个iommu_group中的设备只允许直通给同一台虚拟机(一个PCI设备上的若干个function,如果属于同一个iommu_group,只允许直通给一个虚拟机使用)。
SR-IOV(Single Root I/O Virtualizaiton)是一种基于硬件的虚拟化解决方案,通过SR-IOV技术可以将一个PF(Physical Function)虚拟成多个VF(Virtual Function),每个VF都可以单独被直通给一个虚拟机,极大地提升了硬件资源利用率和虚拟机的I/O性能。一种典型的应用场景就是网卡SR-IOV设备直通,利用SR-IOV技术可以将一个物理网卡(PF)虚拟成多个VF网卡,再把VF直通给虚拟机使用。
说明:
SR-IOV需要物理硬件支持,使用SR-IOV前请确保要直通的硬件设备支持该能力,并且Host侧的设备驱动程序工作在SR-IOV模式下。
查询网卡具体型号的办法如下:例如下述回显,第一列为网卡的PCI号,19e5:1822为网卡的厂商号设备号。
# lspci | grep Ether
05:00.0 Ethernet controller: Device 19e5:1822 (rev 45)
07:00.0 Ethernet controller: Device 19e5:1822 (rev 45)
09:00.0 Ethernet controller: Device 19e5:1822 (rev 45)
0b:00.0 Ethernet controller: Device 19e5:1822 (rev 45)
81:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
81:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
请使用root用户按照如下操作步骤配置SR-IOV直通网卡:
请确保Guest OS有网卡供应商提供的VF驱动支持,否则Guest OS内VF无法正常工作。
在host OS的BIOS中开启SMMU/IOMMU的支持。不同厂家服务器的开启方式可能不同,请参考各服务器的帮助文档。
HOST驱动配置,开启SR-IOV的VF模式。这里以Hi1822网卡为例,开启16个VF。
# echo 16 > /sys/class/net/ethX/device/sriov_numvfs
获取当前单板上的网卡资源列表,参考命令如下:
# lspci | grep Eth
03:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45)
04:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45)
05:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45)
06:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45)
7d:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Device a222 (rev 20)
7d:00.1 Ethernet controller: Huawei Technologies Co., Ltd. Device a222 (rev 20)
7d:00.2 Ethernet controller: Huawei Technologies Co., Ltd. Device a221 (rev 20)
7d:00.3 Ethernet controller: Huawei Technologies Co., Ltd. Device a221 (rev 20)
查看VF的PCI BDF信息,参考命令如下:
# lspci | grep "Virtual Function"
03:00.1 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45)
03:00.2 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45)
03:00.3 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45)
03:00.4 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45)
03:00.5 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45)
03:00.6 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45)
03:00.7 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45)
03:01.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45)
03:01.1 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45)
03:01.2 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45)
选择一个可用的VF,根据其BDF信息将其配置写入虚拟机的配置文件中。以03:00.1设备为例,对应的bus号是03,slot号是00,function号是1。
识别PF对应的VF关系,以PF 03.00.0为例:
# ls -l /sys/bus/pci/devices/0000\:03\:00.0/
可显示如下的软链接信息,根据信息可以获得其对应的VF编号(virtfnX)和PCI BDF号。
识别VF对应的PF关系,以VF 03:00.1为例:
# ls -l /sys/bus/pci/devices/0000\:03\:00.1/
可显示下述软连接信息,即可获得其对应PF的PCI BDF号。
lrwxrwxrwx 1 root root 0 Mar 28 22:44 physfn -> ../0000:03:00.0
获知PF/VF对应的网卡设备名称,例如:
# ls /sys/bus/pci/devices/0000:03:00.0/net
eth0
设置VF的mac/vlan/qos信息,确保VF在直通之前处于UP状态。以VF 03:00.1为例,假设PF为eth0,VF编号为0。
# ip link set eth0 vf 0 mac 90:E2:BA:21:XX:XX # 设置mac地址
# ifconfig eth0 up
# ip link set eth0 vf 0 rate 100 # 设置VF出口速率,单位Mbps
# ip link show eth0 # 查看mac/vlan/qos信息,确认设置成功
创建虚拟机时,在虚拟机配置文件中增加SR-IOV直通的配置项。
<interface type='hostdev' managed='yes'>
<mac address='fa:16:3e:0a:xx:xx'/>
<source>
<address type='pci' domain='0x0000' bus='0x06' slot='0x11' function='0x6'/>
</source>
<vlan>
<tag id='1'/>
</vlan>
</interface>
表 1 SR-IOV配置选项说明
说明:关闭SR-IOV功能。在虚拟机使用完毕后(虚拟机关机,所有的VF均没有在使用中的时候),若要关闭SR-IOV功能。执行操作如下:这里以Hi1822网卡(eth0对应PF的网口名称)为例:
# echo 0 > /sys/class/net/eth0/device/sriov_numvfs
加速器引擎是TaiShan 200服务器基于Kunpeng 920处理器提供的硬件加速解决方案。HPRE加速器用于加速SSL/TLS应用,可以显著降低处理器消耗,提高处理器效率。在鲲鹏服务器上,需要把主机Host上的HPRE加速器的VF直通给虚拟机,供虚拟机内部业务使用。
表 1 HPRE加速器说明
说明:当虚拟机正在使用VF设备时,不允许卸载Host上的驱动,加速器不支持热插拔。VF操作(VFNUMS为0表示关闭VF,hpre_num用来标识具体的加速器设备):
# echo $VFNUMS > /sys/class/uacce/hisi_hpre-$hpre_num/device/sriov_numvfs
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
有什么吐槽或反馈意见,直接告诉我!
温馨提示:如出现二维码失效也可直接添加微信号:ysc13803862469。
原文作者:超哥的IT私房菜;如有侵权,请联系管理员删除。