mecobalamin’s diary

人間万事塞翁が馬

https://help.hatenablog.com/entry/developer-option

ドライブの速度比較

ファイルの書き込みに時間がかかってる
実際にディスクの書き込み速度がどの程度違うか比較した

比較したのはPC内蔵のSSD、HDD、USB3.1接続のHDD、USBメモリ、それとRAMディスク

計測はCrystal Disk Markを使った
USBメモリのみドライブとして認識されていなかったのでフォルダを指定して計測した

f:id:mecobalamin:20190419105912p:plain
SSDSATA接続
f:id:mecobalamin:20190419105958p:plain
HDD、SATA接続
f:id:mecobalamin:20190419110101p:plain
HDD、USB3.1 Type C接続
f:id:mecobalamin:20190419110212p:plain
USBメモリUSB3.1接続
f:id:mecobalamin:20190419110255p:plain
RAMディスク

SSDにデータを入れて処理するのがベストだろうけど
システムも入っているしサイズが足りないのと壊れたときの被害が大きい
HDDを使うなら内蔵と外付けで読み書きの速度はそこまで変わらない
壊れて後で困るぐらいなら外付けドライブを使うのが良さそう
テンポラリディスクはRAMディスクを使うのがいいが、
メモリのサイズが小さいので使い所を選ぶ

とりあえずデータの保存に外付けHDDを使って
テンポラリファイルの処理にRAMディスクを使用するのが
今の環境では速度が出せて万が一のとき被害が少ないと思う

そもそもWSLでI/Oが遅いのはしょうがないっぽい
WSLのI/Oが遅いことに対するMS技術者からの回答 | OPCDiary
Microsoft、WSLのI/Oパフォーマンス改善に取り組み | マイナビニュース
WSL vs VM for 開発作業 - Qiita


14 May 2019追記
bashのddコマンドで書き込みのベンチマークを測定
hdparmコマンドとddコマンドでハードディスクの簡易ベンチマークをする | 怪しい物を開発するブログ

d = 内蔵ssd
e = 内蔵hdd
h = 外付けhdd、USB3.1接続
usb = USBメモリUSB3.1接続
r = RAM disk

$ dd if=/dev/zero of=/mnt/d/tmp/testimg.tmp bs=1M count=1024
1024+0 レコード入力
1024+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.791183 s, 1.4 GB/s

$ dd if=/dev/zero of=/mnt/e/tmp/testimg.tmp bs=1M count=1024
1024+0 レコード入力
1024+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 2.54097 s, 423 MB/s

$ dd if=/dev/zero of=/mnt/h/tmp/testimg.tmp bs=1M count=1024
1024+0 レコード入力
1024+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 15.5029 s, 69.3 MB/s

$ dd if=/dev/zero of=/mnt/usb/tmp/testimg.tmp bs=1M count=1024
1024+0 レコード入力
1024+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 50.506 s, 21.3 MB/s

$ dd if=/dev/zero of=/mnt/r/tmp/testimg.tmp bs=1M count=1024
1024+0 レコード入力
1024+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.796872 s, 1.3 GB/s

書き込み速度(GB/s)は
SSD = RAM disk > HDD内蔵 > HDD外付け > USBメモリ
CrystalDiskMarkと数値の比較はできないんだろうけど
バイス間の書き込み速度比が結構違う
bash上ではSSDと内蔵HDDとでそんなに差が出てない

なおUSBデバイスは手動でマウントする
Windows 10の「WSL」でネットワークドライブなどをマウントする:Tech TIPS - @IT

$ sudo mkdir /mnt/usb
$ sudo mount -t drvfs F: /mnt/usb

アンマウントも手動

$ sudo umount /mnt/usb