2017-04-24 154 views
1

我有一個腳本,它使用ulimit -t 5將程序限制爲5秒的CPU時間。cgroups限制總CPU使用率

該程序現在產生孩子,所以我想使用cgroups,所以我可以限制進程使用的CPU,它是兒童。但是,我無法找到一種方法來爲cgroup的CPU使用率設置硬性上限。

+0

我有同樣的問題,但接受的答案是不適合我。我試着想出一個替代方案:https://stackoverflow.com/questions/45555186 – Flogo

回答

2

Cgroups不會爲你終止進程,但它會限制每個特定週期的運行時間。 對於cpu.cfs_period_us,您可以使用很長的時間,並在該時間段之後檢查cgroup任務列表。如果任務仍在運行,然後使用手動殺了他們:

kill -9 $(cat /sys/fs/cgroup/.../tasks)

cpu.cfs_period_us

規定了如何在微秒一段時間(μs,這裏表示爲「我們」)應定期重新分配cgroup對CPU資源的訪問權限。如果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

指定的時間以微秒的總量(微秒,此處表示爲「US」),用於其在cgroup中的所有任務可以在一個週期內運行(由cpu.cfs_period_us定義)。只要cgroup中的任務耗盡配額指定的所有時間,它們就會在該時間段指定的剩餘時間內被遏制,並且不允許在下一時間段運行。如果cgroup中的任務應該能夠每1秒鐘訪問單個CPU 0.2秒,請將cpu.cfs_quota_us設置爲200000,將cpu.cfs_period_us設置爲1000000.請注意,配額和週期參數以CPU爲基礎運行。例如,要允許進程充分利用兩個CPU,請將cpu.cfs_quota_us設置爲200000,將cpu.cfs_period_us設置爲100000. 將cpu.cfs_quota_us中的值設置爲-1表示cgroup不遵守任何CPU時間限制。這也是每個cgroup(根cgroup除外)的默認值。