
如果我使用一些 IO 密集型應用程式(例如 Virtualbox、Steam 資料驗證甚至dd
),我的系統幾乎沒有回應。儘管所有這些都以正常優先級啟動,但它們使桌面非常緩慢並延遲了其他應用程式的啟動。
我知道我可以使用諸如ionice
將優先權更改為空閒之類的方法,但是在 Virtualbox 生成許多進程的情況下,這會變得很困難。
我可以向系統提供某種類型的提示,以便在啟動某些特定應用程式時以最低 IO 優先權啟動它們嗎?
答案1
注意:此解決方案僅適用於 cfq 調度程序,如所解釋的這裡。您應該透過發出來檢查使用的是哪一個
cat /sys/block/sda/queue/scheduler
和改變如果有必要的話。
如果我理解正確的話,您希望ionice
每次啟動命令時應用一些設定。你可以這樣做:
echo 'ionice -c 3 /usr/bin/VirtualBox "$@"' > VirtualBox
chmod a+x VirtualBox
sudo mv VirtualBox /usr/local/bin/
第一個命令建立一個文件VirtualBox
,其中包含單引號文字作為其內容。這應該具有程式的完整路徑,因為如果僅指定VirtualBox
它可以將其解釋為我們剛剛建立的檔案並建立一個「循環」。
第二個命令使其可執行,第三個命令將此新檔案移至「system」bin 資料夾前面的資料夾中/usr/bin
,因此我們的新檔案而不是原始檔案被執行。 「$@」部分包含呼叫指令時所使用的所有參數,因此它們會被轉送到真正的 VirtualBox 指令。
根據此超級用戶問題的回答(“是”)子行程是否從父行程繼承 ionice 優先權?如何檢查正在運行的進程的 IO 優先權?ionice
,對於父進程來說應該足夠了,如下所示:
ionice -c 3 VirtualBox
從ionice
手冊頁,以下 I/O 調度類別值可用:
- 0 代表沒有
- 1 實時
- 2 盡力而為
- 3 表示空閒(在上面的範例中使用)
可以使用數字或類別名稱。
此外,-n level
此選項適用於即時和盡力而為的類別,其中 0-7 為有效數據(優先級)。
答案2
您可以使用「renice」指令來決定進程的優先順序:
renice -<priority> <application's pid>
也可能是您的驅動器旋轉速度太慢,因此當您想要啟動 Virtualbox 之類的應用程式時,它必須先旋轉才能開始工作(這可能需要一段時間)。