このセクションでは、OpenStack のアクセス権なしモード(SE の DPDK)での NSX Advanced Load Balancer の構成の側面と、パフォーマンスを向上するために OpenStack からの SR-IOV と VLAN を使用する方法について説明します。
SR-IOV 仕様は、PCIe デバイスを仮想化するための標準化されたメカニズムを定義します。このメカニズムは、単一の PCIe イーサネット Controller を仮想化して、複数の PCIe デバイスとして表示できます。各デバイスは、ハイパーバイザーおよび仮想スイッチ レイヤーをバイパスして、インスタンスに直接割り当てることができます。その結果、低遅延とニアライン ワイヤ速度を実現できます。
物理機能 (PF):SR-IOV をサポートする物理イーサネット Controller。
仮想機能 (VF):物理イーサネット Controller から作成された仮想 PCIe デバイス。
このセクションでは、次の NIC をサポートする ixgbe-vf
ドライバの手順の概要を説明します。
82599
X520
X540
X550
X552
OpenStack での制限は次のとおりです。
SR-IOV ポートを作成する場合は、Horizon を使用しないでください。
SR-IOV は、OpenStack ダッシュボード (Horizon) に統合されません。SR-IOV インターフェイスを構成するには、CLI または API を使用する必要があります。
既存のサーバへの SR-IOV ポートの接続は、現在サポートされていません。この場合、NSX Advanced Load Balancer クラウド タイプは OpenStack アクセス権なしです。
SR-IOV の有効化
同等の OpenStack ノードの具体的な手順は次のとおりです。
仮想機能の作成(コンピューティング)
nova-compute(コンピューティング)の許可リスト PCI デバイス
neutron-server (Controller) の構成
nova-scheduler (Controller) の構成
neutron sriov-agent(コンピューティング)の有効化
仮想機能の作成(コンピューティング)
仮想機能を作成するには、次の手順を実行します。
BIOS で SR-IOV と VT-d が有効になっていることを確認します。
たとえば、
GRUB
を使用してカーネル パラメータにintel_iommu=on
を追加して、Linux で IOMMU を有効にします。各コンピューティング ノードで、PCI SYS インターフェイスを介して VF を作成します。
echo '8' > /sys/class/net/eth3/device/sriov_numvfs
ネットワーク インターフェイスは、PF を使用した PCI パススルーと、VF を使用した SR-IOV の両方に使用できます。PF を使用すると、
sriov_numvfs
ファイルに格納されている VF 番号は失われます。PF がオペレーティング システムに再度接続されている場合、このインターフェイスに割り当てられた VF の数はゼロになります。このインターフェイスに常に割り当てられている VF の数を維持するには、ifup
スクリプト コマンドを追加してインターフェイス構成ファイルを変更します。1 つの PF がサポートできる VF の最大数は、次のとおりです。
cat /sys/class/net/eth3/device/sriov_totalvfs63
Ubuntu で、/etc/network/interfaces ファイルを次のように変更します。
auto eth3 iface eth3 inet dhcp pre-up echo '4' > /sys/class/net/eth3/device/sriov_numvfs
Red Hat で、/sbin/ifup-local ファイルを次のように変更します。
#!/bin/sh if [[ "$1" == "eth3" ]] then echo '4' > /sys/class/net/eth3/device/sriov_numvfs fi
VF が作成されたことを確認します。
root@sriov:~# lspci | grep "Ethernet" 03:10.1 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) 03:10.3 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) 03:10.5 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) 03:10.7 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) 03:11.1 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) 03:11.3 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) 03:11.5 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) 03:11.7 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01)
再起動時に作成された VF を保持します。
echo "echo '7' > /sys/class/net/eth3/device/sriov_numvfs" >> /etc/rc.local
PCI デバイス nova-compute
(コンピューティング)の許可リスト
/etc/nova/nova.conf ファイルを次のように変更します。
pci_passthrough_whitelist = { "devname": "ens1f1", "physical_network": "provider"}
これにより、ens1f1
に属するすべての VF が インスタンスにパススルーされ、ネットワーク プロバイダに属することがコンピューティング サービスに通知されます。
neutron-server
(Controller) の構成
sriovnicswitch
をメカニズム ドライバとして追加します。
/etc/neutron/plugins/ml2/ml2_conf.ini ファイルを変更します。
mechanism_drivers
=openvswitch
、sriovnicswitch
neutron-server
サービスの再起動
nova-scheduler
(Controller) の構成
/etc/nova/nova.conf ファイルのデフォルト セクションで、次のように変更します。
scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter, PciPassthroughFilter scheduler_available_filters = nova.scheduler.filters.all_filters
Neutron sriov-agent
(コンピューティング)の有効化
/etc/neutron/plugins/ml2/sriov_agent.ini ファイルを変更します。
[sriov_nic] physical_device_mappings = provider:ens1f1 exclude_devices = [securitygroup] firewall_driver = neutron.agent.firewall.NoopFirewallDriver
SR-IOV ポートを使用したインスタンスの起動
SR-IOV を作成するためのネットワーク ID を取得します(この場合は、すでに作成され、SE の管理およびデータに使用されている network provider1 があります)。
net_id=neutron net-show provider1 | grep "\ id\ " | awk '{ print $4 }'
SR-IOV を作成します。ここでは
port. vnic_type=direct
が使用されます。port_id=neutron port-create $net_id --name sriov_port_1 --binding:vnic_type direct | grep "\ id\ " | awk '{ print $4 }' port_id=neutron port-create $net_id --name sriov_port_2 --binding:vnic_type direct | grep "\ id\ " | awk '{ print $4 }'
ポートの Port-Show では、各ポートが SR-IOV ポートとして作成されていることが示されます。
root@sriov:~# neutron port-show 3d6ef025-77ae-4136-a8b6-c48955fe5d2f
+-------------------------+---------------------------------------------------------------------------------+ | Field | Value | +-------------------------+---------------------------------------------------------------------------------+ | admin_state_up | True | | allowed_address_pairs | | | binding:host_id | sriov | | binding:profile | {"pci_slot": "0000:03:10.7", "physical_network": "provider", "pci_vendor_info": "8086:1515"} | | binding:vif_details | {"port_filter": false, "vlan": "0"} | | binding:vif_type | hw_veb | | binding:vnic_type | direct | | created_at | 2019-04-05T04:32:15Z | | description | | | device_id | 6cf94dd4-c6f3-4d49-84bd-639f40ed1b5e | | device_owner | compute:nova | | extra_dhcp_opts | | | fixed_ips | {"subnet_id": "03e68028-ecec-4fb4-9c03-546ed14bf3c4", "ip_address": "10.140.81.217"} | | id | 3d6ef025-77ae-4136-a8b6-c48955fe5d2f | | mac_address | fa:16:3e:af:d1:f6 | | name | sriov_port_2 | | network_id | c4260d3e-f275-4097-96be-03751495f291 | | port_security_enabled | True | | project_id | dbe81cf9baa8492288456cbb295a529e | | revision_number | 18 | | security_groups | 643c4bb8-7236-47ec-a91d-9038be4774cb | | status | ACTIVE | | tags | | | tenant_id | dbe81cf9baa8492288456cbb295a529e | | updated_at | 2019-04-05T04:39:02Z | +-------------------------+--------------------------------------------------------------------------------+
root@sriov:~# neutron port-show a9fe3f1a-2e1c-4c3f-9fa0-1c03ab29d2c0
+-------------------------------+--------------------------------------------------------------------------+ | Field | Value | +-------------------------------+--------------------------------------------------------------------------+ | admin_state_up | True | | allowed_address_pairs | | | binding:host_id | sriov | | binding:profile | {"pci_slot": "0000:03:11.1", "physical_network": "provider", "pci_vendor_info": "8086:1515"} | | binding:vif_details | {"port_filter": false, "vlan": "0"} | | binding:vif_type | hw_veb | | binding:vnic_type | direct | | created_at | 2019-04-05T04:32:06Z | | description | | | device_id | 6cf94dd4-c6f3-4d49-84bd-639f40ed1b5e | | device_owner | compute:nova | | extra_dhcp_opts | | | fixed_ips | {"subnet_id": "03e68028-ecec-4fb4-9c03-546ed14bf3c4", "ip_address": "10.140.81.213"} | | id | a9fe3f1a-2e1c-4c3f-9fa0-1c03ab29d2c0 | | mac_address | fa:16:3e:db:61:0a | | name | sriov_port_1 | | network_id | c4260d3e-f275-4097-96be-03751495f291 | | port_security_enabled | True | | project_id | dbe81cf9baa8492288456cbb295a529e | | revision_number | 19 | | security_groups | 643c4bb8-7236-47ec-a91d-9038be4774cb | | status | ACTIVE | | tags | | | tenant_id | dbe81cf9baa8492288456cbb295a529e | | updated_at | 2019-04-05T04:39:02Z | +-------------------------------+-------------------------------------------------------------------------+
OpenStack Controller がアクセス権なしモードで起動され、
se.qcow2
イメージが Glance にプッシュされます(「アクセス権なしの OpenStack クラウドへの NSX Advanced Load Balancer への OpenStack のインストール」の手順 3 に示すとおり)。次のように、
se.qcow2
イメージを使用して、2 つの NIC(データと管理)を持つインスタンスを作成します(「アクセス権なしの OpenStack クラウドへの NSX Advanced Load Balancer のインストール」の手順 4 に示すとおり)。openstack server create --flavor m1.se --image AVi-se-18.2.2-9224 --port a9fe3f1a-2e1c-4c3f-9fa0-1c03ab29d2c0 --port 3d6ef025-77ae-4136-a8b6-c48955fe5d2f test-sriov
/opt/avi/init_system.py スクリプトを実行し、SE が Controller に接続できることを確認します(「アクセス権なしの OpenStack クラウドへの NSX Advanced Load Balancer OpenStack のインストール」の手順 15 に示すとおり)。
SE データ vNIC(SE へのログイン)が、VIRTIO インターフェイスではなく SR-IOV VF として起動していることを確認します。
root@10-140-81-213:~# lspci | grep "Ethernet" 00:04.0 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) 00:05.0 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01)
SE データ vNIC ポートが SR-IOV ポートの上で DPDK を実行するには、Controller シェルにログインします(『VMware NSX Advanced Load Balancer 管理ガイド』の「コントローラ CLI へのアクセス」セクション」を参照してください)。また、SE グループのプロパティ(これは、その SE グループのすべての SE に影響します)で、次の変更を行って、NIC が DPDK モードで稼動するように変更します。
[admin:avi-ctrlr]: serviceenginegroup> se_use_dpdk [admin:avi-ctrlr]: serviceenginegroup> se_dpdk_pmd
注:変更を有効にするには、SE を再起動する必要があります。