---
title: OpenStack支持机密虚拟机SRIOV设备直通
description: "OpenStack仅支持对网卡设备使能SRIOV能力。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/252RC2/confidt/kunpengtee_16_0065.html
sourcePath: /source/zh/kunpengboostkithistory/252RC2/confidt/kunpengtee_16_0065.html
indexId: 2d561a562f9ad5a21b3d7be374a87cca6b478d524ffe98aa68e3486c25de2b2a72
---
# OpenStack支持机密虚拟机SRIOV设备直通

OpenStack仅支持对网卡设备使能SRIOV能力。

1. 在计算节点配置网卡vf。

  a. 查看网卡支持的最大vf数，其中${device_name}为网卡名。

```
cat /sys/class/net/${device_name}/device/sriov_totalvfs
```


  b. 输入vf数${vf_num}，数值不得大于网卡支持的最大vf数。

```
echo ${vf_num} > /sys/class/net/${device_name}/device/sriov_numvfs
```


2. 在计算节点配置设备信息 。

  a. 修改配置文件“/etc/nova/nova.conf”，配置需要直通的网卡名${device_name}，${network_name}可自定义配置。

```
[pci]
passthrough_whitelist = { "devname": "${device_name}", "physical_network": "${network_name}"}
```


  b. 完成配置后重启nova-compute服务。

```
systemctl restart openstack-nova-compute
```


3. 在计算节点安装配置neutron-sriov-agent。

  a. 安装neutron-sriov-agent并启动服务。

```
yum install openstack-neutron-sriov-nic-agent -y
systemctl enable neutron-sriov-nic-agent
systemctl start neutron-sriov-nic-agent
```


  b. 修改sriov agent配置文件“/etc/neutron/plugins/ml2/sriov_agent.ini”。

```
[DEFAULT]
log_dir = /var/log/neutron
[sriov_nic]
physical_device_mappings = ${network_name}:${device_name}
[securitygroup]
firewall_driver = neutron.agent.firewall.NoopFirewallDriver
```


  c. 重新启动neutron-sriov-nic-agent服务。

```
systemctl restart neutron-sriov-nic-agent
```


  d. 查看neutron-sriov-nic-agent服务的状态，确保其正常运行。

```
openstack network agent list --agent-type nic
```


4. 配置控制节点nova-scheduler。

  a. 修改配置文件“/etc/nova/nova.conf”，追加PciPassthroughFilter过滤器。

```
[filter_scheduler]
enabled_filters = ...,PciPassthroughFilter
available_filters = nova.scheduler.filters.all_filters
```


  b. 重启nova-scheduler服务。

```
systemctl restart openstack-nova-scheduler.service
```


5. 配置控制节点neutron-server。

  a. 编辑neutron-server的配置文件“/etc/neutron/plugins/ml2/ml2_conf.ini”，添加驱动sriovnicswitch，将flat范围设置为${network_name}，该名称与上文计算节点配置保持一致。

```
[ml2]
mechanism_drivers = openvswitch,sriovnicswitch
[ml2_type_flat]
flat_networks = ${network_name}
```


  b. 重启neutron-server。

```
systemctl restart neutron-server
```


6. 创建网络和SRIOV直通机密虚拟机。

  a. 创建网络，指定物理网络${network_name}。

```
openstack network create --provider-physical-network ${network_name} \
--provider-network-type flat \
sriov-net
```


  b. 创建地址池，指定IP地址前缀和前缀范围。

```
openstack subnet pool create \
--pool-prefix xxx.xxx.x.x/x \
--default-prefix-length 24 \
--share \
shared-default-subnetpool-v4
```


  c. 在之前创建的网络sriov-net下创建子网。

```
openstack subnet create --network
sriov-net
\
--subnet-pool
shared-default-subnetpool-v4
\
sriov-subnet
```


  d. 获取net_id，创建SRIOV网络端口。

```
net_id=$(openstack network show sriov-net -c id -f value)
openstack port create --network ${net_id} --vnic-type direct
sriov-port
```


  e. 获取端口ID。

```
port_id=$(openstack port show sriov-port -c id -f value)
```


  f. 使用    6.d
创建的端口创建机密虚拟机。

```
openstack server create --flavor
cca-flavor
--image
openEuler-image
\
--nic port-id=$port_id \
sriov_server
```


    若需要直通多个vf，则可以再次创建port，并在创建机密虚拟机时指定多个port即可。 openstack port create --network ${net_id} --vnic-type direct sriov-port1 openstack port create --network ${net_id} --vnic-type direct sriov-port2 port_id1=$(openstack port show sriov-port1 -c id -f value) port_id2=$(openstack port show sriov-port2 -c id -f value) openstack server create --flavor cca-flavor --image openEuler-image \ --nic port-id=$port_id1 \ --nic port-id=$port_id2 \ sriov_server

  g. 机密虚拟机部署成功后，登录控制台能够看到对应的网卡设备。

```
ip a
```
