第23章 tuned-profiles-real-time を使用した CPU の分離

アプリケーションスレッドの実行時間を最大化するために、CPU を分離できます。そのため、無関係なタスクを可能な限り多く CPU から削除します。通常、CPU の分離には、以下の操作が必要です。

  • ユーザー空間のスレッドをすべて削除する。
  • バインドされていないカーネルスレッドを削除します。カーネル関連のバインドされたスレッドは特定の CPU にリンクされており、移動できません)。
  • システム内の各 Interrupt Request (IRQ) 番号が N/proc/irq/N/smp_affinity プロパティーを変更して割り込みを削除する。

package`tuned-profiles-realtime` パッケージの isolated_cores=cpulist 設定オプションを使用することで、CPU を分離する操作を自動化できます。

前提条件

  • 管理者権限がある。

23.1. 分離する CPU の選択

分離する CPU を選択する際は、システムの CPU トポロジーを慎重に考慮する必要があります。ユースケースごとに異なる設定が必要です。

  • スレッドがキャッシュを共有することによって相互に通信する必要があるマルチスレッドアプリケーションがある場合は、それらを同じ NUMA ノードまたは物理ソケットに保持する必要があります。
  • 複数の無関係なリアルタイムアプリケーションを実行する場合は、CPU を NUMA ノードまたはソケットで分離することが適切な場合があります。

hwloc パッケージは、lstopo-no-graphics および numactl などの CPU に関する情報を取得する際に便利なユーティリティーを提供します。

前提条件

  • hwloc パッケージがインストールされます。

手順

  1. 物理パッケージで利用可能な CPU のレイアウトを表示します。

    # lstopo-no-graphics --no-io --no-legend --of txt

    図23.1 lstopo-no-graphics を使用した CPU のレイアウトの表示

    lstopo、グラフィックス出力なし

    このコマンドは、使用可能なコア数とソケット数、および NUMA ノードの論理距離を示すため、マルチスレッドアプリケーションに役立ちます。

    また、hwloc-gui パッケージには、グラフィカル出力を生成する lstopo ユーティリティーが含まれます。

  2. ノード間の距離など、CPU の詳細を表示します。

    # numactl --hardware
    available: 2 nodes (0-1)
    node 0 cpus: 0 1 2 3
    node 0 size: 16159 MB
    node 0 free: 6323 MB
    node 1 cpus: 4 5 6 7
    node 1 size: 16384 MB
    node 1 free: 10289 MB
    node distances:
    node   0   1
      0:  10  21
      1:  21  10

関連情報

  • hwloc(7) の man ページ