13.2. 解決策
このセクションを使用して、エミュレーターのスレッドの固定を調査および設定します。
13.2.1. qemu-kvm エミュレータースレッド リンクのコピーリンクがクリップボードにコピーされました!
エミュレータースレッドは、仮想マシンのハードウェアエミュレーションの割り込み要求およびノンブロッキングプロセスを処理します。vCPU を実行していないスレッドは、qemu-kvm エミュレータースレッドです。以下の例を参照してください。
[root@overcloud-compute-0 ~]# ps -Tp `pgrep -f instance-00000009`
PID SPID TTY TIME CMD
364936 364936 ? 00:00:02 qemu-kvm
364936 364946 ? 00:00:00 qemu-kvm
364936 364952 ? 00:00:52 CPU 0/KVM
364936 364953 ? 00:00:26 CPU 1/KVM
364936 364954 ? 00:00:30 CPU 2/KVM
364936 364956 ? 00:00:00 vnc_worker
Linux CFS (完全に公平なスケジューラー) により、エミュレータースレッドは通常、libvirt のエミュレーターピンセットで定義されている範囲内で、ある pCPU から別の pCPU に定期的に移動します。
NFV コンテキストでは、isolcpus パラメーターを使用するときにエミュレータースレッドを設定すると、問題が発生する可能性があります。これは、このカーネル設定により、これらの CPU での CFS スケジューリングが無効になるためです。isolcpus parameter を使用していない場合、エミュレータースレッドがパケットを処理している CPU に割り込むと、パケット損失が発生する可能性があります。
エミュレータースレッドの例は次のとおりです。
- qemu-kvm スレッド
- vnc_worker スレッド
- vhost-<qemu-kvm PID> カーネルスレッド (virtio-net が使用されている場合 (ハイパーバイザー上のカーネルネットワーク))