すべてのファイルをmvに渡す方が良いですか、それとも複数のmvプロセスを並列に実行する方が良いですか?

すべてのファイルをmvに渡す方が良いですか、それとも複数のmvプロセスを並列に実行する方が良いですか?

私は3つのランニングスタイルを持っていますmv。最初:

mv /db/dbfile1 /db/dbfile2 /db/dbfile3  /usb_storage/

第二:

mv /db/dbfile1  /usb_storage/ &
mv /db/dbfile2  /usb_storage/ &
mv /db/dbfile3  /usb_storage/ &

3回目(私は最初に考えましたが、これも同じですか?)

mv /db/dbfile1  /usb_storage/ 
mv /db/dbfile2  /usb_storage/ 
mv /db/dbfile3  /usb_storage/ 

次のうちどれが良いですか?なぜ?

答え1

ファイルを並列に移動する利点がある場合は、mv既にデフォルトで実行しているか、類似のツールが存在する可能性があります。 ;)

mvとにかく、通常はストレージメディアの速度によって制限されるため、同じソース/ターゲットディスクで並列に実行することは意味がありません。 USBスティックの場合、/usb_storage/スティックは速く実行されません。

mv /db/dbfile1 /db/dbfile2 /db/dbfile3 /usb_storage/

完了するまで目的を実行するので、最善のアプローチである必要があります(代替案をほぼ同じにするには、wait最後にaを追加する必要があります)。ファイルを並列ではなく逐次作成すると、不要なファイルの断片化を防ぐのにも役立ちます。

さらに/usb_storage/、ファイルサイズが移動しようとしているすべてのファイルを収容するのに十分な大きさでない場合、並行して作業すると、3つの不完全またはコピーがない代わりに、少なくとも1つの完全なファイルが生成されます。平行。

答え2

mvを並列に実行すると、パフォーマンスが向上する可能性があります。あるプロセスが読み取りが返されるのを待っている間に別のファイルがキャッシュにある場合は、別のI / O要求を直接実行できます。さらに、IOスケジューラは、移動したいすべてのファイルのセクタ要求を並べ替えることによって、HDDの読み取り/書き込みヘッド(明らかにUSBキーのヘッドはあまりありません)ができるだけ少なくまたは多く移動できるようにすることができます。

つまり、ファイルシステムの断片化があまり発生しない限り(読み取り/書き込みヘッドが移動しないという利点を得るために)、並列実行によるパフォーマンス上の利点は非常に小さいです。

ただし、パフォーマンスに興味がある場合は、USBキーのスケジューラが「noop」であることを確認して、読み取り/書き込みのないメディアのワンショットショットが重要でないときに並べ替えるのに時間を費やさないようにします。リクエストヘッダーです。通常のHDDスケジューラがcfqの場合は、ionice Magicを使用して、システムで発生する他のジョブよりもmvジョブの優先順位を指定できます。

関連情報