Podmanコンテナのcgroupパスを取得するには?

Podmanコンテナのcgroupパスを取得するには?

Podmanコンテナのcgroupルートパスを取得する方法はありますか?

podman inspectcgroupに関する情報を公開していないようです。

私が見つけた「ハッキー」方法は、次のことを行うことです。

# Run the container, writing its container ID to /tmp/cid
podman run --rm -it --cidfile=/tmp/cid busybox

# Search /sys/fs/cgroup for the CID
cid=$(cat /tmp/cid)
find /sys/fs/cgroup | grep "/libpod-$cid/" | grep '/cpu,cpuacct/' | grep '/cpuacct.usage'
# prints something like: /sys/fs/cgroup/cpu,cpuacct/libpod_parent/libpod-abc123.../cpuacct.usage

しかし、私は次の理由でこのソリューションに満足していません。

  • 非効率的な検索が必要です(find
  • 不確実な検索パスが/sys/fs/cgroup正しいことが保証されていますか?
  • cgroup v2を使用している場合、私が探しているファイルのデフォルト名が異なる場合があります(たとえば、cgroup v2のmemory.current代わりに使用できます)。memory.usage_in_bytes

PodmanまたはGo SDKのいずれかを使用してこの情報を取得するより直接的な方法はありますか?

ベストアンサー1

知っておくべきことはコンテナIDだけです。findまたはを使用する必要はありませんgrep。正しい場所にコンテナIDを挿入するだけで、目的の明示的なパスを作成できます。

そのうちのcgroupsv2デフォルトパスはです/sys/fs/cgroup/machine.slice/libpod-<container_id>.scope。このディレクトリ内には次のものがあります。

cgroup...
container...
cpu...
cpuset...
hugetlb...
io...
memory...
pids...

そしてcgroupvs1パスはです/sys/fs/cgroup/<cgroup>/machine.slice/libpod-<container_id>.scope。したがって、cgroupが必要な場合は、cpu,cpuacct次のものが必要です。

$ ls /sys/fs/cgroup/cpu,cpuacct/machine.slice/libpod-756bf46cd9ff1f509f65d063b69e42a5a560b9d29608ec48ec7466880b26d65e.scope
cgroup.clone_children
cgroup.procs
cpu.cfs_period_us
cpu.cfs_quota_us
cpu.rt_period_us
cpu.rt_runtime_us
cpu.shares
cpu.stat
cpuacct.stat
cpuacct.usage
cpuacct.usage_all
cpuacct.usage_percpu
cpuacct.usage_percpu_sys
cpuacct.usage_percpu_user
cpuacct.usage_sys
cpuacct.usage_user
notify_on_release
tasks

おすすめ記事