目次
はじめに
在前回の記事 では、PSI (Pressure Stall Information) とシステムのPSI情報を監視する方法について説明しました。本記事では、個別のコンテナのPSI情報を監視する方法について詳しく解説します。
PSI と cgroupv2
cgroup2ファイルシステムがマウントされているシステムでは、各cgroupの圧力遅延情報を追跡できます。cgroupfsのマウントポイント内にある各cgroupコントローラーのサブディレクトリには、cpu.pressure、memory.pressure、およびio.pressureファイルが含まれています。
以下のコマンドを実行することで、特定のcgroupのPSIを照会できます。この例では、cg1という名前のcgroupのcpu.pressureを照会しています。
cat /sys/fs/cgroup/cg1/cpu.pressure
PSI と runc
runcは、間もなくリリースされるバージョン1.2.0で、コンテナcgroupの圧力遅延情報の取得をサポートする予定です。以下のコマンドを使用して、その情報を取得できます。
runc --root <container_root> events --stats <container_id>
ここで、container_rootはコンテナ情報が格納されているディレクトリの場所です。例えば、Dockerでは以下のようになる可能性があります。 /var/run/docker/runtime-runc/moby/また、containerdでは以下のようになる可能性があります。 /var/run/containerd/runc など。
実行後、出力は以下のJSON形式で表示されます。
{
"type": "stats",
"id": "9eef3a09b21e11a6c54823ecdbe7b71a204d439acfeb7392a97e60a4baf64a74",
"data": {
"cpu": {
"usage": {
...
},
"throttling": {},
"psi": {
"some": {
"avg10": 0,
"avg60": 0,
"avg300": 0,
"total": 201
},
"full": {
"avg10": 0,
"avg60": 0,
"avg300": 0,
"total": 201
}
}
},
"cpuset": {
...
},
"memory": {
"usage": {
...
},
"swap": {
...
},
"kernel": {
...
},
"kernelTCP": {
...
},
"raw": {
...
},
"psi": {
"some": {
"avg10": 0,
"avg60": 0,
"avg300": 0,
"total": 0
},
"full": {
"avg10": 0,
"avg60": 0,
"avg300": 0,
"total": 0
}
}
},
"pids": {
...
},
"blkio": {
"psi": {
"some": {
"avg10": 0,
"avg60": 0,
"avg300": 0,
"total": 0
},
"full": {
"avg10": 0,
"avg60": 0,
"avg300": 0,
"total": 0
}
}
},
"hugetlb": {},
"intel_rdt": {},
"network_interfaces": null
}
}
その中のcpu、memory、blkioに含まれるpsiが、それぞれの対応するPSIです。
Prometheus のサポート
現在、cAdvisorはサポートを提供するためにrunc 1.2.0正式版のリリースを待っています。詳細については、以下を参照してください。このPRサポートが完了すれば、cAdvisorとPrometheusを組み合わせてPSIを読み取ることができるようになります。
また、現在市場にはCloudflareが開発した以下のような他のツールも存在します。 psi_exporter Mosquito と共同制作 cgroups-exporter。
まとめ
コンテナの PSI 情報を監視することは、コンテナ化された環境におけるリソース管理を理解し、最適化する上で不可欠です。runc や cAdvisor といったツールのサポートにより、これらの情報をより正確に取得できるようになり、リソース配分をより効果的に管理・調整し、システムの効率的な運用を確保できるようになりました。

