我一直试图了解Linux内核中的完全公平调度程序是如何控制CPU带宽的。
经过多次阅读,我仍然无法理解CFS如何允许每个CFS组定义自己的CFS周期,以及它如何与kernel.sched_cfs_bandwidth_slice_us sysctl设置相关联。
示例A:在一台CPU机器上,定义了两个具有不同CFS周期的cgroup。每个cgroup的配额占CPU时间的50%,总计100%。
cgroup-A: cpu.cfs_period_us=100ms
cpu.cfs_quota_us=50ms
cgroup-B: cpu.cfs_period_us=1000ms
cpu.cfs_quota_us=500ms如果每个cgroup都有一个进程正在运行,那么在CFS期间(假设两个进程都需要CPU时间),这些进程是如何调度的?
例子B:当cgroup有一个比实际能够完成的更高的配额时,会发生什么?cgroup-B设置90%的CPU时间,cgroup-A继续将配额设置为CPU时间的50%。
cgroup-A: cpu.cfs_period_us=100ms
cpu.cfs_quota_us=50ms
cgroup-B: cpu.cfs_period_us=1000ms
cpu.cfs_quota_us=900ms在这种情况下,当配额超额认购时,CFS将如何安排进程?
发布于 2020-01-21 10:40:50
如果每个cgroup都有一个进程正在运行,那么在CFS期间(假设两个进程都需要CPU时间),这些进程是如何调度的?
您所配置的内容意味着cpu核心/HT的50%,并不意味着整个系统的50%。
在这种情况下,当配额超额认购时,CFS将如何安排进程?
与上面一样,没有任何超额订阅,这只是意味着这两个进程可以分别使用0.5CPU和0.9CPU时间。要理解,请考虑如果您的系统中有20个cpu核心/HT。
https://unix.stackexchange.com/questions/505278
复制相似问题