
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
作成したファイルとして解釈され、「ループ」を作成できるためです。
2 番目のコマンドはそれを実行可能にし、3 番目のコマンドは、この新しいファイルを「system」bin フォルダーの前のフォルダーに移動する/usr/bin
ため、元のファイルではなく新しいファイルが実行されます。「$@」部分には、コマンドが呼び出されたすべての引数が含まれているため、実際の VirtualBox コマンドに転送されます。
このスーパーユーザーの質問に対する回答(「はい」)によると子プロセスは親から IO 優先度を継承しますか? 実行中のプロセスの 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 などのアプリケーションを起動したい場合、作業を開始する前にドライブの回転速度を上げる必要があります (これにはしばらく時間がかかる場合があります)。