Raspberry Piには4kランダムリードライトが速いSDカードを使おう
Raspberry Pi 3でビルドして遊んでいるともう少し速くならないかなぁ、と思います。オーバークロックとかありますが、まずは基本のSDカードについて調べてみました。
この記事を書いた時点ではSamsungのEVO+を選ぶのがベストのようです。
Raspberry Piのパフォーマンスに最も影響を与えるパーツはSDカードです。RPiのOSはSDカード上に存在します。SDカードの読み書き速度が応答速度に効きます。
高速を謳うSDカードもありますが、それは連続読み出し速度が強調されています。書き込み速度にも気を使う必要があります。
SDカードメモリはデジタルカメラやビデオカメラなどでの利用を想定しています。そのため連続書き込みの性能が規格として決められています。Class6とかClass10とかいうやつですね。
しかし残念ながらRPiで使う場合、これらの指標は当てにならないようです。
OSが動くときはSDカードを連続で読み書きするわけではない、という事と、SDカードは小さなファイルの読み書きが遅い、という事に原因があります。
小さなファイルの読み書き性能が重要になります。パソコンのHDDとSSDの体感速度の違いと同じですね。
という事でSDカードのランダムリードライトの性能を知りたいなぁ、と思ったわけです。
カードによって大きな差があります。RPiでデータベースを動かしたりすると顕著な差となって現れそうです。コンパイル速度も上がりそうです。
重要な指標は4kランダムリードライトです。これらのサイトを眺めるとわかりますが、SDカードは今のところSamusungのEVO+ 一択のようです。
ランダムリードで8MB/s、ランダムライトで3MB/sだそうです。高速なわりには価格も安くて良いですね。
EVO+は32GBが一番小さい容量のようです。できれば8GBが欲しいところでした。いろいろなプログラムで遊んでいると初期イメージから焼き直しをしたくなります。OSイメージからは面倒なので区切りの良い所まで動いたらSDカードのイメージを吸い出してすぐに復元できるようしてます。容量が多いと吸い出すのに時間がかかります。まぁEVO+の速度なら吸い出しも速いからいいんですけど。
さて、自分でベンチマークもしてみましょう。
この記事を書いた時の最新版を入れてみます。
今使っているのはSANDISKのSDQUA-064G-U46Aというやつです。数年前にスマホやデジカメ用に買いました。UHS-I、クラス10のようですので連続読み書き10MB/sは最低出るものです。
reclenって何? record lengthだそうです。より詳細な説明は
docs/IOzone_msword_98.pdf
にあります。
まずはgnuplotをインストールします。
-Rオプションを付けるとタブ区切りテキストで測定結果を表示してくれます。ファイルに保存しておけばExcelで開くのに便利だそうです。
Genarate_Graphsスクリプトを実行してみます。あっ、もちろんX Window上でですよ。
グラフが表示されましたか?エンターを押すと次のグラフが表示されます。グラフを見ても解釈できませんが・・・
思った以上に細かいステップで速度を測定してます。時間がかかるわけです。これはSDカードの寿命を縮めてますね。
まずは開封後すぐにパソコンでベンチマークを見てみます。
このSDカードにRaspbianのイメージを焼いてRPi3で試します。
EVO+買います・・・
この記事を書いた時点では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ビルドの仕方は前節で紹介した"microSD Card Benchmarks"のページの最後にありますね。
"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."
この記事を書いた時の最新版を入れてみます。
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
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-x11iozoneはautoモードで実行するようです。 -a か -azオプションで実行します。
-Rオプションを付けるとタブ区切りテキストで測定結果を表示してくれます。ファイルに保存しておけばExcelで開くのに便利だそうです。
./iozone -Ra output.txtいろいろな組み合わせで速度を測ってくれるようです。ものすごく時間がかかります。2時間くらいで終わったかも。パラメータをいじって評価ステップを粗くしないといけませんかね。
Genarate_Graphsスクリプトを実行してみます。あっ、もちろんX Window上でですよ。
./Genarate_Graphs output.txt
グラフが表示されましたか?エンターを押すと次のグラフが表示されます。グラフを見ても解釈できませんが・・・
思った以上に細かいステップで速度を測定してます。時間がかかるわけです。これは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+買います・・・
コメント
コメントを投稿