SR-IOVおよびPCI
このセクションには、KVMに導入されたvSRX仮想ファイアウォールインスタンスのSR-IOVに関する以下のトピックが含まれています。
SR-IOV の概要
KVM上のvSRX仮想ファイアウォールは、シングルルートI/O仮想化(SR-IOV)インターフェイスタイプをサポートします。SR-IOV は、単一の物理 NIC を、 仮想マシン (VM) が接続できる複数の vNIC または仮想関数 (VF) として表示できるようにする標準です。SR-IOV は、Intel VT-d などの他の仮想化テクノロジと組み合わせて、VM の I/O パフォーマンスを向上させます。SR-IOV を使用すると、各 VM は、VM に接続されている VF のキューに入れられたパケットに直接アクセスできます。SR-IOV は、物理ベア メタル インターフェイスの I/O パフォーマンスに近い I/O パフォーマンスが必要な場合に使用します。
SR-IOVインターフェイスを使用する導入では、vSRX仮想ファイアウォールJunos OSインターフェイスにMACアドレスが割り当てられると、パケットが破棄されます。この問題は、SR-IOV が PF または VF で MAC アドレスの変更を許可しないために発生します。
KVMのSR-IOVは、インターフェイス番号を再マップしません。vSRX仮想ファイアウォールVM XMLファイルのインターフェイス順序は、vSRX仮想ファイアウォールインスタンスのJunos OS CLIに表示されるインターフェイス順序と一致します。
SR-IOV は、次の 2 つの PCI 機能を使用します。
PF(物理機能)— SR-IOV 機能を搭載したフル PCIe デバイス。物理機能は、通常のPCIデバイスとして検出、管理、および設定されます。物理機能は、仮想機能を割り当てることによって SR-IOV 機能を構成および管理します。SR-IOV が無効になっている場合、ホストは 1 つの物理 NIC に 1 つの PF を作成します。
仮想関数 (VF) - I/O のみを処理する単純な PCIe 関数。各仮想関数は、物理関数から派生します。デバイスが持つことができる仮想関数の数は、デバイスのハードウェアによって制限されます。単一のイーサネットポートである物理デバイスは、ゲストと共有できる多くの仮想機能にマップできます。SR-IOV が有効になっている場合、ホストは 1 つの物理 NIC に 1 つの PF と複数の VF を作成します。VF の数は、構成とドライバーのサポートによって異なります。
信頼モードを無効にしたSR-IOV HAサポート(KVMのみ)
信頼モードを無効にした場合のSR-IOV HAサポートを理解する(KVMのみ)
冗長イーサネットインターフェイス(RETH)は、SRXクラスターの各参加ノードからの同数のメンバーインターフェイスで構成される仮想インターフェイスです。IPアドレス、QoS、ゾーン、VPNなどのすべての論理設定は、このインターフェイスにバインドされます。物理プロパティは、メンバー インターフェイスまたは子インターフェイスに適用されます。RETHインターフェイスには、クラスタIDを使用して計算される仮想MACアドレスがあります。RETHは、Junos OSに集合型インターフェイス/LAGとして実装されています。LAG の場合、親(論理)IFD の MAC アドレスが各子インターフェイスにコピーされます。RETHインターフェイスの下で子インターフェイスを設定すると、RETHインターフェイスの仮想MACが子物理インターフェイスのフィールドで上書き current MAC address されます。これには、対応するNICで仮想MACアドレスをプログラムする必要もあります。
Junos OSは、vSRX仮想ファイアウォール上のVMとして稼働します。Junos OS は NIC に直接アクセスできず、ハイパーバイザーによって提供される仮想 NIC アクセスのみを有し、同じホスト マシン上で実行されている他の VM と共有される可能性があります。この仮想アクセスには、NICで仮想MACアドレスをプログラムするために必要なトラストモードと呼ばれる特別なモードなどの特定の制限があります。デプロイ中は、セキュリティの問題が発生する可能性があるため、信頼モードのアクセスを提供できない場合があります。このような環境でRETHモデルが動作できるようにするために、MAC書き換え動作が変更されています。親仮想MACアドレスを子にコピーする代わりに、子の物理MACアドレスをそのまま保持し、クラスタのアクティブノードに属する子の物理MACアドレスをrethインターフェイスの 現在のMAC にコピーします。このようにすると、信頼モードが無効になっている場合、MAC書き換えアクセスは必要ありません。
vSRX仮想ファイアウォールの場合、DPDKはハイパーバイザーから提供された物理MACアドレスを読み取り、Junos OSコントロールプレーンと共有します。スタンドアロン モードでは、この物理 MAC アドレスは物理 IF にプログラムされます。ただし、クラスタモードでは同じ機能をサポートしていないため、物理インターフェイスのMACアドレスはジュニパーの予約済みMACプールから取得されます。信頼モードを実現できない環境では、ハイパーバイザーは物理的なMACアドレスを提供できません。
この問題を克服するために、予約済み MAC プールから割り当てる代わりに、ハイパーバイザー提供の物理 MAC アドレスを使用するサポートを追加しました。 信頼モードを無効にして SR-IOV サポートを構成する(KVM のみ)を参照してください。
信頼モードを無効にして SR-IOV サポートを構成する (KVM のみ)

Junos OS Release 19.4R1以降、SR-IOV HAはトラストモードを無効にしてサポートされます。このモードを有効にするには、 use-active-child-mac-on-reth
use-actual-mac-on-physical-interfaces
階層レベルで および 設定ステートメント [edit chassis cluster]
を設定します。クラスタでコマンドを設定する場合、ハイパーバイザーは子物理インターフェイスのMACアドレスを割り当て、親RETHインターフェイスのMACアドレスはアクティブな子物理インターフェイスのMACアドレスで上書きされます
収益インターフェイスがSR-IOVの場合のみ、信頼モードを無効にしてSR-IOVを設定できます。実際のMAC物理インターフェイスが設定されている場合、ファブリックインターフェイスまたはリンクは信頼モードを無効にした状態でSR-IOVを使用できません。
収益インターフェイスのみがSR-IOVである場合、信頼モードを無効にした状態でSRIOVを使用することがサポートされます。
このモードを有効にするには、vSRX仮想ファイアウォールインスタンスを再起動する必要があります。コマンドを有効にするには、クラスタ内の両方のノードを再起動する必要があります。
この機能を有効にするには、コマンド use-active-child-mac-on-reth
と use-actual-mac-on-physical-interfaces
を一緒に設定する必要があります。
関連項目
制限
KVMでトラストモードを無効にした状態でのSR-IOV HAサポートには、以下の制限があります。
トラストモードを無効にしたSR-IOV HAサポートは、KVMベースのシステムでのみサポートされています。
rethインターフェイスでは、各vSRX仮想ファイアウォールクラスターノードのメンバーとして最大1つのポートを持つことができます。
NAT プール内の IP アドレスのフェイルオーバー時に G-ARP が送信されないため、NAT プールに機能を使用
security nat proxy-arp
できません。代わりに、アップストリームルーターのNATプール範囲へのルートを設定して、vSRX仮想ファイアウォールrethインターフェイスのIPアドレスをネクストホップとして指すことができます。または、直接接続されたホストがNATプールアドレスにアクセスする必要がある場合は、これらのNATプールアドレスをrethインターフェイスでプロキシARP用に設定できます。reth インターフェイスに多数の VLAN が設定されている場合、フェイルオーバー時にすべての G-ARP を送信するのに時間がかかることがあります。これにより、トラフィックの顕著な中断が発生する可能性があります。
データプレーンのフェイルオーバーにより、rethインターフェイスのMACアドレスが変更されます。そのため、フェイルオーバーは、直接接続された隣接するレイヤー3デバイス(ルーターまたはサーバー)に対して透過的ではありません。vSRX仮想ファイアウォールのIPアドレスは、隣接デバイスのARPテーブルで新しいMACアドレスにマッピングする必要があります。vSRX仮想ファイアウォールは、これらのデバイスに役立つG-ARPを送信します。これらの隣接デバイスがvSRX仮想ファイアウォールから受信したG-ARPに作用しない場合、または応答が遅い場合、そのデバイスがARPテーブルを正しく更新するまでトラフィックが中断される可能性があります。
-
以下の vSRX 仮想ファイアウォール機能は、SR-IOV インターフェイスを使用する展開ではサポートされていません。
これらの制限は、PF ドライバーを更新または制御できない展開に適用されます。この制限は、サポートされているジュニパーネットワークスのデバイスにvSRX仮想ファイアウォールが導入されている場合は適用されません。
-
高可用性(HA)
-
IRB インターフェイス
-
IPv6アドレッシング
-
ジャンボフレーム
-
レイヤー 2 のサポート
-
OSPF や IPv6 などの他の機能とのマルチキャスト
-
パケットモード
-
KVMでのSR-IOVインターフェイスの設定
SR-IOVをサポートする物理NICがある場合、SR-IOV対応のvNICまたは仮想機能(VF)をvSRX仮想ファイアウォールインスタンスにアタッチして、パフォーマンスを向上させることができます。SR-IOV を使用する場合は、すべての収益ポートを SR-IOV として設定することをお勧めします。
KVMでのvSRX仮想ファイアウォールに対するSR-IOVのサポートについては、以下の点に注意してください。
Junos OSリリース15.1X49-D90およびJunos OSリリース17.3R1以降、KVMに導入されたvSRX仮想ファイアウォールインスタンスは、Intel 82599またはX520/540に加えて、Intel X710/XL710 NIC上のSR-IOVをサポートします。
Junos OS リリース 18.1R1 以降、KVM 上に展開された vSRX 仮想ファイアウォール インスタンスは、Mellanox ConnectX-3 および ConnectX-4 ファミリー アダプタ上の SR-IOV をサポートします。
vNICと、vSRX仮想ファイアウォールVMに適用されるvCPUとvRAMの数に基づいて、KVMに展開した場合のパフォーマンスのvSRX仮想ファイアウォールのスケールアップについては、KVMを使用したvSRXを理解するのにあるvSRX仮想ファイアウォールのパフォーマンスのスケールアップに関するディスカッションを参照してください。
SR-IOV対応VFをvSRX仮想ファイアウォールインスタンスにアタッチする前に、以下のタスクを完了する必要があります。
SR-IOV 対応の物理ネットワーク アダプターをホスト サーバーに挿入します。
ホストサーバーの BIOS でインテル VT-d CPU 仮想化拡張機能を有効にします。Intel VT-d 拡張機能は、物理デバイスをゲストに直接割り当てるためのハードウェアサポートを提供します。システムによって VT-d を有効にする方法が異なるため、ベンダーにプロセスを確認してください。
ホストサーバーの起動シーケンス中にBIOS設定に移動してSR-IOV設定を確認し、SR-IOVがシステム/サーバーBIOSレベルで有効になっていることを確認します。サーバーの製造元が異なれば、BIOS レベルで SR-IOV を有効にするために使用される BIOS パラメーターの命名規則も異なります。たとえば、Dellサーバーの場合、[ SR-IOVグローバル有効 ]オプションが [有効]に設定されていることを確認します。
SR-IOV インターフェイスの設定に使用することを推奨します virt-manager
。CLI コマンドを使用して PCI ホスト デバイスを VM に追加する方法については、 virsh attach-device
コマンドの virsh
ドキュメントを参照してください。
また、インターフェイスは 1G、10G、40G、100G の順に設定する必要があります。この順序に従わない場合は、ネットワークアダプタをリセットする必要があります。
グラフィカルインターフェイスを使用してSR-IOV VFをvSRX仮想ファイアウォールVMに追加するには、 virt-manager
次の手順に従います。
CLIコマンドを使用してSR-IOV VFをvSRX仮想ファイアウォールVM virsh
に追加するには、次の手順に従います。
eno2インターフェイスに4つの仮想関数を定義し、番号4でsriov_numvfsファイルを更新します。
root@LabHost:~# echo 4 > /sys/class/net/eno2/device/sriov_numvfs root@LabHost:~# more /sys/class/net/eno2/device/sriov_numvfs
デバイスを識別します。
仮想マシンへのデバイス割り当て用に指定された PCI デバイスを特定します。
lspci
コマンドを使用して、使用可能な PCI デバイスを一覧表示します。の出力をlspci
grep
で絞り込むことができます。コマンドを使用して
lspci
、VF ID に従って VF 番号を確認します。root@ kvmsrv:~# lspci | grep Ether
…… 83:00.0 Ethernet controller: Intel Corporation Ethernet Controller XL710 for 40GbE QSFP+ (rev 02) - Physical Function 83:00.1 Ethernet controller: Intel Corporation Ethernet Controller XL710 for 40GbE QSFP+ (rev 02) - Physical Function 83:02.0 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:02.1 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:02.2 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:02.3 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:02.4 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:02.5 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:02.6 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:02.7 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.0 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.1 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.2 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.3 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.4 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.5 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.6 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) 83:0a.7 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02) ………
KVMのvSRX仮想ファイアウォールXMLプロファイルからSR-IOVデバイス割り当てを追加し、デバイス情報を確認します。
ドライバーはvfioまたはkvmのいずれかを使用できますが、KVMサーバーのOS/カーネルバージョンと仮想化サポートのドライバーによって異なります。アドレスタイプは、各SR-IOV VF(仮想機能)の一意のPCIスロット番号を参照します。
ドメイン、バス、および機能に関する情報は、 コマンドの出力
virsh nodedev-dumpxml
から入手できます。<interface type="hostdev" managed="yes"> <driver name="vfio"/> <source> <address type="pci" domain="0x0000" bus="0x83" slot="0x02" function="0x3"/> </source> <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x0"/> </interface>
編集設定でPCIデバイスを追加し、VF番号に従ってVFを選択します。
メモ:この操作は、VM の電源がオフのときに実行する必要があります。また、VF または MAC の競合につながる可能性がある PCI デバイスを使用して VM を複製しないでください。
コマンドを使用して
# virsh start name of virtual machine
VM を起動します。
変更履歴テーブル
機能のサポートは、使用しているプラットフォームとリリースによって決まります。 機能エクスプローラー を使用して、機能がプラットフォームでサポートされているかどうかを判断します。