9.3.2. NUMA vCPU のピニング
vCPU のピニングは、ベアメタルシステムでのタスクのピニングと同様の利点を提供します。vCPU は、ホストのオペレーティングシステムのユーザー空間タスクとして実行されるので、ピニングすることでキャッシュの効率性が向上します。この一例は、すべての vCPU スレッドが同じ物理ソケットで実行されているため、L3 キャッシュドメインを共有している環境です。
注記
Red Hat Enterprise Linux バージョン 7.0 から 7.2 の場合、アクティブな vCPU のみピニングできます。ただし、Red Hat Enterprise Linux 7.3 では、非アクティブな vCPU もピニングできます。
vCPU のピニングと numatune を組み合わせると、NUMA ミスを回避できます。NUMA を使用しない場合のパフォーマンスへの影響は大きく、一般的に、パフォーマンスの 10 % 以上が影響を受けます。vCPU ピニングと numatune は、一緒に設定する必要があります。
仮想マシンがストレージまたはネットワーク I/O タスクを実行している場合、すべての vCPU とメモリーを I/O アダプターに物理的に接続されている同じ物理ソケットにピニングすると便利な場合があります。
注記
lstopo ツールを使用して、NUMA トポロジーを視覚化できます。また、vCPU が同じ物理ソケット上のコアにバインドされていることを確認するのにも役立ちます。lstopo の詳細については、次のナレッジベースのアーティクルを参照してください: https://access.redhat.com/site/solutions/62879。
重要
物理コアよりも多くの vCPU が存在する場合、ピニングにより複雑さが増します。
次の XML 設定の例では、ドメインプロセスが物理 CPU 0 - 7 にピニングされています。vCPU スレッドは独自の cpuset にピニングされています。たとえば、vCPU0 は物理 CPU 0 にピニングされ、vCPU1 は物理 CPU1 にピニングされます。
<vcpu cpuset='0-7'>8</vcpu> <cputune> <vcpupin vcpu='0' cpuset='0'/> <vcpupin vcpu='1' cpuset='1'/> <vcpupin vcpu='2' cpuset='2'/> <vcpupin vcpu='3' cpuset='3'/> <vcpupin vcpu='4' cpuset='4'/> <vcpupin vcpu='5' cpuset='5'/> <vcpupin vcpu='6' cpuset='6'/> <vcpupin vcpu='7' cpuset='7'/> </cputune>
vcpu タグと vcpupin タグの間には直接的な関係があります。vcpupin オプションが指定されていない場合、値は自動的に決定され、親 vcpu タグオプションから継承されます。次の設定は、vcpu 5 の
<vcpupin>
がないことを示しています。したがって、vCPU5 は、親タグ <vcpu>
で指定されているように、物理 CPU 0 - 7 にピニングされます。
<vcpu cpuset='0-7'>8</vcpu> <cputune> <vcpupin vcpu='0' cpuset='0'/> <vcpupin vcpu='1' cpuset='1'/> <vcpupin vcpu='2' cpuset='2'/> <vcpupin vcpu='3' cpuset='3'/> <vcpupin vcpu='4' cpuset='4'/> <vcpupin vcpu='6' cpuset='6'/> <vcpupin vcpu='7' cpuset='7'/> </cputune>
重要
最適で確定的なパフォーマンスを得るには、
<vcpupin>
、<numatune>
、および <emulatorpin>
を一緒に設定する必要があります。<numatune>
タグの詳細については、「ドメインプロセス」 を参照してください。<emulatorpin>
タグの詳細については、「emulatorpin の使用」 を参照してください。