大きなサイズのファイルを高速に作る方法
はじめに
空のファイルを作る時、どのようなコマンドを使っているでしょうか?
私の場合は以下のように、ファイルサイズが0であればtouch
コマンド、一定のサイズのファイルが必要な場合はdd
コマンドを使っていました。
ところがdd
コマンドとは別に、一定のサイズのファイルを作る方法としてfallocate
というコマンドがあることを知ったので、両者のパフォーマンスを比較してみました。
[nkojima@akagi sample_files]$ touch sample.txt
[nkojima@akagi sample_files]$ dd if=/dev/zero of=./sample2.txt bs=1K count=1024
1024+0 レコード入力
1024+0 レコード出力
1048576 バイト (1.0 MB) コピーされました、 0.00580267 秒、 181 MB/秒
[nkojima@akagi sample_files]$ ls -lah
合計 1.0M
drwxrwxr-x 2 nkojima nkojima 43 6月 21 12:18 .
drwx------. 5 nkojima nkojima 175 6月 21 12:17 ..
-rw-rw-r-- 1 nkojima nkojima 0 6月 21 12:17 sample.txt
-rw-rw-r-- 1 nkojima nkojima 1.0M 6月 21 12:18 sample2.txt
テストに使用した環境
- CPU
- Kabylake: Pentium G4560
- マザーボード:ASRock H110M-STX
- メモリ:8GB(4GB×2枚)
- ストレージ:256GB SSD(NVMe)
- OS
- CentOS 7.8(2003)
テスト方法
-
dd
コマンドとfallocate
コマンドを使って、様々なサイズのファイルを作成して、その処理速度を測定しました。
- ファイルサイズ:100MB、500MB、1GB、2GB、4GB、8GB、16GB
-
dd
コマンドのオプションのブロックサイズ(-bs)は1MBとしました。
- 処理時間の測定には、以下のように
date
コマンドを使ったため、正確な処理時間でありません。
- 処理を3回実行して、その平均値をテスト結果としました。
[root@akagi ~]# date; dd if=/dev/zero of=dd.txt bs=1M count=100; date;
2020年 6月 21日 日曜日 12:48:28 JST
100+0 レコード入力
100+0 レコード出力
104857600 バイト (105 MB) コピーされました、 0.0362178 秒、 2.9 GB/秒
2020年 6月 21日 日曜日 12:48:29 JST
[root@akagi ~]# date; fallocate -l 100m ./fallocate.txt; date;
2020年 6月 21日 日曜日 12:48:52 JST
2020年 6月 21日 日曜日 12:48:52 JST
テスト結果
- 以下の表を見れば一目瞭然、圧倒的に
fallocate
コマンドの方が高速でした。
- swap領域を作る時など、単一の大きなファイルを作る必要があるケースでは、特にfallocateコマンドが有用だと考えられます。
-
dd
コマンドは高速なストレージ(NVMe-SSD)を使ってもそれなりに処理時間がかかるので、低速なストレージだとさらに大きな差がつくのではないかと思います。
- Kabylake: Pentium G4560
- CentOS 7.8(2003)
-
dd
コマンドとfallocate
コマンドを使って、様々なサイズのファイルを作成して、その処理速度を測定しました。- ファイルサイズ:100MB、500MB、1GB、2GB、4GB、8GB、16GB
-
dd
コマンドのオプションのブロックサイズ(-bs)は1MBとしました。 - 処理時間の測定には、以下のように
date
コマンドを使ったため、正確な処理時間でありません。 - 処理を3回実行して、その平均値をテスト結果としました。
[root@akagi ~]# date; dd if=/dev/zero of=dd.txt bs=1M count=100; date;
2020年 6月 21日 日曜日 12:48:28 JST
100+0 レコード入力
100+0 レコード出力
104857600 バイト (105 MB) コピーされました、 0.0362178 秒、 2.9 GB/秒
2020年 6月 21日 日曜日 12:48:29 JST
[root@akagi ~]# date; fallocate -l 100m ./fallocate.txt; date;
2020年 6月 21日 日曜日 12:48:52 JST
2020年 6月 21日 日曜日 12:48:52 JST
テスト結果
- 以下の表を見れば一目瞭然、圧倒的に
fallocate
コマンドの方が高速でした。
- swap領域を作る時など、単一の大きなファイルを作る必要があるケースでは、特にfallocateコマンドが有用だと考えられます。
-
dd
コマンドは高速なストレージ(NVMe-SSD)を使ってもそれなりに処理時間がかかるので、低速なストレージだとさらに大きな差がつくのではないかと思います。
fallocate
コマンドの方が高速でした。
- swap領域を作る時など、単一の大きなファイルを作る必要があるケースでは、特にfallocateコマンドが有用だと考えられます。
dd
コマンドは高速なストレージ(NVMe-SSD)を使ってもそれなりに処理時間がかかるので、低速なストレージだとさらに大きな差がつくのではないかと思います。ファイルサイズ | ddコマンドの処理時間(秒) | fallocateコマンドの処理時間(秒) |
---|---|---|
100MB | <1 | <1 |
500MB | <1 | <1 |
1GB | 1 | <1 |
2GB | 2 | <1 |
4GB | 4 | <1 |
8GB | 7 | <1 |
16GB | 15 | <1 |
関連記事
-
指定したサイズと数量でテスト用ファイルを生成
- こちらの記事も、
dd
コマンドからfallocate
コマンドを利用する形に修正したほうが良さそうです。
- こちらの記事も、
dd
コマンドからfallocate
コマンドを利用する形に修正したほうが良さそうです。
Author And Source
この問題について(大きなサイズのファイルを高速に作る方法), 我々は、より多くの情報をここで見つけました https://qiita.com/nkojima/items/10dfafdb1dc2aade7a86著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .