コンテンツにスキップ

irqbalance - 割り込み分散 チューニング チートシート

irqbalance - 割り込み分散 チューニング チートシート

irqbalance はハードウェア割り込み (IRQ) をCPU コア 全体に分散するデーモン。Linux のデフォルトでは、ビジー NIC またはストレージ コントローラからのほとんどの割り込みは CPU 0 にルーティングされ、そのコアをボトルネック にしてその他がアイドル。irqbalance は割り込みロード を監視し、IRQ 親和性を再バランス してワークをまく。逆に、ハンド ピン留め CPU を持つレイテンシ クリティカル ワークロード の場合、多くの場合、それが分離されたコア 上に割り込みを移動できないようにそれを意図的に無効化される。

インストール

プラットフォームコマンド
Debian/Ubuntusudo apt install irqbalance
Fedora/RHELsudo dnf install irqbalance
Arch Linuxsudo pacman -S irqbalance
サービスsudo systemctl enable --now irqbalance
確認irqbalance --version

最初に割り込み を検査

コマンド表示
cat /proc/interruptsデバイス別 CPU 当たり 割り込み カウント
watch -n1 'cat /proc/interrupts'ライブ 成長 (ホット コア をスポット)
mpstat -I SUM -P ALL 1秒当たり CPU 当たりの割り込み
cat /proc/irq/<N>/smp_affinity1 つの IRQ の親和性 マスク
cat /proc/irq/<N>/smp_affinity_list同じ、CPU リスト として
# 1 つの CPU はすべての NIC 割り込み を吸収しているのか?
watch -n1 "grep -E 'eth0|mlx|ens' /proc/interrupts"

デーモンを実行

コマンド説明
sudo systemctl status irqbalance実行中 かどうかを確認
sudo irqbalance --foregroundフォアグラウンド で実行 (デバッグ)
sudo irqbalance --oneshot1 回バランス した後、終了
sudo irqbalance --debug冗長 な決定

キー オプション / 環境

設定効果
IRQBALANCE_BANNED_CPUS=<mask>これらの CPU に IRQ を割り当てない
--banirq=Nバランシング から特定の IRQ を除外
--policyscript=PATHIRQ 単位のポリシー を決定 するスクリプト
--interval=SECONDS再バランス 間隔
`—hintpolicy=exactsubset
--powerthresh=Nパワー セーブ 統合 しきい値

構成 は通常/etc/default/irqbalanceまたは/etc/sysconfig/irqbalanceに住む。

# 分離 されたコア 8-15 から IRQ を保つ (マスク 8 CPU..15 の場合)
echo 'IRQBALANCE_BANNED_CPUS=0000ff00' | sudo tee -a /etc/default/irqbalance
sudo systemctl restart irqbalance

手動 IRQ 親和性 (デーモン を無効化するとき)

# IRQ 42 を CPU 2 にピン留め (ビットマスク 0x4)
echo 4 | sudo tee /proc/irq/42/smp_affinity

# または CPU リスト で
echo 2 | sudo tee /proc/irq/42/smp_affinity_list
アプローチ使用
irqbalance 実行中一般的なサーバー、変数 ロード
irqbalance 無効化 + 手動 ピン留め低レイテンシ、NUMA ピン留め、RT ワークロード
禁止 CPUハイブリッド:バランス、ただし 分離 されたコア を保護

レイテンシ クリティカル パターン

# 一般的な低レイテンシ セットアップ:バランサー を停止し、NIC IRQ をアプリケーション の NUMA ノード の近く にピン留め
sudo systemctl stop irqbalance
sudo systemctl disable irqbalance
# 同じ NUMA ノード 上のコア に NIC IRQ の smp_affinity を設定

アプリケーション のメモリー と割り込み 処理が同じ NUMA ノード上に存在するようにnumactlと組み合わせ — クロスノード 割り込み 処理は古典的 な隠れ レイテンシ ソース。

変更 を確認

チェックコマンド
割り込み スプレッドmpstat -I SUM -P ALL 1
Softirq ロードtop → CPU 当たり %si
ネットワーク スループットsar -n DEV 1
IRQ 当たり カウントwatch 'cat /proc/interrupts'

成功 は、割り込み カウント が意図された コア 全体に均等に成長するか、まさに選択したコア に集中する場合のよう に見える。

irqbalance vs 関連チューニング

ツールロール
irqbalanceCPU 全体に IRQ を分散
numactlプロセス CPU/メモリ を NUMA ノード にバインド
cpupower周波数/アイドル 状態制御
tuned全体 システム プロファイル (irqbalance を管理できる)
RPS/RFSソフトウェア 側 パケット ステアリング

リソース