用于查询 Linux 中应用于进程的所有 cgroup 的 API

用于查询 Linux 中应用于进程的所有 cgroup 的 API

我正在开发一些需要知道其自身最大可访问内存的软件。在 Linux 上,这取决于 cgroup。根据我收集的信息,进程可以读取/proc/self/cgroup以确定其自身的当前内存 cgroup 之一。然而,实际上存在一个cgroup层次结构,并且一个进程受到其所有cgroup的限制。如何确定应用于当前进程的所有 cgroup 的最小可用内存?

例如,当使用 Slurm 时,cat /proc/self/cgroup返回:

[...]
5:memory:/slurm/uid_3119/job_13759394/step_batch/task_0
[...]

因此,人们可能会认为这/sys/fs/cgroup/memory/slurm/uid_3119/job_13759394/step_batch/task_0/memory.limit_in_bytes将显示适用的内存限制。然而,在这种情况下/sys/fs/cgroup/memory/slurm/uid_3119/job_13759394/memory.limit_in_bytes是相关的 cgroup,因为它的限制性更强。在这种情况下,可以应用什么工作流程来找到最严格的内存限制?

我注意到似乎systemd有很多与 cgroup 相关的实用程序,但我想避免任何有关系统的外部依赖性或假设,因为我的应用程序需要在任何可能的 Linux 系统上运行。

相关内容