Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

6.3.7. AMD64 および Intel 64 での割り込み親和性の設定

割り込み要求には関連づけられた親和性プロパティー smp_affinity があり、割り込み要求を処理するプロセッサーはこのプロパティーによって指定されます。アプリケーションのパフォーマンスを向上させるには、割り込みの親和性とプロセスの親和性を同じプロセッサーまたは同じコアにあるプロセッサーに割り当てます。これにより、指定された割り込みとアプリケーションスレッドがキャッシュラインを共有できるようになります。
重要
本セクションでは、AMD64 および Intel 64 のアーキテクチャーのみを説明します。割り込み親和性の設定は、他のアーキテクチャーとは大きく異なります。

手順6.1 割り込みの自動分散

  • BIOS が NUMA トポロジーをエクスポートする場合、irqbalance サービスは、サービスを要求するハードウェアに対してローカルとなるノードの割り込み要求を自動的に処理できます。
    irqbalance の設定に関する詳細は、「irqbalance」 を参照してください。

手順6.2 割り込みの手動分散

  1. 設定する割り込み要求に対応するデバイスを確認します。
    Red Hat Enterprise Linux 7.5 より、システムが最適な割り込み親和性を特定のデバイスおよびそれらのドライバーに自動的に設定するようになりました。親和性を手動で設定する必要はありません。これは以下のデバイスを対象とします。
    • be2iscsi ドライバーを使用したデバイス。
    • NVMe PCI デバイス。
  2. プラットフォームのハードウェア仕様を見つけます。システムのチップセットが割り込みの分散に対応しているかどうかを確認します。
    • その場合には、以下の手順に従って割り込み配信を設定できます。
      また、チップセットが割り込みの分散に使用するアルゴリズムを確認してください。BIOS によっては割り込み配信を設定するオプションがあります。
    • そうでない場合、チップセットは常にすべての割り込みを 1 つの静的な CPU にルーティングします。使用される CPU を設定することはできません。
  3. システムで、どの APIC (Advanced thumbnailer Interrupt Controller) モードが使用されているかを確認します。
    物理以外のフラットモード (flat) のみが、複数の CPU への割り込みの分散をサポートします。このモードは、CPU が最大 8 のシステムでのみ利用できます。
    $ journalctl --dmesg | grep APIC
    コマンド出力で、以下を行います。
    • システムが flat 以外のモードを使用している場合は、「APIC ルーティングの物理フラットへの設定」と同様の行が表示されます。
    • このようなメッセージが表示されない場合は、システムが フラット モードを使用します。
    システムが x2apic モードを使用する場合は、ブートローダー設定のカーネルコマンドラインに nox2apic オプションを追加してこれを無効にできます。
  4. smp_affinity マスクを計算します。
    smp_affinity の値は、システム内のすべてのプロセッサーを表す 16 進数のビットマスクとして保存されます。各ビットは異なる CPU を設定します。最も大きなビットは CPU 0 です。
    マスクのデフォルト値は f で、割り込み要求がシステムのどのプロセッサーでも処理可能であることを意味します。この値を 1 に設定すると割り込み要求を処理できるのはプロセッサー 0 のみになります。

    手順6.3 マスクの計算

    1. バイナリーでは、割り込みを処理する CPU に 1 の値を使用します。
      たとえば、CPU 0 および CPU 7 で割り込みを処理するには、0000000010000001 をバイナリーコードとして使用します。

      表6.1 CPU のバイナリービット

      CPU1514131211109876543210
      バイナリー0000000010000001
    2. バイナリーコードを 16 進数に変換します。
      たとえば、Python を使用してバイナリーコードを変換するには、次のコマンドを実行します。
      >>> hex(int('0000000010000001', 2))
      
      '0x81'
      
    プロセッサーが 32 個以上搭載されているシステムでは 32 ビットグループそれぞれに smp_affinity 値を区切って設定する必要があります。たとえば、64 プロセッサーシステムの最初の 32 プロセッサーのみが割り込み要求を処理できるようにするには、0xffffffff,00000000 を使用します。
  5. smp_affinity マスクを設定します。
    特定の割り込み要求の割り込み親和性の値は該当の /proc/irq/irq_number/smp_affinity ファイルに格納されます。
    計算されたマスクを関連ファイルに書き込みます。
    # echo mask > /proc/irq/irq_number/smp_affinity

関連情報

  • 割り込みステアリングに対応するシステムでは、割り込み要求の smp_affinity プロパティーを変更するとハードウェアが設定され、カーネルを介入することなくハードウェアレベルで特定のプロセッサーに割り込みを処理させる決定が行われるようになります。
    割り込みステーリングの詳細は、9章ネットワーク を参照してください。