2.5. 単純なコンピュートノードの CPU パーティショニングとメモリーチェック
前提条件
デプロイされたコンピュートノードでこのコマンドを実行し、CPU マスクが TripleO Heat Template 値にどのようにマップされるかに注意する。
sudo ovs-vsctl get Open_vSwitch . other_config
$ sudo ovs-vsctl get Open_vSwitch . other_config
{dpdk-init="true", dpdk-lcore-mask="300003", dpdk-socket-mem="3072,1024", pmd-cpu-mask="c0000c"}
以下の点に注意してください。
-
dpdk-lcore-maskは、TripleO Heat テンプレートのOvsDpdkCoreListにマップされます。 -
dpdk-socket-memは、TripleO Heat テンプレートのOvsDpdkSocketMemoryにマップされます。 pmd-cpu-maskは、TripleO Heat テンプレートのOvsPmdCoreListにマップされます。これらの CPU マスクを、TripleO Heat テンプレートおよび実際のシステム値 に戻す 10 進数の値に変換するには、How to convert a hexadecimal CPU mask to a bit mask to a bit mask and identify the masked CPU mask? を参照してください。
2.5.1. CPU の検出 リンクのコピーリンクがクリップボードにコピーされました!
pid 1 の CPU を検出するには、次のコマンドを使用します。これらのコアでは、PMD または Nova vCPU を実行しないでください。
taskset -c -p 1
$ taskset -c -p 1
pid 1's current affinity list: 0,1,20,21
2.5.2. PMD スレッドの検出 リンクのコピーリンクがクリップボードにコピーされました!
PMD スレッドを表示するには、次のコマンドを使用します。出力には、Tripleo パラメーター OvsPmdCoreList の値が反映されている必要があります。Tripleo パラメーター OvsDpdkCoreList または HostIsolatedCoreslist の値と重複してはなりません。
2.5.3. NUMA ノードの検出 リンクのコピーリンクがクリップボードにコピーされました!
最適なパフォーマンスを得るには、物理ネットワークアダプター、PMD スレッド、およびインスタンスの固定 CPU がすべて同じ NUMA ノード上にあることを確認してください。詳細は、CPU および NUMA ノード を参照してください。
以下は、NUMA 割り当てを調べるための簡単な演習です。
コンピュートノード上のインスタンスの vhu ポートを調べます。
sudo virsh domiflist 1
$ sudo virsh domiflist 1 Interface Type Source Model MAC ------------------------------------------------------- vhu24e6c032-db vhostuser - virtio fa:16:3e:e3:c4:c2Copy to Clipboard Copied! Toggle word wrap Toggle overflow そのポートにサービスを提供している PMD スレッドを調べて、NUMA ノードに注意してください。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow インスタンスの物理的に固定された CPU を見つけます。たとえば、このインスタンスのポートにサービスを提供する PMD は CPU 2 にあり、インスタンスは CPU 34 および 6 によって提供されます。
sudo virsh dumpxml 1 | grep cpuset
$ sudo virsh dumpxml 1 | grep cpuset <vcpupin 1 vcpu='0' cpuset='34'/> <emulatorpin cpuset='6'/>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各 NUMA ノードのコアを調べます。インスタンス (34,6) を提供する CPU は同じ NUMA ノード (0) 上にあることに注意してください。
lscpu | grep ^NUMA
$ lscpu | grep ^NUMA NUMA node(s): 2 NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38 NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39Copy to Clipboard Copied! Toggle word wrap Toggle overflow
さらに、OVS DPDK によって管理されていないネットワークアダプターには、それらが属する NUMA ノードを示すエントリーがここにあります。
sudo cat /sys/class/net/<device name>/device/numa_node
$ sudo cat /sys/class/net/<device name>/device/numa_node
または、OVS DPDK によって管理されている場合でも、PCI アドレスを照会することで、ネットワークアダプターの NUMA ノードを確認できます。
sudo lspci -v -s 05:00.1 | grep -i numa
$ sudo lspci -v -s 05:00.1 | grep -i numa
Flags: bus master, fast devsel, latency 0, IRQ 203, NUMA node 0
これらの演習は、PMD、インスタンス、およびネットワークアダプターがすべて NUMA 0 上にあり、パフォーマンスに最適であることを示しています。openvswitch ログ (/var/log/openvswitch にあります) からのクロス NUMA ポーリングの兆候については、次のようなログエントリーを探してください。
dpif_netdev|WARN|There's no available (non-isolated) pmd thread on numa node 0. Queue 0 on port 'dpdk0' will be assigned to the pmd on core 7 (numa node 1). Expect reduced performance.
dpif_netdev|WARN|There's no available (non-isolated) pmd thread on numa node 0. Queue 0 on port 'dpdk0' will be assigned to the pmd on core 7 (numa node 1). Expect reduced performance.
2.5.4. 分離された CPU の検出 リンクのコピーリンクがクリップボードにコピーされました!
次のコマンドを使用して、分離された CPU を表示します。出力は、TripleO パラメーター IsolCpusList の値と同じである必要があります。
cat /etc/tuned/cpu-partitioning-variables.conf | grep -v ^# isolated_cores=2-19,22-39
$ cat /etc/tuned/cpu-partitioning-variables.conf | grep -v ^#
isolated_cores=2-19,22-39
2.5.5. Nova インスタンス専用の CPU の検出 リンクのコピーリンクがクリップボードにコピーされました!
次のコマンドを使用して、Nova インスタンス専用の CPU を表示します。この出力は、ポーリングモードドライバー (PMD) CPU を使用しないパラメーター isolcpus の値と同じである必要があります。
grep ^vcpu_pin_set /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf
$ grep ^vcpu_pin_set /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf
vcpu_pin_set=4-19,24-39
2.5.6. Huge Page 設定の確認 リンクのコピーリンクがクリップボードにコピーされました!
コンピュートノードで Huge Page の設定を確認してください。
Huge Page が設定されていないか、使い果たされている場合は、KernelArgs を参照してください。