|
カテゴリ:ソフト開発日誌
CHUXIA Robot Micro SD Card 16Gbyte(32Gbyte) の性能を見ていく、一言で言えば普通に使える Class 10 32Gbyte の SD Card だ。おおよその利用シーンで Class 10 に見合う速度を達成している。Raspberry Pi Zero W を動かすストレージとして 1ヵ月 ほど使っていて問題は起きていない。
![]() 32Gbyte の全領域を fdisk partition 形式でパーティションを作り直す。ext4 file システムでフォーマットして性能測定を行う。32Gbyte 中の 24GiByte を書き込み、読み出しした。 気になった測定結果を見ていく。フォーマット直後のほぼ「下ろしたて」(brand new) のシーケンシャル書き込み速度と、 Sequential Write at Brand new, transfer speed vs transfer progress (Try #1, 0% to 100% as 0bytes to 24Gibytes, Raw data=0000-Y-0000-00.txt) ![]() 1 回 Random Read/Write 混在テストを実施した後の、シーケンシャル書き込み速度を比較する。 Sequential Write after Random Read/Write, transfer speed vs transfer progress (Try #2, 0% to 100% as 0bytes to 24Gibytes, Raw data=0003-Y-0001-00.txt) ![]() 「下ろしたて」の平均 Sequential write 速度は 21.9Mbytes/sec、Random Read/Write 後は 14.7Mbytes/sec になった。速度は 67.1% に低下する。性能低下した状態でも Class 10 の目標速度 10Mbytes/sec を越えている。良いコストパフォーマンスを感じるはずだ。 速度変動分布はおおよそ 3 段階に分離している。TLC か QLC 構造なのだろうか。他の要因で 3 段階に見えている可能性もある。Random Read/Write 後の速度変動分布は、広がりを持つようになった。最小おおよそ 5Mbytes/sec だ。「普通に使える」使用感に仕上がっている。 Random Read/Write 後の Sequential Write 速度の違いから、16Gbyte に使用領域を制限し、Erase 済みの block を即座に割り当てられる様にして、早い Micro SD Card として使って貰う意図を感じる。自分は Class 10 を満たしているだけでも優秀だと考えている。 O_DIRECT で open した場合の Random Read/Write を見ていく、Read 側は素直に 94Mbytes/sec まで速度を出している。1 回目と 2 回目も大きく変わらない。100kbyte 以上の転送でほほ 25Mbytes/sec 以上を出せている。64kbyte 未満の転送で cache が効いている場合が多く見られる。複数の cache line にまたがっている場合も効率的にまとめ上げが行われている。sense amp と組みになっている Flip Flop の列が記憶しているデータを巧みなアドレス管理で利用していると思われる。使用感は良いだろう。 Random Read/Write with O_DIRECT Read part, transfer speed vs transfer length (Try #2, Raw data=0004-Y-0001-01.txt) ![]() Write 側は 2 回目の方に性能低下が見られる。32kbyte 以上の書き込みで 1 回目最低 5Mbytes/sec だったのが 2 回目は 2 ~ 3Mbytes/sec 程度の場合が目立つ様になる。分布の中間辺りは 10 ~ 20 Mbytes/sec だ。Random Access でも Class 10 の性能をおおよそ出せている。 Random Read/Write with O_DIRECT Write part, transfer speed vs transfer length (Try #2, Raw data=0004-Y-0001-01.txt) ![]() Write 側の access time でみると最高速が出せているときと、再低速になってしまった場合が 10 倍程度開いている。300kbyte くらいの書き込みから目立つ。 Random Read/Write with O_DIRECT Write part, access time vs transfer length (Try #2, Raw data=0004-Y-0001-01.txt) ![]() 数 100 個のファイルに何かの変換を掛ける作業でちょっとしたプチフリーズ現象を見るかもしれない。O_DIRECT を付けないテストで、プチフリーズ現象に相当する結果が出ている。実用では linux で apt update, apt upgrade, coreutils build, sg3_utils build で問題は起きていない。懸念はほぼ無いと言える。 IOPS は Read 側で 1800 IOPS, Write 側で 500 IOPS だ。Write 側で 1000 IOPS 程は欲しい所、安く手に入った 32Gbyte Micro SD Card だ。高望みは出来ない。 Random Read/Write with O_DIRECT Read part, access time vs transfer length (Try #2, Raw data=0004-Y-0001-01.txt) ![]() Random Read/Write 後の Sequential Read は安定して 94Mbytes/sec で読み出せている。論理・物理アドレス変換, gather, error collection いずれも転送速度に影響が出ないように処理されている。パイプライン動作、並列ページ読み出し、ハードウエア処理、オーダーが低いアルゴリズム、エラー発生率が低いセル、いずれも良く出来ていると考えられる。 Sequential Read, after Random Read/Write, transfer speed vs transfer progress (Try #1, 0% to 100% as 0bytes to 24Gibytes, Raw data=0002-Y-0000-02.txt) ![]() O_DIRECT 無し(OS の cache を有効にした)ランダムアクセス性能を見る。Read 側で 100 秒越え(1.2849e+02 秒)のアクセスが 1 回発生している。Linux の /proc/sys/kernel/hung_task_timeout_secs (ハングアップタスク検出時間) のデフォルト値 120 秒を越えている(測定はデフォルト値を変更して、テストが中断しないようにしている)。 Random Read/Write without O_DIRECT Read part, access time vs transfer length (Try #1, (Raw data=0007-N-0000-01.txt)) ![]() 32Gbyte の Micro SD card だ。この中に Linux kernel source code を入れてビルドするとか、常時秒間数 10 アクセスを越える様な web server, samba server のストレージにする用途には使わないと思う。 性能測定結果は Raspberry Pi Zero W を動かすストレージとして使って問題ないと判断している。CPU が Single Core 1GHz 程の性能だとストレージアクセス以外の処理時間割合が多い。ssh でログインして cd / ; ls -lR の様な単純なディレクトリ探索でも CPU 使用率は 100% に達する。ストレージを高負荷でアクセスすることは普通の操作ではない。 fstrim -m 1m -v / で trim を実施することもできる。なおかつ discard mount option 常用だ。ケースに収めて外から見えないと「あれ? CHUXIA Robot Micro SD Card だったっけ?」という程度に意識せずに使えている。 お気に入りの記事を「いいね!」で応援しよう
最終更新日
2026.09.03 23:56:23
コメント(0) | コメントを書く
[ソフト開発日誌] カテゴリの最新記事
|
|