Linux
 Computer >> コンピューター >  >> システム >> Linux

LinuxでI/Oプロセスの優先度を管理する方法

LinuxでI/Oプロセスの優先度を管理する方法

数十ギガバイトまたは数百ギガバイトのデータをコピーまたは移動したことがありますか?そうした場合、その間、システムの応答性が大幅に低下することに確かに気づきました。 Linuxでは、ioniceを使用してこれを回避できます。 コマンド。

I / O優先度とは何ですか?

I/Oは入出力の略です。 I / Oデバイスにはさまざまな種類がありますが、この場合はストレージデバイスに関するものです。

このようなデバイスに対してデータの読み取りまたは書き込みを行う各プロセスには、スケジューリングクラスと優先度番号(または「適切な」値)が割り当てられます。これは、Linuxのext4などのファイルシステムに適用されます。 ZFSなどの他のファイルシステムは、ディスク上で読み取り/書き込み操作をスケジュールするためにわずかに異なる方法を実装する場合があります。また、これが機能するには、CFQスケジューラーがアクティブである必要があります。で確認できます

cat /sys/block/*/queue/scheduler

「適切な」値が高いプロセスは、優先度が低くなります。この背後にある論理は、数値が大きいほど、プロセスが他のプロセスにとって「良い」ものになるということです。

I / O優先度はどのように機能しますか?

ストレージデバイスには、明らかに1秒あたりに実行できるI / O操作(IOPS)の数が限られています。したがって、2つのプロセスが同時に読み取り/書き込みを行う場合、それぞれがIOPSのシェアを取得します。同じ優先度の場合、それぞれ約50%のIOPSが得られます。

LinuxでI/Oプロセスの優先度を管理する方法

しかし、IOPSは抽象的で複雑に見える場合があります。簡単にするために、最終結果である読み取り/書き込み速度について考えることができます。ディスクが最大100MB/秒で書き込み可能であると想定します。プロセスAは書き込み操作を開始します。 100MB/秒でディスクに書き込みます。プロセスBがやって来て、同じディスクに書き込みたいと考えています。約50MB/秒で書き込み、プロセスAの書き込み速度を同じ値の50MB/秒にします。ここで、プロセスBに高いI / Oナイス値を割り当てると、プロセスAは20MB /秒で書き込み、プロセスAは80MB/秒で書き込みます。プロセスAが完了すると、プロセスBは100MB/秒で書き込みを開始します。

この例は、一部の人を混乱させる可能性のあることを理解するのに役立ちます。プロセスの優先度が非常に低い(nice値が高い)場合、それは常に書き込みが遅いという意味ではありません。ディスクを使用する唯一のプロセスである場合、最大速度で読み取り/書き込みを行います。ただし、他のプロセスがディスクを必要とする場合、一時的に邪魔にならず、より多くのディスク帯域幅を使用できるようになります。完了までに数時間かかるコピー/書き込み操作の場合、その間にコンピューターを使用する場合は、優先度を低くすることをお勧めします。

ioniceコマンドの使用方法

コマンドの一般的な構文は次のとおりです。

ionice -c scheduling_class -n priority_nice_value command

ioniceスケジューリングクラス

アイドル (クラス3):このクラスのプロセスは、他のプログラムがディスクアクセスを必要としない場合にのみ読み取り/書き込みを行います。これは、競合がない場合、プロセスがフルスピードで読み取り/書き込みを行うことを意味します。別のプログラムがディスク時間を必要とする場合、アイドルクラスのプロセスは、残っているリソースでのみ読み取り/書き込みを行います。 100MB / sから、一時的に5MB / sで書き込み、他のプログラムがディスクへのアクセスを完了すると100MB/sに戻る場合があります。これは、システムの速度を低下させたくない長時間のジョブに最適なクラスです。このクラスに優先順位を指定する必要はありません。

コマンドの例:

ionice -c 3 cp /home/user/largefile /Backups

ベストエフォート (クラス2):0から7までの優先度/適切な値を取ります。数値が小さいほど優先度が高いことを意味します。このクラスは、2つ以上のプロセスのディスク時間を微調整する場合に使用します。

たとえば、バックアップをより速く終了し、適切な値0を割り当てたいとします。また、6つの映画を別のディスクに移動していますが、急いでいないため、これに適切な値7を割り当てます。

コマンドの例:

ionice -c 2 -n 0 backup_command

LinuxでI/Oプロセスの優先度を管理する方法

リアルタイム (クラス1):他のプログラムによって中断されることなく、プロセスができるだけ早く書き込むことが重要である場合にのみ使用する必要があります。特別な場合を除いて、ほとんどのユーザーはこれを必要としないため、これを避ける必要があります。 0〜7の適切な値もサポートします。rootのみがこのクラスを使用できます。つまり、コマンドの前にsudoを付ける可能性があります。優先度0のリアルタイムクラスのプロセスは、他のリソースプロセスを枯渇させる可能性があることに注意してください。実際には、別のプログラムが数メガバイトのデータの書き込み/読み取りを完了するまでに数分または数時間も待たなければならない可能性があることを意味します。これが必要であることが確実な場合にのみ、注意して使用してください。クラス2または3の重要なプロセスでディスクアクセスが必要な場合、リアルタイムプロセスの書き込みが完了するまで、システムがフリーズする可能性があります。

コマンドの例:

sudo ionice -c 1 -n 7 bash

便利なイオニスの例

最後の例では、copy / moveコマンドを実行する代わりに、シェルが起動されています(Bash)。これで、そのシェルに入力する後続のすべてのコマンドは、I/Oスケジューリングクラスと優先度を継承します。グラフィカルインターフェイスでもこれを行うことができます。

ionice -c 3 pcmanfm

最後のコマンドは、LXDEデスクトップ環境でファイルエクスプローラーを起動します。 「pcmanfm」を特定のデスクトップのファイルエクスプローラーの名前に置き換えます。これで、そこで開始するすべてのディスク操作は、アイドル状態のI/Oスケジューリングクラスで実行されます。

他の状況では、コピー/移動操作がすでにアクティブになっている場合があります。この場合、別の方法でイオニスを使用できます。

ionice -c 3 -p 4910

これにより、プロセスID 4910で実行されているプログラムの優先度クラスが変更されます。PID(プロセスID)は、タスクマネージャーまたはpgrepなどのコマンドで見つけることができます。 。

LinuxでI/Oプロセスの優先度を管理する方法

結論

ioniceは、大きなファイルをコピー/移動するときに遅れたくないデスクトップで役立ちます。ただし、これはサーバーでもさらに役立つ可能性があることに注意してください。完全バックアップを実行している間、そこでホストする可能性のあるWebサイトが訪問者に遅れをとることは絶対に望ましくありません。


  1. Linuxでプロセスを強制終了する方法

    Linuxでプロセスを強制終了するために利用できるメソッドは多数あります。このチュートリアルでは、壊れたプロセスを見つけて強制終了する方法を説明します。 プロセスは簡単に孤立する可能性があります。意図的かどうかに関係なく、親プロセスがクラッシュし、子プロセスが実行されたままになる可能性があります。親プロセスが完了した子プロセスを取得できず、ゾンビになる場合があります。 これらのプロセスは両方とも行き詰まっており、手動による介入が必要です。 ジョブ制御を入力します。 壊れたプロセスを強制終了する方法を見てみましょう。 いくつかのコマンドを見てみましょう: トップ (そしてなぜ htop

  2. Linux でディスク容量をチェックして管理する方法

    ディスク容量の管理は、使用するプラットフォームに関係なく、コンピューター ユーザーにとって大きな懸念事項の 1 つです。特にシステム管理者の場合、オフライン システムとオンライン システムの状態を監視することが仕事です。ディスク容量が少ないと、Linux での更新が妨げられ、他の重大なエラーが発生する可能性があります。 したがって、特定のファイルが使用するディスク容量と容量を知るには、df および du コマンドに精通している必要があります。 この投稿では、df および du コマンドを使用して Linux のディスク容量を確認および管理する方法について説明します。 DF (ディスク ファ