この質問は以前に尋ねられたことがありますが、世界は、もう一度尋ねられるように十分に変化したと思います。
コア間でメモリを共有するNUMA対応CPUが搭載されている今日のシステムでirqbalanceを使用できますか?
ランニング irqbalance --oneshot --debug
は、最新のVMware ESXi環境の仮想ゲストがコア間でNUMAノードを共有していることを示しています。
# irqbalance --oneshot --debug 3
Package 0: numa_node is 0 cpu mask is 0000000f (load 0)
Cache domain 0: numa_node is 0 cpu mask is 0000000f (load 0)
CPU number 0 numa_node is 0 (load 0)
CPU number 1 numa_node is 0 (load 0)
CPU number 2 numa_node is 0 (load 0)
CPU number 3 numa_node is 0 (load 0)
この場合、irqbalanceは、NUMAシステムで実行されていることを検出して終了します。これは私たちのプロセス監視を混乱させます。
そのようなシステムでは、irqbalanceではなく numad を実行する必要がありますか?
これは、VMware仮想化サーバーにとって主に興味深いものです。
RedHatの技術者からの回答の1つを次に示します。ほとんどのエンタープライズハードウェアはNUMA対応であると私は確信しています。そして、私の知る限り、VMwareはCPU構成が適合する限り、同じNUMAノードにVMを適合させようとします。
経験(特にVMwareに関する)は大歓迎です。
これは、最新のサーバーの真の「理由」です。マルチCPU /マルチコアはNUMAと同じではないことに注意してください。 NUMAを持たないマルチCPU /コアシステムは数多くあります。
以下の説明を読む前に、上記のIRQアフィニティドキュメントと以下のガイドをお読みください。
全部読んだ?すばらしい、あなたは私からこれ以上何も聞く必要はありません! ;-)しかし、あなたがせっかちだった場合に備えて、ここにあなたがそれらを欲する理由があります...
IRQbalanceは、すべてのIRQ要求が単一のCPUでバックアップされないようにします。さまざまなCPUのすべてのプロセスがネットワークまたはストレージのIRQ要求を処理するためにCPU 0で待機しているため、4つ以上のCPUコアを備えた多くのシステムのパフォーマンスが遅いのを見てきました。 CPU 0は非常にビジーに見え、他のすべてのCPUはビジーではありませんが、アプリは非常に遅いです。アプリは、IO CPU 0からのリクエストを待機しているため、低速です。
IRQbalanceは、これをすべてのCPUにまたがるインテリジェントな方法でバランスをとろうとし、可能な場合、IRQ処理を可能な限りプロセスに近づけます。これは、同じコア、同じダイを同じキャッシュを共有するコア、または同じNUMAゾーンのコアである可能性があります。
次の場合を除き、irqbalanceを使用する必要があります。
アプリ/ IRQを特定のコアに手動で固定しているのは、非常に正当な理由(低遅延、リアルタイム要件など)のためです。
仮想ゲスト。ゲストを特定のCPUとIRQ、および専用のネットワーク/ストレージハードウェアに固定しない限り、ベアメタルで得られる利点が見られない可能性が高いため、実際には意味がありません。ただし、KVM/RHEVホストはirqbalanceおよび numad および tuned を使用する必要があります(SHOULD)。
他の非常に重要なチューニングツールは、tunedプロファイルとnumadです。それらについて読んでください!それらを使用してください!
Numadは、プロセスとそのメモリが同じnumaゾーンにあることを確認しようとする点でirqbalanceに似ています。多くのコアを使用することで、レイテンシが大幅に短縮され、負荷がかかった場合でも信頼性の高いパフォーマンスがよりスムーズになります。
スキルがあり、勤勉で、定期的に監視している場合、またはワークロードが非常に予測可能である場合は、プロセス/ IRQを手動でCPUに固定することでパフォーマンスが向上する可能性があります。これらの状況でも、irqbalanceとnumadはマッチングに非常に近くなります。ただし、不確かな場合やワークロードが予測できない場合は、irqbalanceとnumadを使用する必要があります。