Android Automotive でのフラッシュ消耗の管理

Android Automotive の内部ストレージでは、数千の消去/書き込みサイクルを伴う Embedded MultiMediaCard(eMMC)が使用されます。eMMC で障害が発生した場合、システムが使用不能になる可能性があります。車両の寿命は長い(通常 10 年以上)ため、eMMC の信頼性は非常に高くなければなりません。このページでは、eMMC の動作と、OEM が eMMC の失敗リスクを低減させる(および Android Automotive システムでの障害を回避する)方法について説明します。

eMMC の動作

eMMC デバイスは、消耗均一化を使用してデータの配置や書き込みをシステム全体に均等に分散させることで、データの消去や書き込みの制限を回避します(そのため、大量の書き込みが原因で 1 つのブロックが失敗することはありません)。eMMC の推定寿命は次の条件によって異なります。

  • 書き込み量。スマートフォンでは、内部ストレージに書き込まれるデータの量は 1 日あたり 10 GB を超える場合があります。Automotive の実装では、一部のアプリケーションについては、書き込まれるデータの量に関する実際のデータがありません。ただし、ユーザーが高音質の音楽をストリーミングしていて、ナビゲーションを使用している場合は、1 分あたり 50 MB のデータが eMMC に書き込まれていることがわかっています。将来的には、動画を継続的に録画して保存するダッシュボード カメラ アプリケーションなど、書き込み中心の別のアプリもリリースされる可能性があります。また、車両の中には、毎日数時間使用される共有車両もあります。このような理由から、Android Automotive の実装では、スマートフォンよりも eMMC の書き込みが多くなると予想されます。
  • 書き込みパターン。書き込みと消去はブロック単位で行われます。小さなチャンクで頻繁にデータを書き込むと、同じ量のデータを低頻度で大きなチャンクで書き込む場合より、eMMC の消耗が速くなります。
  • eMMC で利用可能なサイズ。ストレージ サイズが大きいと、消耗均一化アルゴリズムは書き込みを多数のブロックに分散する場合があります。
  • 消耗均一化手法。
  • 環境的な要因。たとえば、通常の動作温度は -20~85 ℃ ですが、これ以外の温度では eMMC の寿命が短くなる可能性があります。

16 GB の空き領域と 3 kb の消去/書き込みサイクルがある eMMC の場合、次のように推定されます。

1 日あたりの書き込み 16 GB 32 GB
推定寿命 10 年 5 年

ただし、使用可能なストレージ サイズが小さくなるため、eMMc が完全に消耗するよりもかなり早く、システムは正常に動作しなくなります。また、使用する均一化手法や書き込みパターンによっては、eMMc の寿命はさらに短くなる場合があります。また、この推定値は、不正な動作や悪意のあるアプリの影響も考慮されません。これらのアプリは、特別な権限がなくてもジャンクデータの大きなブロックを eMMC に書き込むことにより Automotive システムに攻撃を行います。

eMMC の失敗の可能性を失敗が発生する前に検出するには、システム全体の健全性モニタリングの一環として、適切なストレージの健全性モニタリングを組み込む必要があります。

実装

Android O は、OEM が Android Automotive の内部ストレージを保護およびモニタリングし、寿命を延ばせるようにする機能をサポートしています。

サードパーティ アプリの制限

Android Automotive システムの内部ストレージを保護するため、Android O では OEM がサードパーティ製アプリを内部ストレージにインストールできるかどうかを設定できます(アプリはインストール先のパーティションでしか書き込みができません)。設定するには、リソース オーバーレイで次のように設定します。

<bool name="config_allow3rdPartyAppOnInternal">false</bool>

フラッシュの消耗の抑制

内部ストレージのフラッシュの消耗を懸念している OEM は、適用ストレージとして使用できる速度を備えた SD カードを追加できます。SD カードの動作は次のとおりです。

  • 適用されると、SD カードは暗号化され、アプリデータの保存を安全に行うことができます。
  • SD カードスロットは安全な場所に配置する必要があります(ユーザーが SD カードを何度も取り外すことは想定されていません)。
  • Automotive システムとパソコンの間のデータ転送に SD カードを使用することはできません。
  • SD カードを取り出しても、実行中のシステムには影響しません。ただし、交換の必要がある場合以外は取り外さないでください。

セカンド パーティ製アプリ(自動車アプリ デベロッパーによって作成されたアプリ)を SD カードにインストールすることが自動車で必要な場合にこのインストールを実行できるようにするには、自動車アプリ デベロッパーがアプリのマニフェスト ファイルに android:installLocation=["auto" | "preferExternal"] を含める必要があります。

自動車でサードパーティ製アプリを内部ストレージにインストールすることが許可されていない場合(サードパーティ製アプリの制限を参照)、このフラグがなければ(または、installLocation=internalOnly が設定されていれば)アプリのインストールは失敗します。

storaged を使用したディスク指標の取得

Android O には「storaged」が導入されています。これは新しいシステム サービスで、ディスクと eMMc の指標(ディスク全体の使用状況、eMMc の推定寿命、アプリケーションごとのディスク I/O 統計の情報など)をサンプリングして公開します。OEM は、内部ストレージに障害が発生したときや、特定のアプリケーションが実行しているディスク I/O の数が多すぎるときに、この情報を使用して警告を表示できます。詳細については、storaged の実装をご覧ください。

検証

この機能は PackageManager テストでテストされています。