ディスク 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作成したファイルとして解釈され、「ループ」を作成できるためです。

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 などのアプリケーションを起動したい場合、作業を開始する前にドライブの回転速度を上げる必要があります (これにはしばらく時間がかかる場合があります)。

関連情報