Python File Copy Test1

はじめに

ファイルコピーのプログラムを作ってみたのは良いが、やったらめったら遅いのが気になって、パフォーマンスを計測してみることに。

とりあえずshutilが遅いのではないか、という疑惑があって、shutil.copyfile、shutil.copy、os.system('cp "{0}" "{1}".format())という3つの方法で計測している。

また環境が特殊なので、HDDのZFSSSDext4両方試している。

環境

ext4SSDZFSはcopies=2を付けて擬似的なRAIDになっているHDD2台である。

Result

100MB file
Method ext4 ZFS
shutil.copyfile 0.459 0.459
shutil.copy 0.452 0.460
os.system('cp') 0.357 0.325
1GB file
Method ext4 ZFS
shutil.copyfile 23.705 31.184
shutil.copy 20.996 36.818
os.system('cp') 20.235 30.878
many files
Method ext4 ZFS ZFS->ext4 ext4->ZFS
shutil.copyfile 0.885 4.251 0.840 0.736
shutil.copy 0.773 6.878 0.904 0.556
os.system('cp') 1.577 9.686 1.214 1.124

結論

良く考えてみたら、HDDのランダムアクセス(many filesの場合ランダムアクセスになる)が遅いのを、最近SSDばっかり使ってるせいかうっかり忘れてた。

ちなみに多くの場合でshutil.copyの方が早いので、ファイル名を変更しない場合は、copyfileよりcopyの方が良い。