必要になるmicroSDカード。
何を買えばよいのやら。。。
しかも安価なものは信頼性が低かったりするし。
悩みどころだな。
どれが良いのか考えてみるか。
SDカードの規格
最初に、容量とファイルシステムによって次のように分けられています。
規格(microSD,SD共通) | 容量 | ファイルシステム |
SD | 容量が2GBまでのもの | FAT 12, 16 |
SDHC:SD High Capacity | 容量が4/8/16/32GBのもの | FAT 32 |
SDXC:SD eXtended Capacity | 容量が32GB~2TBのもの | exFAT |
SDUC:SD Ultra Capacity | 容量が2TB~128TBのもの | exFAT |
「2GBとか容量すくね!」と最近では思いますよね。昔はよくありました。。。
スピードクラス
次にスピードクラスというものがあります。これはカードへの書き込み速度をもとに分けられていますが、スピードクラスには3つのグループ(スピードクラス、UHSスピードクラス、ビデオスピードクラス)があり、これが混乱の原因になっているのかと思います。
Raspberry Piや、Jetsonなどで使う場合は、UHSスピードクラスでみましょう。
(ちなみに、カメラなどはビデオスピードクラスを気にしたほうが良いです。)
バスインターフェースの転送モード
次にデータ転送に使うバスの性能によって分けられているものがあります。
現在では、ほぼUHS-Ⅰが主流になっていると思います。
バスインタフェース | カードタイプ | バスマーク | バススピード | 仕様 (バージョン) |
ノーマルモード | SD, SDHC, SDXC and SDUC | ー | 12.5MB/s | 1.01 |
ハイスピード | SD, SDHC, SDXC and SDUC | ー | 25MB/s | 1.10 |
UHS-Ⅰ | SDHC, SDXC and SDUC | 50MB/s(SDR50/DDR50) 104MB/s(SDR104) |
3.01 | |
UHS-Ⅱ | SDHC, SDXC and SDUC | 156MB/s Full Duplex 312MB/s Half Duplex |
4.00 | |
UHS-Ⅲ | SDHC, SDXC and SDUC | 312MB/s Full Duplex 624MB/s Full Duplex |
6.00 | |
SD Express | SDHC, SDXC and SDUC | 985MB/s PCIe Gen3 1Lane 1970MB/s PCIe Gen4 1Lane PCIe Gen3 2Lane 3940MB/s PCIe Gen4 2Lane |
7.00 8.00 ↓ |
※スピードクラスのClass 10は、ハイスピードバスIFの製品に実装可能。
※UHSスピードクラスにはUHSスピードクラス1および3があります。
UHSスピードクラスはUHS バスIF製品(UHS-I, UHS-II, UHS-III)に実装可能。
※ビデオスピードクラスには V6,10,30,60,90があります。V6, 10はハイスピードおよびUHS バスIF製品、
V30はUHSバスIF製品、V60とV90はUHS-IIおよびUHS-III バスIF製品に実装可能。
※Full Duplex(全二重通信)は、SDカードへの双方向(読み/書き)の通信が同時にできる方式で、Half Duplex(半二重通信)はどちらか一方しか同時にできない方式です。
アプリケーションパフォーマンスクラス
最近、スマホなどに差し込んでアプリケーションをインストールすることが多くなったため、アプリケーションでよく使われるIOPS(1秒当たりのI/O量)という単位で定義されたクラスです。
そもそもmicroSDのしくみはどうなっているの?
残念ながら、そうとは言い切れないのが現実です。
SDカードにストレージとしての性能を求める場合、以下の2つの観点が重要になります。
①SD規格のしくみからくる特性
microSDの「SD」は規格名で、東芝、SanDisk、Panasonicが共同開発したものです。SDの語源としては確かなものはないみたいですが、SDのロゴは東芝が開発していた光ディスクのロゴを使ったのではと言われています。SDカードの中にはフラッシュメモリ(NAND)とコントローラや回路基板などが入っていますが、仕組みを理解するために重要となるのが、内臓されている著作権保護機能(CPRM)です。 著作権保護機能は、SDカードを読み込むパソコンなどの機器側のSDホストコントローラと認証ができないと、データにアクセスできない仕組みです。SDカードを差し込むとSDカード情報がSDホストコントローラによって抜き出され認証に使用されます。認証後、データへのアクセスが可能になる仕組みです。簡単に図を描くと次のようになります。
図を見るとわかるのは、パソコンのCPUがメモリ上にあるデータなどをSD規格のカードに書き込む場合、SDホストコントローラを介して行うことです。つまり「パソコンやRaspberry Piなどに実装されているホストコントローラの対応している規格は何か」によってSDカード性能をフルに使えるかが決まります。いくら早いものを差し込んでも性能が上がらないことがあるのはこのためです。
対策
使用するRaspberry PiやJetsonなどの機器側のSDホストコントローラの対応規格を必ずチェックしましょう!
②SDカード上で実行される読み書き(I/O)の特性
インフラSEをやっていると、「こんな感じで動くアプリを作るから、クライアントレスポンス1秒以下になる機器を見積もって!」って言われることがあります。かなり頻繁に。
そんな時は、「じゃあ、そのアプリの読み込みと書き込みが一秒間にどのくらい想定していて、比率はどれくらいですか?」って聞きます。間違えなく、「そんなことは作ってみないとわからないよ~」と言われます。
でもね。SDカードやその他ストレージはハードウェアなので、仕様どおりにしか動かないんです。あとで性能を足すとか無理なんです。やばい。愚痴になってる(笑)。
そこでどのくらい読み書きが発生するかを定量化したのがIOPSです。一秒間に発生する読み書きの回数を示します。
IOPSが高くても読み込みと書き込みの比が、7:3だったらどうでしょうか?逆に3:7だったら。。。
Raspberry Piや、Jetson上で動作させるアプリケーションの処理内容によって変わってきます。
読み込み重視の例
すでに保存されているデータを頻繁に読み込んだり、センサーなどの処理結果をただインターネット上のサーバに転送するなど。処理のログ以外は書き込みがないものが当たります。
書き込み重視の例
複数のカメラから動画や写真を常に取得して、画像合成する、や障害時のトレースのため、同時稼働するすべての処理プロセスからの大量のログを保存する、などが当たります。
対策
Raspberry PiやJetson上で実行するアプリケーションなどが読み込み偏重か、書き込み偏重かを考えましょう!
特に書き込みに必要な性能が必要な場合は、一般的に性能の高いクラスを選択しましょう!
Raspberry Pi やJetsonがサポートしているSD規格は?
ここで気になるのは、Raspberry PiとJetson(SDホストコントローラ)がサポートしているSDカードの規格何かということですね。そこで、Raspberry PiやJetson開発キットでのSDカードの条件について調べてみました。
- Raspberry Pi 4 Model B
全てのmicroSDカードがサポートされています。アプリケーションクラスA2でも機能しますが、A1よりも改善しません。(※Raspberry Pi フォーラムより https://www.raspberrypi.org/forums/viewtopic.php?t=243615) - Raspberry Pi 3 Model B+
公式オリジナルmicro SDカードの仕様はUHS-Ⅰ A1でした。ので4Model とあまり変わらないのではと思います。 - Raspberry Pi zero / zero WH
特に情報はありませんでしたので、ほかのRaspberry Piと同じだと思います。 - NVIDIA Jetson Nano / Xavier NX / 開発者キット
32GB UHS-I が最低条件とされています。
これまでご説明した内容から、Raspberry PiやJetsonで使える規格は、「microSDHC UHS-Ⅰ A1 (32GB)」もしくは「microSDXC UHS-Ⅰ A1 (32GB以上)」とわかります。あとは、書き込み重視の場合は、クラスを上げるか、同じ規格でも製品によって書き込み性能を強化したものがあるので、そちらを選択するようにすると、後で悩まずに済みます。
さあ、どこのmicroSDを買おうか
おすすめのMicroSDカード
microSDHC UHS-Ⅰ A1(32GB)
OSにいろいろインストールする際の時間が変わってきます。
多少価格は上がりますが、間違いはないと思いますよ!
以上で、今回の記事は終わりです。
いかがだったでしょうか? 規格をまとめることで、条件に合わせた規格の選定がしやすくなったと思います。
少しでもお役に立てたのであれば幸せです。