什麼是最好的 Unix 命令?
對於快速基準測試,如何將 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 realtimeSCHED_RR
,SCHED_FIFO
因此設置調度類的命令最終被呼叫chrt
。該-i
選項指定使用SCHED_IDLE
調度類對於 I/O 調度類,您使用
ionice
. 確切的命令如下所示:ionice -c 3 {command or PID}
該
-c
選項指定要使用的調度類,3 是空閒類的編號。請注意,根據正在使用的塊 I/O 調度程序,這實際上可能不會影響任何事情。特別是,noop
I/O 調度器根本不支持優先級或調度類,而且我很確定deadline
調度器(包括傳統調度器和 blk-mq 調度器)也不支持。如果您想以程式方式執行此操作,無論是針對您自己的程序,還是針對其他程序進行調整,請查看
sched_setscheduler
和ioprio_set
系統呼叫的手冊頁(儘管如果您也想要更多背景知識,兩者都值得閱讀)。