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

관련 정보