7.4. OVS-DPDK パラメーターの手動計算
本項では、OVS-DPDK が director の network_environment.yaml
heat テンプレート内のパラメーターを使用して CPU とメモリーを設定し、パフォーマンスを最適化する方法について説明します。この情報を使用して、コンピュートノードでのハードウェアサポートを評価すると共に、ハードウェアを分割して OVS-DPDK デプロイメントを最適化する方法を評価します。
上記の方法によらず、derived_parameters.yaml
ワークフローを使用してこれらの値を生成する方法の詳細は、「ワークフローと派生パラメーター」を参照してください。
CPU コアを割り当てる際には必ず、同じ物理コア上の CPU シブリングスレッド (あるいは論理 CPU) をペアにしてください。
コンピュートノード上の CPU と NUMA ノードを特定する方法の詳細は、「NUMA ノードのトポロジーについての理解」を参照してください。この情報を使用して、CPU と他のパラメーターをマッピングして、ホスト、ゲストインスタンス、OVS-DPDK プロセスのニーズに対応します。
7.4.1. CPU パラメーター
OVS-DPDK では、以下に示す CPU の分割用パラメーターが使用されます。
- OvsPmdCoreList
DPDK Poll Mode Driver (PMD) に使用する CPU コアを提供します。DPDK インターフェースのローカルの NUMA ノードに関連付けられた CPU コアを選択します。OVS の
pmd-cpu-mask
の値にOvsPmdCoreList
を使用します。OvsPmdCoreList
に関する以下の推奨事項を確認してください。- シブリングスレッドをペアにします。
-
OvsDpdkCoreList
のコアをすべて除外します。 -
1 番目の物理コア上の両方のスレッドシブリングの論理 CPU を両方の NUMA ノードに割り当てないでください。これらは
OvsDpdkCoreList
パラメーターに使用する必要があります。 - パフォーマンスは、この PMD コアリストに割り当てられている物理コアの数によって異なります。DPDK NIC に関連付けられている NUMA ノードで、必要なコアを割り当てます。
- DPDK NIC を持つ NUMA ノードの場合には、パフォーマンス要件に基づいて、必要な物理コア数を決定し、各物理コアの全シブリングスレッド (あるいは論理 CPU) を追加します。
- DPDK NIC を持たない NUMA ノードの場合には、任意の物理コア (ただし NUMA ノードの 1 番目の物理コアを除く) のシブリングスレッド (あるいは論理 CPU) を割り当てます。DPDK NIC がない場合、ゲストインスタンスを正常に作成するために、NUMA ノード上に最小限の DPDK Poll Mode Driver が必要です。
NUMA ノードに DPDK NIC が関連付けられていない場合でも、両方の NUMA ノードで DPDK PMD スレッドを確保する必要があります。
- NovaComputeCpuDedicatedSet
ピニングされたインスタンス CPU のプロセスをスケジューリングできる物理ホスト CPU 番号のコンマ区切りリストまたは範囲。たとえば、
NovaComputeCpuDedicatedSet: [4-12,^8,15]
は、コア 4 - 12 の範囲 (ただし 8 を除く) および 15 を確保します。-
OvsPmdCoreList
とOvsDpdkCoreList
のコアをすべて除外します。 - 残りのコアをすべて追加します。
- シブリングスレッドをペアにします。
-
- NovaComputeCpuSharedSet
-
物理ホスト CPU 番号のコンマ区切りリストまたは範囲。インスタンスエミュレータースレッド用のホスト CPU を決定するのに使用します。このパラメータの値と
OvsDpdkCoreList
に設定した値を一致させることを推奨します。 - IsolCpusList
ホストのプロセスから分離される CPU コアのセット。
IsolCpusList
は、tuned-profiles-cpu-partitioning
コンポーネント用のcpu-partitioning-variable.conf
ファイルのisolated_cores
の値として使用されます。IsolCpusList
に関する以下の推奨事項を確認してください。-
OvsPmdCoreList
およびNovaComputeCpuDedicatedSet
のコア一覧と一致するようにします。 - シブリングスレッドをペアにします。
-
- OvsDpdkCoreList
handler および revalidator スレッドなどの、データパス以外の OVS-DPDK プロセス用の CPU コアを提供します。このパラメーターは、マルチ NUMA ノードハードウェア上でのデータパスの全体的なパフォーマンスには影響は及ぼしません。
OvsDpdkCoreList
は OVS のdpdk-lcore-mask
の値に使用され、それらのコアはホストと共有されます。OvsDpdkCoreList
に関する以下の推奨事項を確認してください。- NUMA ノードに DPDK NIC が関連付けられていない場合でも、各 NUMA ノードの 1 番目の物理コアおよびシブリングスレッドを割り当てます。
-
これらのコアは、
OvsPmdCoreList
およびNovaComputeCpuDedicatedSet
のコアの一覧と相互に排他的でなければなりません。
- DerivePciWhitelistEnabled
仮想マシン用に Virtual Function (VF) を確保するには、
NovaPCIPassthrough
パラメーターを使用して Nova に渡される VF の一覧を作成します。一覧から除外された VF は、引き続きホスト用に利用することができます。Red Hat では、
DerivePciWhitelistEnabled
の値をデフォルトのtrue
からfalse
に変更してから、NovaPCIPassthrough
パラメーターの一覧を手動で設定することを推奨します。一覧内の VF ごとに、アドレス値に解決する正規表現でアドレスパラメーターを反映させます。
手動で一覧を作成するプロセスの例を以下に示します。
eno2
という名前のデバイスで NIC の分割が有効な場合は、以下のコマンドで VF の PCI アドレスを一覧表示します。[heat-admin@compute-0 ~]$ ls -lh /sys/class/net/eno2/device/ | grep virtfn lrwxrwxrwx. 1 root root 0 Apr 16 09:58 virtfn0 -> ../0000:18:06.0 lrwxrwxrwx. 1 root root 0 Apr 16 09:58 virtfn1 -> ../0000:18:06.1 lrwxrwxrwx. 1 root root 0 Apr 16 09:58 virtfn2 -> ../0000:18:06.2 lrwxrwxrwx. 1 root root 0 Apr 16 09:58 virtfn3 -> ../0000:18:06.3 lrwxrwxrwx. 1 root root 0 Apr 16 09:58 virtfn4 -> ../0000:18:06.4 lrwxrwxrwx. 1 root root 0 Apr 16 09:58 virtfn5 -> ../0000:18:06.5 lrwxrwxrwx. 1 root root 0 Apr 16 09:58 virtfn6 -> ../0000:18:06.6 lrwxrwxrwx. 1 root root 0 Apr 16 09:58 virtfn7 -> ../0000:18:06.7
この場合、VF 0、4、および 6 が NIC の分割用に
eno2
で使用されます。以下の例に示すように、NovaPCIPassthrough
を手動で設定して VF 1 - 3、5、および 7 を含めます。したがって、VF 0、4、および 6 は除外します。NovaPCIPassthrough: - physical_network: "sriovnet2" address: {"domain": ".*", "bus": "18", "slot": "06", "function": "[1-3]"} - physical_network: "sriovnet2" address: {"domain": ".*", "bus": "18", "slot": "06", "function": "[5]"} - physical_network: "sriovnet2" address: {"domain": ".*", "bus": "18", "slot": "06", "function": "[7]"}