ぶていのログでぶログ

思い出したが吉日

Crystal Disk Markとdiskspd-for-linuxの比較 / USB-SSDデバイスSSD-PUT250U3-BKCを買ってみた

Amazonの初売りでBuffaloのSSD-PUT250U3-BKCが30% OFFくらいで売っていたので衝動買いしてしまった。3本も(?!) これはUSB接続のポータブルSSDになっていて、USBメモリやSDカードよりかなり高速に読み込み・書き込みができるのがウリになっている。 今作っている?遊んでいる?自宅サーバのk8sクラスタのストレージ用に使おうと思っている。 いまだにワークロードが載っていないのに、ガワだけ立派になっていく!!!!!!

実際にストレージとして使っていくならばベンチマークしないといけない!ということで、Crystal Disk Markとdiskspd-for-linuxでベンチマークをしてみた。

Crystal Disk Markとdiskspd-for-linuxの関係

Crystal Disk Mark(以下、CDM)は有名なので詳細は省くがWindowsのストレージベンチマークソフトで、ほぼデファクトになっていると思う。 実は、CDMはdiskspdというMicrosoft社が出しているベンチマークソフトのフロントエンドになっているのだった。 このdiskspdもWindows専用なのだが、ありがたいことにLinux版向けのコードも公開されているので、これを使うとCDMと同じベンチマークをLinuxでも行うことができるはずである。

github.com

fioではだめなのか?

Linuxでストレージのベンチマークソフトといえばfioが有名だと思う。 最初は、diskspd-for-linuxを使わずにfioを使おうと思っていろいろパラメータを作ったのだが、どうもうまくいかなかった。 CDMの30%程度の結果しかでず、うーんとなってしまった。 fioのパラメータを探っていっても面白いと思うのだが、diskspd-for-linuxがあるのでそちらを使うことにした。

SSD-PUT250U3-BKCのベンチマーク

いろいろ書いたが、SSD-PUT250U3-BKCのベンチマーク結果を貼っていく。 Crystal Disk Markで実行した結果と、diskspd-for-linuxで実行した結果をそれぞれ貼る。 なお、それぞれOSは違うが同じPCで測定を行った。

  • PC
  • OS
    • Windows 11 Pro
    • Ubuntu Linux 22.04 (USBメモリブート)

Crystal Disk Mark

まずはCrystal Disk Markから。3本買ったので、それぞれのを貼っておく。

1本目

2本目

3本目

3本とも大きく差はなく、そして、メーカーの公証数値くらいのシーケンシャルリードがでていてよかった。 シーケンシャルライトもリードとそん色ない数値がでていてよい。 ランダムリード・ライトに関してもUSB接続と考えれば十分な速度が出ていると思う。 ちなみに、CDMではテストファイルのサイズを変えることができるが、このサイズを大きくしても小さくしても測定誤差はあるものの大きく値が変わらなかった(サイズの変更をしたベンチマークは1本目だけで行った)。

テストサイズ=128MiB

テストサイズ=64GiB

diskpart-for-linux

次にdiskpart-for-linnuxでの計測結果を貼る。 こちらはめんどくさくて1本しか測定していない*1。 計測は以下のようなコマンドで行った。なお、コマンドのオプションに関しては【diskspd】ストレージのベンチマーク方法(Linux版CrystalDiskMarkを作ってみた) – Hacker's Highを参考にさせていただいた、ありがとうございます。

TARGET_DIR=/data

diskspd -c1G -Zr -b1M -d5 -o8 -t1 -W0 -Sd -w0 -L $TARGET_DIR/diskspd-testfile | tee seq-read-1m-q8-t1.log
diskspd -Zr -b1M -d5 -o8 -t1 -W0 -Sd -w100 -L $TARGET_DIR/diskspd-testfile | tee seq-write-1m-q8-t1.log
diskspd -Zr -b1M -d5 -o1 -t1 -W0 -Sd -w0 -L $TARGET_DIR/diskspd-testfile | tee seq-read-1m-q1-t1.log
diskspd -Zr -b1M -d5 -o1 -t1 -W0 -Sd -w100 -L $TARGET_DIR/diskspd-testfile | tee seq-write-1m-q1-t1.log
diskspd -Zr -b4K -d5 -o32 -t1 -W0 -Sd -w0 -L -r $TARGET_DIR/diskspd-testfile | tee random-read-4k-q32-t1.log
diskspd -Zr -b4K -d5 -o32 -t1 -W0 -Sd -w100 -L -r $TARGET_DIR/diskspd-testfile | tee random-write-4k-q32-t1.log
diskspd -Zr -b4K -d5 -o1 -t1 -W0 -Sd -w0 -L -r $TARGET_DIR/diskspd-testfile | tee random-read-4k-q1-t1.log
diskspd -Zr -b4K -d5 -o1 -t1 -W0 -Sd -w100 -L -r $TARGET_DIR/diskspd-testfile | tee write-read-4k-q1-t1.log

テストサイズは1GiBとした。参考にCDMとの比較も載せておく。

結果(MB/s) CDMの結果(MB/s) 比較
シーケンシャルリード 1MiB Q8T1 386.80 405.53 -4.6%
シーケンシャルライト 1MiB Q8T1 317.60 377.61 -15.9%
シーケンシャルリード 1MiB Q1T1 344.00 385.30 -10.7%
シーケンシャルライト 1MiB Q1T1 320.00 359.63 -11.0%
ランダムリード 4KiB Q32T1 156.48 161.99 -3.4%
ランダムライト 4KiB Q32T1 46.69 167.29 -72.1%
ランダムリード 4KiB Q1T1 20.67 20.51 +0.1%
ランダムライト 4KiB Q1T1 47.06 48.05 -2.1%

全体的にdiskpart-for-linuxのほうが低い値となった。 OSごとのドライバの実装やファイルシステム、diskpartの実装*2の違いにより差が生まれるのだろうか。 特に顕著なのが、ランダムライト4KiB Q32T1でほとんどパフォーマンスがでていない。 同じランダムライトの4KIB Q1T1とほぼ同じ結果なのでもしかしたらLinuxのUSBマスストレージのiodepthが1で頭打ちになっているとかなのだろうか? 🤔 軽く調査してみたが何もわからなかったので諦め…。

まとめ

衝動買いしたとはいえSSD-PUT250U3-BKCは期待以上のパフォーマンスを発揮していてよかった。 私の使用用途として想定しているRaspberry Pi 4やNano Pi R4Sに搭載されたMicroSDよりも圧倒的に速いので、クラスタのストレージにも最適っぽくてよかった。 LinuxでもCDMと同等のベンチをとりたくdiskpart-for-linuxを試してみたが、思ったより差が出たのが意外だった。 それをもってdiskpart-for-linuxが使えないというわけではないが、CDMに比べてスコアが低いというのを前提に使用するのがよさそうな気がする。

おまけ1: Raspberry Pi4とNanoPi R4Sでベンチマークした結果

私が実際にSSD-PUT250U3-BKCを使おうと思っているRaspberry Pi 4とNanoPi R4Sでdiskpart-for-linuxでベンチマークしてみた。 それぞれ、USB3.0である。

Raspberry Pi 4(MB/s) NanoPi R4S(MB/s)
シーケンシャルリード 1MiB Q8T1 359.40 413.80
シーケンシャルライト 1MiB Q8T1 174.20 301.80
シーケンシャルリード 1MiB Q1T1 280.20 306.60
シーケンシャルライト 1MiB Q1T1 197.40 250.60
ランダムリード 4KiB Q32T1 42.96 40.13
ランダムライト 4KiB Q32T1 14.05 20.21
ランダムリード 4KiB Q1T1 14.81 15.47
ランダムライト 4KiB Q1T1 13.27 22.24

おまけ2: diskspd-for-linuxのバイナリ

diskspd-for-linuxのバイナリは公式にはないようなので、DockerでビルドしてGitHubにアップロードしておいた。

github.com

おまけ3

冒頭でAmazonの初売りでSSD-PUT250U3-BKCを買ったと書いた。 1個あたり3760円でめちゃやす!!!!っと思ったのだが、いま検索したらノジマオンラインで3564円で売っていた…。悲しい

*1:CDMでの計測で個体差がないことがわかっていたのもある

*2:基本的なロジックは一緒だと思うが、ストレージに書き込む際に使用するライブラリの違いなどがありそう