注目キーワード

【おすすめ】ラズパイ、Jetsonに最適なmicroSDカードの選び方

すけろく
Raspberry PiやJetsonのシングルボードコンピュータを使っていると
必要になるmicroSDカード。
何を買えばよいのやら。。。
げんろく
microSDカードには意外といろんな規格があるんだよな。
しかも安価なものは信頼性が低かったりするし。
すけろく
価格で選んで、結果動かなかったり、動作が遅かったりする。
悩みどころだな。
げんろく
ここいらで、一度microSDカードの規格をおさらいして、
どれが良いのか考えてみるか。
スマホやデジタルカメラを使っているとたまに出てくるmicroSDカード。
Raspberry PiやJetsonなどのシングルボードコンピュータでは、OSの起動用としてmicroSD規格のカードが必要となります。
適当に買ってしまうと「起動が遅い」、「インストールが遅い」、「適切にデータが保存できない」、なんてことが起こります。性能の高い(価格も高い)ものを買っても、少し下のグレードと性能が変わらないといったことが起きます。
ことのほか規格やクラスがいっぱいあって、「わかりづらいよな~」という方が多いと思います。
そこで今回の記事では、microSDの規格についてまとめ、その後、Raspberry PiとJetsonからみて最適なものは何かを考察します。
この記事は、2021年6月時点のSD Associationが公開している情報をもとに、独自の意見を付加しています。
まず、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スピードクラスでみましょう。

(ちなみに、カメラなどはビデオスピードクラスを気にしたほうが良いです。)

出展:https://www.sdcard.org/ja/developers-2/sd-standard-overview/speed-class

バスインターフェースの転送モード

次にデータ転送に使うバスの性能によって分けられているものがあります。

現在では、ほぼ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量)という単位で定義されたクラスです。

出典:https://www.sdcard.org/ja/developers-2/sd-standard-overview/application-performance-class/

そもそもmicroSDのしくみはどうなっているの?

ぶっちゃけ、すべて最高クラスのカードを買えばOKじゃないのか?

残念ながら、そうとは言い切れないのが現実です。

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を買おうか

Raspberry PiやJetsonでmicroSDを使用する場合、OSを起動するストレージとして使用しますので、OSが動いている間は頻繁にmicroSDに読み書きが発生します。SDカードは最大書き込み回数が決められているので、基本的に消耗品と考えるのがよいでしょう。
Raspberry PiやJetsonどちらでも使えるものとするとおススメは次のものがあります。
安定して使えるのは、やはりSanDiskのものです。私も書き込み性能がよいExtremeを使っています。多少価格は高くなりますが、遅いmicroSDにインストールしてかなり時間がかかった経験から書き込み重視で買っています。
他社のものもありますが、私は安心重視でメーカーを選定しています。

おすすめのMicroSDカード

microSDHC UHS-Ⅰ A1(32GB)

created by Rinker
SanDisk
¥984 (2024/04/20 08:29:20時点 Amazon調べ-詳細)
microSDXC UHS-Ⅰ A1 (32GB以上)
created by Rinker
SanDisk
¥1,307 (2024/04/20 08:29:22時点 Amazon調べ-詳細)
げんろく
基本書き込み性能が高いほうのmicroSDカードをおススメします。
OSにいろいろインストールする際の時間が変わってきます。
多少価格は上がりますが、間違いはないと思いますよ!

 

以上で、今回の記事は終わりです。

いかがだったでしょうか? 規格をまとめることで、条件に合わせた規格の選定がしやすくなったと思います。

少しでもお役に立てたのであれば幸せです。