第2章 SR-IOV ネットワークデバイスの設定
クラスターで Single Root I/O Virtualization (SR-IOV) デバイスを設定できます。
次のドキュメントでタスクを実行する前に、SR-IOV Network Operator がインストールされ ていることを確認してください。
2.1. SR-IOV ネットワークノード設定オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
SR-IOV ネットワークノードポリシーを作成して、ノードの SR-IOV ネットワークデバイス設定を指定します。ポリシーの API オブジェクトは sriovnetwork.openshift.io
API グループの一部です。
以下の YAML は SR-IOV ネットワークノードポリシーを説明しています。
- 1
- カスタムリソースオブジェクトの名前。
- 2
- SR-IOV Network Operator がインストールされている namespace。
- 3
- SR-IOV ネットワークデバイスプラグインのリソース名。1 つのリソース名に複数の SR-IOV ネットワークポリシーを作成できます。
名前を指定するときは、
resourceName
で使用できる構文式^[a-zA-Z0-9_]+$
を必ず使用してください。 - 4
- ノードセレクターは設定するノードを指定します。選択したノード上の SR-IOV ネットワークデバイスのみが設定されます。SR-IOV Container Network Interface (CNI) プラグインおよびデバイスプラグインは、選択したノードにのみデプロイされます。重要
SR-IOV Network Operator は、ノードネットワーク設定ポリシーを順番にノードに適用します。ノードネットワーク設定ポリシーを適用する前に、SR-IOV Network Operator は、ノードのマシン設定プール (MCP) が
Degraded
またはUpdating
などの正常ではない状態にないか確認します。ノード正常ではない MCP にある場合、ノードネットワーク設定ポリシーをクラスター内のすべての対象ノードに適用するプロセスは、MCP が正常な状態に戻るまで一時停止します。正常でない MCP 内にあるノードが、他のノード (他の MCP 内のノードを含む) にノードネットワーク設定ポリシーを適用することを阻害しないようにするには、MCP ごとに別のノードネットワーク設定ポリシーを作成する必要があります。
- 5
- オプション: 優先度は
0
から99
までの整数値で指定されます。値が小さいほど優先度が高くなります。たとえば、10
の優先度は99
よりも高くなります。デフォルト値は99
です。 - 6
- オプション: Physical Function とそのす Virtual Function すべての最大転送単位 (MTU)。MTU の最大値は、複数の異なるネットワークインターフェイスコントローラー (NIC) に応じて異なります。重要
デフォルトのネットワークインターフェイス上に仮想機能を作成する場合は、MTU がクラスター MTU と一致する値に設定されていることを確認してください。
Pod に割り当てられている 1 つの Virtual Function の MTU を変更する場合は、SR-IOV ネットワークノードポリシーで MTU 値を空白のままにします。そうしない場合、SR-IOV Network Operator により Virtual Function の MTU が SR-IOV ネットワークノードポリシーで定義された MTU 値に戻され、ノードドレインがトリガーされる可能性があります。
- 7
- オプション:
/dev/vhost-net
デバイスを Pod にマウントするには、needVhostNet
をtrue
に設定します。Data Plane Development Kit(DPDK) と共にマウントされた/dev/vhost-net
デバイスを使用して、トラフィックをカーネルネットワークスタックに転送します。 - 8
- SR-IOV 物理ネットワークデバイス用に作成する Virtual Function (VF) の数。Intel ネットワークインターフェイスコントローラー (NIC) の場合、VF の数はデバイスがサポートする VF の合計よりも大きくすることはできません。Mellanox NIC の場合、VF の数は
127
よりも大きくすることはできません。 - 9
externallyManaged
フィールドは、SR-IOV Network Operator が Virtual Function (VF) のすべてを管理するか、またはサブセットのみを管理するかを示します。値をfalse
に設定すると、SR-IOV Network Operator が PF 上のすべての VF を管理および設定します。注記externallyManaged
をtrue
に設定した場合、SriovNetworkNodePolicy
リソースを適用する前に、物理機能 (PF) 上に仮想機能 (VF) を手動で作成する必要があります。VF が事前に作成されていないと、SR-IOV Network Operator の Webhook によってポリシー要求がブロックされます。externallyManaged
をfalse
に設定した場合、SR-IOV Network Operator が、VF を自動的に作成および管理し、必要に応じて VF のリセットなどを実行します。ホストシステムで VF を使用するには、NMState を通じて VF を作成し、
externallyManaged
をtrue
に設定する必要があります。このモードでは、SR-IOV Network Operator は、ポリシーのnicSelector
フィールドで明示的に定義されている VF を除き、PF または手動で管理される VF を変更しません。ただし、SR-IOV Network Operator は、Pod のセカンダリーインターフェイスとして使用される VF を引き続き管理します。- 10
- NIC セレクターにより、このリソースを適用するデバイスを指定します。すべてのパラメーターの値を指定する必要はありません。意図せずにデバイスを選択しないように、ネットワークデバイスを極めて正確に特定することが推奨されます。
rootDevices
を指定する場合、vendor
、deviceID
、またはpfNames
の値も指定する必要があります。pfNames
およびrootDevices
の両方を同時に指定する場合、それらが同一のデバイスを参照していることを確認します。netFilter
の値を指定する場合、ネットワーク ID は一意の ID であるためにその他のパラメーターを指定する必要はありません。 - 11
- オプション: SR-IOV ネットワークデバイスの 16 進数ベンダー識別子。許可される値は
8086
(Intel) と15b3
(Mellanox) のみです。 - 12
- オプション: SR-IOV ネットワークデバイスの 16 進数デバイス識別子。たとえば、
101b
は Mellanox ConnectX-6 デバイスのデバイス ID です。 - 13
- オプション: リソースを適用する必要がある 1 つ以上の物理機能 (PF) 名の配列。
- 14
- オプション: リソースを適用する必要がある 1 つ以上の PCI バスアドレスの配列。たとえば、
0000:02:00.1
です。 - 15
- オプション: プラットフォーム固有のネットワークフィルター。サポートされるプラットフォームは Red Hat OpenStack Platform (RHOSP) のみです。許可される値は、
openstack/NetworkID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
の形式を使用します。xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
を、/var/config/openstack/latest/network_data.json
メタデータファイルの値に置き換えます。このフィルターにより、VF が特定の OpenStack ネットワークに確実に関連付けられます。Operator はこのフィルターを使用して、OpenStack プラットフォームによって提供されるメタデータに基づき、VF を適切なネットワークにマッピングします。 - 16
- オプション: このリソースから作成される VF 用に設定するドライバー。許可される値は
netdevice
およびvfio-pci
のみです。デフォルト値はnetdevice
です。Mellanox NIC をベアメタルノードの DPDK モードで機能させるには、
netdevice
ドライバータイプを使用し、isRdma
をtrue
に設定します。 - 17
- オプション: Remote Direct Memory Access (RDMA) モードを有効にするかどうかを設定します。デフォルト値は
false
です。isRdma
パラメーターがtrue
に設定される場合、引き続き RDMA 対応の VF を通常のネットワークデバイスとして使用できます。デバイスはどちらのモードでも使用できます。isRdma
をtrue
に設定し、追加のneedVhostNet
をtrue
に設定して、Fast Datapath DPDK アプリケーションで使用する Mellanox NIC を設定します。注記Intel NIC の場合、
isRdma
パラメーターをtrue
に設定することはできません。 - 18
- オプション: VF のリンクタイプ。イーサネットのデフォルト値は
eth
です。InfiniBand の場合、この値を 'ib' に変更します。linkType
がib
に設定されている場合、SR-IOV Network Operator Webhook によってisRdma
はtrue
に自動的に設定されます。linkType
がib
に設定されている場合、deviceType
はvfio-pci
に設定できません。SriovNetworkNodePolicy の linkType を
eth
に設定しないでください。デバイスプラグインによって報告される使用可能なデバイスの数が正しくなくなる可能性があります。 - 19
- オプション: ハードウェアオフロードを有効にするには、
eSwitchMode
フィールドを"switchdev"
に設定する必要があります。ハードウェアオフロードの詳細は、「ハードウェアオフロードの設定」を参照してください。 - 20
- オプション: SR-IOV ネットワークリソースの NUMA ノードを Topology Manager にアドバタイスする場合を除外するには、値を
true
に設定します。デフォルト値はfalse
です。
2.1.1. SR-IOV ネットワークノードの設定例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例は、InfiniBand デバイスの設定を示しています。
InfiniBand デバイスの設定例
以下の例は、RHOSP 仮想マシンの SR-IOV ネットワークデバイスの設定を示しています。
仮想マシンの SR-IOV デバイスの設定例
2.1.2. SR-IOV ネットワークデバイスの自動検出 リンクのコピーリンクがクリップボードにコピーされました!
SR-IOV Network Operator は、クラスターでワーカーノード上の SR-IOV 対応ネットワークデバイスを検索します。Operator は、互換性のある SR-IOV ネットワークデバイスを提供する各ワーカーノードの SriovNetworkNodeState カスタムリソース (CR) を作成し、更新します。
CR にはワーカーノードと同じ名前が割り当てられます。status.interfaces
リストは、ノード上のネットワークデバイスに関する情報を提供します。
SriovNetworkNodeState
オブジェクトは変更しないでください。Operator はこれらのリソースを自動的に作成し、管理します。
2.1.2.1. SriovNetworkNodeState オブジェクトの例 リンクのコピーリンクがクリップボードにコピーされました!
以下の YAML は、SR-IOV Network Operator によって作成される SriovNetworkNodeState
オブジェクトの例です。
SriovNetworkNodeState オブジェクト
2.1.3. SR-IOV デバイスの Virtual Function (VF) パーティション設定 リンクのコピーリンクがクリップボードにコピーされました!
Virtual Function (VF) を同じ物理機能 (PF) から複数のリソースプールに分割する必要がある場合があります。たとえば、VF の一部をデフォルトドライバーで読み込み、残りの VF を vfio-pci
ドライバーで読み込む必要がある場合などです。このようなデプロイメントでは、SriovNetworkNodePolicy カスタムリソース (CR) の pfNames
セレクターは、以下の形式を使用してプールの VF の範囲を指定するために使用できます: <pfname>#<first_vf>-<last_vf>
たとえば、以下の YAML は、VF が 2
から 7
まである netpf0
という名前のインターフェイスのセレクターを示します。
pfNames: ["netpf0#2-7"]
pfNames: ["netpf0#2-7"]
-
netpf0
は PF インターフェイス名です。 -
2
は、範囲に含まれる最初の VF インデックス (0 ベース) です。 -
7
は、範囲に含まれる最後の VF インデックス (0 ベース) です。
以下の要件を満たす場合、異なるポリシー CR を使用して同じ PF から VF を選択できます。
-
numVfs
の値は、同じ PF を選択するポリシーで同一である必要があります。 -
VF インデックスは、
0
から<numVfs>-1
の範囲にある必要があります。たとえば、numVfs
が8
に設定されているポリシーがある場合、<first_vf>
の値は0
よりも小さくすることはできず、<last_vf>
は7
よりも大きくすることはできません。 - 異なるポリシーの VF の範囲は重複しないようにしてください。
-
<first_vf>
は<last_vf>
よりも大きくすることはできません。
以下の例は、SR-IOV デバイスの NIC パーティション設定を示しています。
ポリシー policy-net-1
は、デフォルトの VF ドライバーと共に PF netpf0
の VF 0
が含まれるリソースプール net-1
を定義します。ポリシー policy-net-1-dpdk
は、vfio
VF ドライバーと共に PF netpf0
の VF 8
から 15
までが含まれるリソースプール net-1-dpdk
を定義します。
ポリシー policy-net-1
:
ポリシー policy-net-1-dpdk
:
インターフェイスが正常にパーティショニングされていることを確認します
次のコマンドを実行して、インターフェイスが SR-IOV デバイスの Virtual Function (VF) にパーティショニングされていることを確認します。
ip link show <interface>
$ ip link show <interface>
- 1
<interface>
を、SR-IOV デバイスの VF にパーティショニングするときに指定したインターフェイス (例:ens3f1
) に置き換えます。
出力例
2.1.4. OpenStack で SR-IOV を使用するクラスター用のテスト Pod テンプレート リンクのコピーリンクがクリップボードにコピーされました!
次の testpmd
Pod では、ヒュージページ、予約済み CPU、および SR-IOV ポートを使用したコンテナーの作成を紹介します。
testpmd
Pod の例
- 1
- この例では、パフォーマンスプロファイルの名前が
cnf-performance profile
であると想定しています。
2.1.5. OpenStack で OVS ハードウェアオフロードを使用するクラスター用のテスト Pod テンプレート リンクのコピーリンクがクリップボードにコピーされました!
次の testpmd
Pod は、Red Hat OpenStack Platform (RHOSP) での Open vSwitch (OVS) ハードウェアオフロードを示しています。
testpmd
Pod の例
- 1
- パフォーマンスプロファイルの名前が
cnf-performance profile
でない場合は、その文字列を正しいパフォーマンスプロファイル名に置き換えます。
2.1.6. Downward API の huge page リソースの挿入 リンクのコピーリンクがクリップボードにコピーされました!
Pod 仕様に huge page のリソース要求または制限が含まれる場合、Network Resources Injector は Downward API フィールドを Pod 仕様に自動的に追加し、huge page 情報をコンテナーに提供します。
Network Resources Injector は、podnetinfo
という名前のボリュームを追加し、Pod の各コンテナー用に /etc/podnetinfo
にマウントされます。ボリュームは Downward API を使用し、huge page の要求および制限に関するファイルを追加します。ファイルの命名規則は以下のとおりです。
-
/etc/podnetinfo/hugepages_1G_request_<container-name>
-
/etc/podnetinfo/hugepages_1G_limit_<container-name>
-
/etc/podnetinfo/hugepages_2M_request_<container-name>
-
/etc/podnetinfo/hugepages_2M_limit_<container-name>
直前のリストで指定されているパスは、app-netutil
ライブラリーと互換性があります。デフォルトで、ライブラリーは、/etc/podnetinfo
ディレクトリーのリソース情報を検索するように設定されます。Downward API パス項目を手動で指定する選択をする場合、app-netutil
ライブラリーは前述のリストのパスに加えて以下のパスを検索します。
-
/etc/podnetinfo/hugepages_request
-
/etc/podnetinfo/hugepages_limit
-
/etc/podnetinfo/hugepages_1G_request
-
/etc/podnetinfo/hugepages_1G_limit
-
/etc/podnetinfo/hugepages_2M_request
-
/etc/podnetinfo/hugepages_2M_limit
Network Resources Injector が作成できるパスと同様に、前述の一覧のパスの末尾にはオプションで _<container-name>
接尾辞を付けることができます。