让我们说,应用程序A产生了20个进程。有一段时间,A非常繁忙,20个进程处于可运行状态。那么cpu负载会很高。其他应用程序的响应时间将受到20个可运行进程的影响。
如果有办法限制嘈杂社区的可运行进程数量,它将减轻性能损害。例如,只有5个进程处于可运行状态,其他15个进程处于可中断睡眠状态。 cgroups CPU共享或CFS配额对此问题几乎没有帮助。因为cgroups不会阻止在runqueue中放入20个进程。
答案 0 :(得分:0)
要对嘈杂的邻居施加硬限制,您可以使用:
天花板强制执行可调参数
cpu.cfs_period_us
指定应该如何定期重新分配cgroup对CPU资源的访问权限的时间段(以微秒为单位,在此表示为“us”)。如果cgroup中的任务应该能够每1秒访问单个CPU 0.2秒,请将cpu.cfs_quota_us设置为200000,将cpu.cfs_period_us设置为1000000.cpu.cfs_quota_us参数的上限为1秒,较低限制是1000微秒。
cpu.cfs_quota_us
指定cgroup中的所有任务可以在一个周期内运行的总时间(以μs表示,此处表示为“us”)(由cpu.cfs_period_us定义)。一旦cgroup中的任务耗尽配额指定的所有时间,它们将在该时间段指定的剩余时间内受到限制,并且不允许在下一个时间段之前运行。如果cgroup中的任务应该能够每1秒访问单个CPU 0.2秒,请将cpu.cfs_quota_us设置为200000,将cpu.cfs_period_us设置为1000000.请注意,quota和period参数基于CPU运行。例如,要允许进程充分利用两个CPU,请将cpu.cfs_quota_us设置为200000,将cpu.cfs_period_us设置为100000。 将cpu.cfs_quota_us中的值设置为-1表示cgroup不遵守任何CPU时间限制。这也是每个cgroup的默认值(根cgroup除外)。
仅限制其使用量,例如,1000us的配额为5000us。 这将限制其最大使用量为5个CPU,而无需确切地指定哪些CPU。