1.8. RHEL for Real Time のコンテナー調整

主要な RHEL カーネルでは、リアルタイムグループスケジューリング機能 CONFIG_RT_GROUP_SCHED がデフォルトで有効になっています。ただし、リアルタイムカーネルの場合、この機能は無効になります。

CONFIG_RT_GROUP_SCHED 機能は、kernel-rt パッケージで使用される PREEMPT_RT パッチセットとは独立して開発され、メインの RHEL カーネル上のリアルタイムプロセスで動作することを目的としています。CONFIG_RT_GROUP_SCHED 機能は、レイテンシーのスパイクを引き起こすことが知られているため、PREEMPT_RT が有効なカーネルでは無効化されています。したがって、メインの RHEL カーネルで実行しているコンテナーでワークロードをテストする場合は、コンテナー内で SCHED_FIFO または SCHED_RR タスクを実行できるように、一部のリアルタイム帯域幅をコンテナーに割り当てる必要があります。

手順

  1. podman の --cpu-rt-runtime コマンドラインオプションを使用する前に、以下のグローバル設定を行います。

    # echo 950000 > /sys/fs/cgroup/cpu,cpuacct/machine.slice/cpu.rt_runtime_us

  2. CPU 分離の場合は、既存の推奨事項に従って RT ワークロード用にコアセットを確保してください。
  3. 分離した CPU コアのリストを使用して podman run --cpuset-cpus を実行します。
  4. 使用する NUMA (Non-Uniform Memory Access) メモリーノードを指定します。

    *podman run --cpuset-mems=number-of-memory-nodes

    これにより、NUMA ノード間のメモリーアクセスが回避されます。

  5. コンテナーで実行されているリアルタイムのワークロードに必要な最小量のメモリーがコンテナーの開始時に使用可能であることを確認するには、*podman run --memory-reservation=limit コマンドを使用します。

関連情報

  • podman-run(1) の man ページ