目录
前言
OpenStack支持将物理设备挂载到虚拟机内部,术语叫做PCI passthrough。
PCI passthrough有几个基本要求。
- BIOS中打开VT-d(Intel® Virtualization Technology for Directed I/O的缩写)。
- 计算节点内核打开intel_iommu=on或者amd_iommu=on。
- 计算节点上有可用的PCI设备。
最后,再通过修改计算节点的nova-compute的配置文件,就能将配置文件中给定的设备分配给创建好的虚拟机,上面的传送门是官方文档说明,接下来将不再赘述。
但是OpenStack只支持在创建时分配PCI设备,如果已有虚拟机想要添加PCI设备,就需要一点非常规操作,说是非常规操作其实是libvirt的一些基础操作。
流程
查看虚拟机的信息,确保虚拟机处在运行状态。
1
2
3
4
5
6
7
8
9openstack server show <server_id> -c
eg:
openstack server show f7906515-727e-4c0d-8047-29d45425d563 -c OS-EXT-SRV-ATTR:host -c OS-EXT-SRV-ATTR:instance_name
+-------------------------------+-------------------+
| Field | Value |
+-------------------------------+-------------------+
| OS-EXT-SRV-ATTR:host | compute3 |
| OS-EXT-SRV-ATTR:instance_name | instance-0000027a |
+-------------------------------+-------------------+连接到compute3节点,查看pci设备列表。
1
2
3
4
5lspci -D | grep -i net
0000:01:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
0000:01:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
0000:21:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
0000:21:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)选择要挂载的网卡,确保网卡已连接网线(这里是enp1s0f0)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17ethtool -i enp1s0f0
driver: igb
version: 5.10.0-46.uelc20.x86_64
firmware-version: 1.63, 0x800009fa
expansion-rom-version:
# pic总线地址
bus-info: 0000:01:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes
ethtool enp1s0f0 | grep Link
# 已连接网线
Link detected: yes进入计算节点的nova_libvirt容器(环境基于kolla-ansible部署的),编写device.xml文件。
1
2
3
4
5<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</source>
</hostdev>当透传的设备是SR-IOV时。
1
2
3
4
5<interface type='hostdev' managed='yes'>
<source>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</source>
</interface>执行挂载命令。
1
virsh attach-device --domain instance-0000027a device.xml
宿主机或者虚拟机重启可能会导致透传网卡的卸载,可以再进入nova_libvirt容器执行挂载操作。