如何自動設定磁碟IO優先權?

如何自動設定磁碟IO優先權?

如果我使用一些 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 之類的應用程式時,它必須先旋轉才能開始工作(這可能需要一段時間)。

相關內容