我有三种跑步方式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/ &
第三(我认为第一和这是一样的?)
mv /db/dbfile1 /usb_storage/
mv /db/dbfile2 /usb_storage/
mv /db/dbfile3 /usb_storage/
这些方法中哪种更好?为什么?
答案1
如果并行移动文件有任何优点,那么很可能它mv
本身就已经这样做了,或者存在类似的工具。 ;)
mv
在同一源/目标磁盘上并行运行没有任何意义,因为无论如何您通常都会受到存储介质速度的限制。如果/usb_storage/
是 USB 记忆棒,它不会使记忆棒运行得更快。
mv /db/dbfile1 /db/dbfile2 /db/dbfile3 /usb_storage/
应该是最好的方法,因为它会执行您想要的操作,直到完成为止(为了使您的替代方案大致等效,您必须wait
在末尾添加 a )。按顺序而不是并行写入文件也有助于防止不必要的文件碎片。
此外,如果/usb_storage/
文件大小不足以容纳要移至其中的所有文件,并行工作时您可能会获得至少一个完整的文件,而不是在并行工作时得到三个不完整/无副本。
答案2
并行运行 mv 具有潜在的性能提升:当一个进程等待读取返回时,如果另一个文件在缓存中,它可以直接执行另一个 I/O 请求。此外,IO 调度程序可以对您尝试移动的所有文件的扇区请求进行重新排序,以便 HDD 上的读/写磁头(显然 USB Key 上没有那么多)可以尽可能少地或可能地移动。
也就是说,并行运行的性能优势将非常小,除非您有大量文件系统碎片(为了避免读/写头到处乱窜而受益)。
不过,如果您关心性能,我会确保您的 USB 密钥的调度程序是“noop”,这样当在没有读/写的介质上进行一次性拍摄并不重要时,它就不会花时间重新排序请求头。如果您的常规 HDD 调度程序是 cfq,您还可以尝试使用 ionice magic 将 mv 操作优先于系统中发生的任何其他操作。