Scheduling

漂亮的 renice 和 ionice

  • November 3, 2020

我已經閱讀nice reniceionice控制正在執行的程序的調度優先級。但是,我仍然不明白它們何時以及如何有用。例如做類似的事情:

nice -n 13 pico myfile.txt

關於 pico,它不太可能引起太多關注,因此它不是您通常會使用的那種命令 nice/renice 或 ionice。但是,您的命令將執行 pico niceed to +13。這意味著分配給它的時間將大大減少。例如,從您的 pico 線路開始。通常 pico 執行如下所示:

UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S     ADDR TTY           TIME CMD
501 20118 20117     4006   0  31  0  2435548   1068 -      S     eb577e0 ttys000    0:00.03 -bash
501 20136 20118     4006   0  31  0  2434992    772 -      S+    85eed20 ttys000    0:00.00 pico

其中 NI 是不錯的水平。如果我用你的命令執行 pico,它看起來像這樣:

UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S     ADDR TTY           TIME CMD
501 20118 20117     4006   0  31  0  2435548   1068 -      S     eb577e0 ttys000    0:00.03 -bash
501 20179 20118     4006   0  18 13  2434992    904 -      SN+   85eed20 ttys000    0:00.01 pico

好的,這表明您執行的命令行是有效的,但它實際上是做什麼的?好的,假設您有一個非常繁忙但又不至於如此的系統。全天候都很忙,午夜時分一項重要的維護任務開始了。它是執行腳本以生成一些每日統計資訊的 mysql 命令行。有很多處理,所以它對 CPU 造成了沉重的打擊,使用者對此抱怨。強烈地,就像他們一樣。你能為這個做什麼?這個腳本需要多長時間並不重要,因此您可以在命令前面加上“nice -n 13”,並且下次執行它不會對使用者造成如此糟糕的影響,但需要更長的時間才能完成。MySQL 腳本的所有者不在乎,因為他只想要第二天進入時的統計資訊。大家都開心。

除了這些工具之外,您還可以對系統如何優先考慮分配給任務的 CPU(在 ionice 的情況下可能是 IO)時間進行一些控制。它們只會在系統載入時生效,在此之前,每個人的任務都被分配到他們需要的所有時間。

renice 命令以非常相似的方式工作,但它允許您更改已經執行的程序的優先級。因此,在上述軼事中,您可以使用 renice 更改 mysql 命令的優先級,而無需重新啟動它。以下命令會將名為“mysql”的所有正在執行的任務調整為 +13,這是一個低得多的優先級:

renice -n 13 -p `pidof mysql`

至於 ionice,我無法發表評論,但我猜它可以讓你用 IO 做類似的事情。影響某些任務執行多少 io,例如磁碟讀/寫。如有必要,在限製備份過程中是否有用?

引用自:https://serverfault.com/questions/211839