Raspberry Piには4kランダムリードライトが速いSDカードを使おう

IOzone Gnuplot
Raspberry Pi 3でビルドして遊んでいるともう少し速くならないかなぁ、と思います。オーバークロックとかありますが、まずは基本のSDカードについて調べてみました。

この記事を書いた時点ではSamsungのEVO+を選ぶのがベストのようです。





Raspberry Piのパフォーマンスに最も影響を与えるパーツはSDカードです。RPiのOSはSDカード上に存在します。SDカードの読み書き速度が応答速度に効きます。

高速を謳うSDカードもありますが、それは連続読み出し速度が強調されています。書き込み速度にも気を使う必要があります。
SDカードメモリはデジタルカメラやビデオカメラなどでの利用を想定しています。そのため連続書き込みの性能が規格として決められています。Class6とかClass10とかいうやつですね。

しかし残念ながらRPiで使う場合、これらの指標は当てにならないようです。
OSが動くときはSDカードを連続で読み書きするわけではない、という事と、SDカードは小さなファイルの読み書きが遅い、という事に原因があります。
小さなファイルの読み書き性能が重要になります。パソコンのHDDとSSDの体感速度の違いと同じですね。

という事でSDカードのランダムリードライトの性能を知りたいなぁ、と思ったわけです。

SDカードのベンチマークがあるサイト

SDカードのベンチマークの報告が多いフォーラムスレッドがこちらです。

SD Card Benchmarks  / Raspberry Pi Forum
SD card speed / Raspberry Pi Forum

RPiのいろいろなシリーズでのベンチマークがまとまっていてわかりやすいのがこちらです
microSD Card Benchmarks
"Because of this, I went and purchased over a dozen different cards and have been putting them through their paces. Here are the results of those efforts, in a nice tabular format:"
オーバークロックをした結果もあります。リードは速くなりますね。ライトはあまり変わらないようです。
カードによって大きな差があります。RPiでデータベースを動かしたりすると顕著な差となって現れそうです。コンパイル速度も上がりそうです。

重要な指標は4kランダムリードライトです。これらのサイトを眺めるとわかりますが、SDカードは今のところSamusungのEVO+ 一択のようです。



ランダムリードで8MB/s、ランダムライトで3MB/sだそうです。高速なわりには価格も安くて良いですね。

EVO+は32GBが一番小さい容量のようです。できれば8GBが欲しいところでした。いろいろなプログラムで遊んでいると初期イメージから焼き直しをしたくなります。OSイメージからは面倒なので区切りの良い所まで動いたらSDカードのイメージを吸い出してすぐに復元できるようしてます。容量が多いと吸い出すのに時間がかかります。まぁEVO+の速度なら吸い出しも速いからいいんですけど。

さて、自分でベンチマークもしてみましょう。

IOzone Filesystem Benchmarkをインストールする

小さいファイルの読み書きはIOZoneというプログラムで評価しているようです。私も使ってみましょう。
IOzone Filesystem Benchmark
"IOzone is a filesystem benchmark tool. The benchmark generates and measures a variety of file operations. Iozone has been ported to many machines and runs under many operating systems."
ビルドの仕方は前節で紹介した"microSD Card Benchmarks"のページの最後にありますね。
この記事を書いた時の最新版を入れてみます。
cd ~/Downloads
wget http://www.iozone.org/src/current/iozone3_465.tar
cat iozone3_465.tar | tar -x
cd iozone3_465/src/current
make linux-arm -j3
実行用リンクはお好きに作ってください。私は作らずに使います。

動かしてみる

フォーラムで良く見る評価パラメータはこちらのようです。
./iozone -e -I -a -s 50M -r 4k -r 512k -r 16M -i 0 -i 1 -i 2

今使っているのはSANDISKのSDQUA-064G-U46Aというやつです。数年前にスマホやデジカメ用に買いました。UHS-I、クラス10のようですので連続読み書き10MB/sは最低出るものです。
                         random    random 
  kB  reclen    write  rewrite    read    reread    read     write 
51200       4     1801     1685     6343     6347     6131     1543
51200     512    10919     5325    22372    22371    22368     1962
51200   16384    11002     9897    22694    22695    22692    120735
カタログ値はクリアしています。ランダム4kライトはまあまあですか。

reclenって何? record lengthだそうです。より詳細な説明は
docs/IOzone_msword_98.pdf
にあります。

グラフを表示してみる

IOzoneのsrcディレクトリをのぞくとgnuplotでグラフ表示してくれるスクリプトがあります。ついでなので試してみます。
まずはgnuplotをインストールします。
sudo apt-get install gnuplot-x11
iozoneはautoモードで実行するようです。 -a か -azオプションで実行します。
-Rオプションを付けるとタブ区切りテキストで測定結果を表示してくれます。ファイルに保存しておけばExcelで開くのに便利だそうです。
./iozone -Ra output.txt
いろいろな組み合わせで速度を測ってくれるようです。ものすごく時間がかかります。2時間くらいで終わったかも。パラメータをいじって評価ステップを粗くしないといけませんかね。

Genarate_Graphsスクリプトを実行してみます。あっ、もちろんX Window上でですよ。
./Genarate_Graphs output.txt

IOzone Gnuplot

グラフが表示されましたか?エンターを押すと次のグラフが表示されます。グラフを見ても解釈できませんが・・・
思った以上に細かいステップで速度を測定してます。時間がかかるわけです。これはSDカードの寿命を縮めてますね。

Transcend TS8GUSDHC10U1

最近買ったSDカードのベンチマークを見てみます。



まずは開封後すぐにパソコンでベンチマークを見てみます。
-----------------------------------------------------------------------
CrystalDiskMark 5.2.0 Shizuku Edition x64 (C) 2007-2016 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :    20.841 MB/s
  Sequential Write (Q= 32,T= 1) :    20.184 MB/s
  Random Read 4KiB (Q= 32,T= 1) :     5.198 MB/s [  1269.0 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :     1.094 MB/s [   267.1 IOPS]
         Sequential Read (T= 1) :    20.552 MB/s
        Sequential Write (T= 1) :    14.888 MB/s
   Random Read 4KiB (Q= 1,T= 1) :     4.979 MB/s [  1215.6 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     1.224 MB/s [   298.8 IOPS]

  Test : 500 MiB [M: 0.0% (0.1/7687.0 MiB)] (x3)  [Interval=5 sec]
    OS : Windows 10 Professional [10.0 Build 14393] (x64)
 
なんか遅い・・・リーダーが古いかな。500MiB? 一桁間違えた。

このSDカードにRaspbianのイメージを焼いてRPi3で試します。
                          random    random  
   kB  reclen    write  rewrite    read    reread    read     write  
51200       4     1064     1414     7147     7146     6836      973  
51200     512    12259    14547    22568    22522    22520    10986  
51200   16384    19317    18995    22795    22868    22880    16258  
あれ?遅いですね・・・ 裏で何か動いてたかな?

EVO+買います・・・

コメント

最近のコメント

Threaded Recent Comments will be here.