Performance

什麼是最好的 Unix 命令?

  • November 9, 2019

對於快速基準測試,如何將 nice 和 ionice 結合起來發揮最大效果,即命令使用盡可能少的資源(完全不空閒)?

(我認為它類似於`nice -n 19 ionice -c 2$$ command $$,但不確定 ionice 的“-n”(classdata 參數),手冊頁對其相關性含糊其辭。)

您想要的完整命令是:

chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]

開頭的chrt命令會切換到批處理調度類,相當於nice值加0.5。ionice 的 -n 選項是 realtime ( -c 1) 和 best-effort ( -c 2) 選項的簡單優先級,較低的值是較高的優先級,就像 nice 值一樣(但在 0-7 範圍內)。但是,ionice 命令並不是絕對必要的,因為 I/O 調度類和優先級預設情況下是從 CPU 調度參數派生的,並且nice -n 19暗示ionice -c 2 -n 7.

但是,您可以通過將 CPU 和 I/O 調度類都設置為空閒來獲得絕對最低的資源使用量。在這兩種情況下,“空閒”調度程序實際上並不是空閒調度程序,您仍然可以使用資源,只是一切都會有更高的優先級。

對於 CPU 調度類,這也使用chrt命令,儘管不需要nice(優先級必須0在空閒​​調度類中設置為),如下所示:

chrt -i 0 {command or PID}

Linux 上的nice命令鏡像 SVR4 版本,這意味著它不能更改調度類,只能更改不錯的值(在 Linux 上的行為也與經典 UNIX 不同,但這有點 OT)。由於最初的替代調度類是 POSIX.1E realtime SCHED_RRSCHED_FIFO因此設置調度類的命令最終被呼叫chrt。該-i選項指定使用SCHED_IDLE調度類

對於 I/O 調度類,您使用ionice. 確切的命令如下所示:

ionice -c 3 {command or PID}

-c選項指定要使用的調度類,3 是空閒類的編號。請注意,根據正在使用的塊 I/O 調度程序,這實際上可能不會影響任何事情。特別是,noopI/O 調度器根本不支持優先級或調度類,而且我很確定deadline調度器(包括傳統調度器和 blk-mq 調度器)也不支持。

如果您想以程式方式執行此操作,無論是針對您自己的程序,還是針對其他程序進行調整,請查看sched_setschedulerioprio_set系統呼叫的手冊頁(儘管如果您也想要更多背景知識,兩者都值得閱讀)。

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