PSI(Pressure Stall Information)

CPU・メモリ・IOという主要リソースにかかる負荷(競合)を、タスクが実行を待たされている時間の割合として定量化するLinuxカーネルの機能。負荷が実際に問題化する前の「兆候」の段階で検出できるのが特徴。2018年、Facebook(現Meta)のJohannes Weinerが自社のフリート管理上の課題を解決するために開発し、Linux 4.20でマージされた。

何を測るか

PSIが計測するのは「タスクがリソース不足で実行をストール(停止・遅延)している時間の割合」。CPU使用率のような「利用量」ではなく「不足による待たされ具合」を見る点が従来のリソースメトリクスと異なる。

some / full の違い

各リソースについて2種類の指標がある。

  • some — 少なくとも1つのタスクがそのリソース待ちでストールしている時間の割合。この状態でもCPUは他の生産的な処理を進めている可能性がある。
  • full — アイドルでない全てのタスクが同時にストールしている時間の割合。CPUサイクルが実質的に無駄になっている状態で、スラッシングに近い深刻な状況を示す。

出力フォーマット

/proc/pressure/{cpu,memory,io} に以下の形式で出力される。

some avg10=0.00 avg60=0.00 avg300=0.00 total=0
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
  • avg10/avg60/avg300 — 直近10秒・60秒・300秒の移動平均ウィンドウにおけるストール時間の割合(%)。
  • total — 累積ストール時間(マイクロ秒単位)。短期的なレイテンシスパイクの検出に使う。

なおcpuファイルにはfull行がない(単一CPUコア上で全タスクが同時にCPU待ちになることは構造上あり得ないため)。

トリガー(poll監視)

/proc/pressure/配下のファイルに対して、しきい値を書き込んだ上でpoll()/select()することで、しきい値超過時にイベント通知を受け取れる。トリガーの書式は<some|full> <ウィンドウ内の累積ストール時間(us)> <ウィンドウ幅(us)>(例: 500ms窓内で100msストールしたら通知)。トリガーごとに専用のファイルディスクリプタが必要。

cgroups(control groups)との連携

CONFIG_CGROUPS=yかつcgroup v2がマウントされている環境では、システム全体だけでなく各cgroupサブディレクトリにもcpu.pressure/memory.pressure/io.pressureが自動生成され、同じ形式でコンテナ・サービス単位の負荷を監視できる。これによりコンテナオーケストレーション基盤側でリソース逼迫を検知し、ロードシェディングや低優先度ジョブの退避、OOM Killerによる強制終了より早い段階での対処(oomdなど)が可能になる。

出典

#linux #kernel #cgroups #performance

作成日時: 2026-08-16 10:27 / 更新日時: 2026-08-16 10:27