是否可以以与内存限制类似的方式管理对 CPU 内核的访问?
特别是,我需要能够动态创建和销毁 cgroup,将一组特定的进程限制为所需的 CPU 核心数量。
我无法使用 CPU 集,因为这需要在多插槽(最多小型 NUMA)机器上工作,如果我将进程硬固定到核心,我很快就会因核心碎片而遇到巨大的性能问题(进程范围从几分钟到几个月不等)在运行时)。
第二个复杂之处是,这需要与 cgroup 之外的进程很好地配合。
举个例子,我可能会遇到以下情况:
1 process limited to 2 cores and 4GB RAM
2 processes unlimited, but should have guaranteed access to the remainder of the machine
答案1
这两个选项可用于限制 cgroup 可用的 CPU 核心数量:
cpu.cfs_period_us
cpu.cfs_quota_us
cfs_period_us
定义了需要执行此操作的频率,定义了cgroup 在每个时间段内应接收cfs_quota_us
多少数量。us
因此,如果您指定为 N 倍,cgroupcfs_quota_us
的数量将接收 N 个核心。cfs_period_us