Background-Process

在相同的過程中使用 cgroups 和 nice - 順序重要嗎?什麼是正確的語法?

  • September 21, 2020

我在桌面上創建了一個名為background的 CGROUP 。該組的目的是在其 10% 的 CPU 限制內執行我的所有系統管理員腳本。每次重新啟動時都會使用以下 cronjob 創建該組:

@reboot /usr/bin/cgcreate -t jerzy:jerzy -a jerzy:jerzy -g cpu:background && /usr/bin/cgset -r cpu.cfs_period_us=1000000 background && /usr/bin/cgset -r cpu.cfs_quota_us=100000 background

儘管有這個限制,我仍然希望我的 sysadmin 腳本(已經受cgexec限制)永遠不要優先於我的其餘程序。因此我決定使用nice命令,如下例所示:

cgexec -g cpu:background nice -19 prependPollen.py

上述命令中的cgexec是將資源限制為prependPollen.py還是僅限nice

更一般地說:使用cgexec是否僅將資源限制在緊跟在cgexec命令之後的一個命令上?同樣適用於nice嗎?

nice -19 cgexec -g cpu:background prependPollen.py

像上面的命令一樣,交換順序會對 CPU 使用/限制產生任何影響嗎?nicecgexec可以在同一個命令/cronjob 中使用嗎?

PS 我的環境:Bash,Debian 10 LTS。

這兩個命令都是準備命令,執行以下命令,同時保留它們更改的屬性。所以這裡的順序無關緊要,只要改變的屬性沒有任何副作用改變另一個(這對這兩個很好)。

cgexec -> nice -> final executable

會將nice要執行的以下程序移動到相關的cgroupnice並將更改最終執行檔的 niceness(同時保留 cgroup)。

nice -> cgexec -> final executable

將改變後續過程的友好性,cgexec並將cgexec最終的執行檔放在相關的 cgroup 中(同時保持友好性)。

這兩個命令將產生相同的結果。這兩個屬性(cgroupniceness)都會自動傳播到以下程序的所有子程序。因此,產生的任何東西都prependPollen.py將在cpu:background中,並且也具有改變的優點。

可以在此管道中的任何位置插入任何其他類似的命令。例如ionice -c 3 ,可以在第一、第二或第三位置添加以嘗試限制 python 程序相對於其他程序的 I/O 效果(雖然也有cgroups在這方面做得更好,但通常需要cgroups v2 才能工作適當地)。

引用自:https://unix.stackexchange.com/questions/610491