Linux進程按用戶調度?

Linux進程按用戶調度?

Linux 似乎獨立於進程的使用者來調度進程執行。因此,如果一個使用者運行 100 個進程,另一個用戶運行 1 個進程,平均而言,第一個用戶將獲得比第二個用戶多 100 倍的 CPU 時間。

是否有可能依使用者平衡 CPU 時間,也就是說,在本例中,兩位使用者都獲得 50% 的 CPU 時間?

答案1

這是Linux,當然預設設定是相對基本的,但是有許多相互競爭的工具可以選擇來更改這些設定。但並非所有發行版都提供所有這些功能,因此使用哪一個並不明顯。

在 cgroups 系統上,CPU 資源支援加權分配模型,其中每個群組都根據權重按比例分配可用資源的一部分。

在 systemd 系統上,切片概念直接對應到使用 cgroup。讀man systemd.resource-control並考慮啟用DefaultCPUAccounting=.對每個相關單元套用相同的 CPU 比率。例如,要對每個互動式使用者執行此操作,請將其放入類似的內容中 /etc/systemd/system/user-.slice.d/resource.conf

[Unit]
Description:Default CPU ratio
Documentation:man:systemd.resource-control

[Slice]
CPUWeight=100

數字的精確值並不重要,只要相關的每個單元得到正確的比例即可。此外,他們並不是劃分整個系統CPU,而是分配給父user.slice的CPU。如果改為調整服務單元,則這些單元將不在 system.slice 之外。

在使用 pam_limit 的系統上,可以對登入使用者設定 POSIX 資源限制。請參閱man limits.conf,設定檔可能是像/etc/security/limits.d/resource.conf.一個實際的做法可能是設定nproc使用者獲得的最大任務數。超過這個限度,事情就無法分岔。或者,cpu這是一個誘人的限制,但是超過硬限制可能會開始終止進程,這不是一個很好的用戶體驗。

而對於兒童遊戲紅燈綠燈任務版來說,有CPU限制。這會發送 SIGSTOP 和 SIGCONT 訊號來管理 CPU 使用,很簡單。值得注意的是,它有點臨時性,因為沒有配置文件,需要呼叫它來啟動進程,或給定 PID。

答案2

您可以使用 cgroup 並根據您的要求相應地分配應用程序,一種參考是cgroups-v2

相關內容