NFS共有で数百万のディレクトリを再帰的に削除する必要があり、パフォーマンスの問題を回避するために、次のコマンドを実行しました。
ionice -c 3 -t find /dir -type f -exec rm {};
これにより、すべてのファイルと残りの空のディレクトリが削除されます。rm-rfを使用して削除できます。
しかし、ioniceが上記のコマンドに何らかの影響を与えるかどうかはわかりません。
男から、イオニスクラス3:
アイドルIO優先度で実行されているプログラムは、定義された猶予期間中に他のプログラムがディスクIOを要求していない場合にのみ、ディスク時間を取得します。アイドル状態のioプロセスが通常のシステムアクティビティに与える影響はゼロである必要があります。
ソースコードから、ioniceがioprio_set
を設定していることがわかります。
では、ioprio_setとは何ですか?
Ioprio_get()およびioprio_set()システムコールは、それぞれ1つ以上のスレッドのI/Oスケジューリングクラスと優先度を取得および設定します。
プロセススレッドがI/Oスケジューラーがそれらを使用してプロセスのI/Oをスケジュールするための追加のプロパティを持っていることを意味しますか?
それは私に次の質問をします:
私が完全に間違っている場合は、私を訂正してください。
サーバー側から操作する方法もありますが、まずはクライアント側からやってみたいと思います。
ionice
コマンドはLinux固有であると確信しているため、私の答えはLinuxを使用していることを前提としていることに注意してください。
I/Oスケジューラは、ファイルシステム層ではなく、ブロック層で動作します。その結果、ローカルストレージデバイスとリモート接続されたブロックストレージ(NBD、iSCSI、またはATAoE接続ストレージデバイスなど)にのみ影響します。その結果、NFSクライアント上のNFS共有に対して特別なI/Oスケジューリングは行われません(ただし、サーバーはそれを実行し、リモートI/Oの優先順位を認識しません)が、iSCSI用である可能性があります。 NBD、またはATAoEデバイス(ただし、多くのディストリビューションはこれらをno-opスケジューラーでセットアップします。つまり、ここでもサーバー側でのみI/Oスケジューリングが実行されます)。 NFSに影響を与える可能性がある唯一のケースは、ブロックレイアウトでpNFSを使用している場合ですが、おそらく存在せず、それがブロックレイヤーとどのように相互作用するのかよくわからないため、無視します。 )。
I/O優先度が実際に何であるかについてはdoes、それは使用している特定のI/Oスケジューラーに依存します。少なくとも、noopとdeadline(そしておそらく新しいmq-deadline)スケジューラーはそれにまったく注意を払っていませんが、CFQ、BFQ、そして新しいKyberスケジューラーはそれを使って何かをしていると思いますが、彼らはそうしませんtそれでまったく同じことをします。私の知る限り、CFQの場合、クラスは同等のCPUスケジューリングクラスと同様に動作します(リアルタイムI/OクラスはRT FIFO = CPUスケジューリングクラス)。BFQはそれらをスケジューリングアルゴリズムのヒントとして使用していると思いますが(CFQでのより大きな影響とは対照的に)、それについてはよくわかりません。
ここで、特定の例に関して、ionice
はそこにまったく影響を与えないはずですが、ディスクが他のプロセスによってすでに完全に使用されていない限り、ローカルファイルシステムにもあまり影響を与えない可能性があります(「アイドル」指定したスケジューリングクラスは真のアイドルスケジューラではありませんが、たとえそうであったとしても、find
はほとんどの場合ディスク時間をあまり使用せず、rm
コマンドはさらに少ないディスク時間を使用します)。
また、少しトピックから外れた補足事項ですが、引用したfind
コマンドはファイルを削除するだけなので(-type f
オプションのため)、rm -rf
と完全に同等ではありません。 -exec rm {} ;
を-delete
に置き換えることで、(ローカル)パフォーマンスを向上させることができます。これにより、削除するファイルごとに新しいプロセスを作成しなくても同じことができます。