在相同的過程中使用 cgroups 和 nice - 順序重要嗎?什麼是正確的語法?
我在桌面上創建了一個名為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 使用/限制產生任何影響嗎?nice和cgexec可以在同一個命令/cronjob 中使用嗎?
PS 我的環境:Bash,Debian 10 LTS。
這兩個命令都是準備命令,執行以下命令,同時保留它們更改的屬性。所以這裡的順序無關緊要,只要改變的屬性沒有任何副作用改變另一個(這對這兩個很好)。
cgexec -> nice -> final executable
會將
nice
要執行的以下程序移動到相關的cgroup,nice
並將更改最終執行檔的 niceness(同時保留 cgroup)。nice -> cgexec -> final executable
將改變後續過程的友好性,
cgexec
並將cgexec
最終的執行檔放在相關的 cgroup 中(同時保持友好性)。這兩個命令將產生相同的結果。這兩個屬性(cgroup和niceness)都會自動傳播到以下程序的所有子程序。因此,產生的任何東西都
prependPollen.py
將在cpu:background中,並且也具有改變的優點。可以在此管道中的任何位置插入任何其他類似的命令。例如
ionice -c 3
,可以在第一、第二或第三位置添加以嘗試限制 python 程序相對於其他程序的 I/O 效果(雖然也有cgroups在這方面做得更好,但通常需要cgroups v2 才能工作適當地)。