AndroidインクリメンタルFS
Androidの仮想ファイルシステムがゲームの開始を大幅に高速化する方法
Googleによるインクリメンタルファイルシステム
Googleは、完全なバンドルがロードされる前にバイナリを実行できる新しい種類のファイルシステムに取り組んでいます。 Androidアプリの開発を例にとると、現在、バイナリ全体がエミュレーターまたは実際のテストデバイスに送信されてデバッグされるのを待つ必要があります。インクリメンタルファイルシステムは、パッケージ全体が送信される前にバイナリを実行できるようにすることで、この遅延を劇的に短縮します。これは非常に複雑に聞こえますが、それが何であるかを確認することで、Android12以降のデフォルト機能になる可能性が最も高いものをよりよく理解できます。
「incfs」と呼ばれる仮想ファイルシステム
Googleの仮想ファイルシステムソリューションは、最初の反復でPlayストアから読み込まれたAPKとAABにのみ使用され、実際のファイルシステムの上にあるレイヤーです。アーキテクチャをわかりやすく説明するために、Googleがテクニカルトーク用に作成したスライドをいくつか使用しています。このページの最後にある補遺にリンクがあります。
トピックに戻ると、Googleのインクリメンタルファイルシステムは、作成されたエンティティが実際のファイルシステム内のファイルを直接参照するキャッシュと考えることができます。コード自体は、カーネルモジュールとしてオペレーティングシステムに深く組み込まれています。これは、アーキテクチャ全体での低レベルの配置のため、論理的であるように思われます。
仮想ファイルシステムの利点
このような仮想FSの利点は、実際のファイルシステムの制限に縛られないことです。通常、プログラムの読み取りとその後の実行は、最初から最後のバイトまでの完全なバンドルが利用可能な場合にのみ発生します。 「インクリメンタルファイルシステム」を使用すると、この制限は技術的に解消されます。しかし、このような強力な機能には、考慮すべき複雑な側面が多数含まれています。
グーグルのエンジニアからそれを取ると、大きな課題は書き込み操作の正しい処理です。仮想ファイルシステムには、保留中の読み取りに関して独自の状態がありますが、ロードされたファイルのデータ整合性を維持する必要があります。
この課題は、「incfs」にカスタムインデックスを作成することで解決されます。元のファイルの名前が変更された場合でも、各実ファイルは仮想ファイルシステム内のエンティティに直接関連付けられます。
「ioctl」と呼ばれるもう1つの略語
この略語は「入出力制御」の略で、Googleのインクリメンタルファイルシステムにそのようなインデックスファイルを作成することにつながります。 「ioctl」はオペレーティングシステムに由来するものであり、その技術的な説明はこの記事の範囲外です。詳細をお読みになりたい場合は、補遺にもリンクがあります。
また、非常に興味深いものです。「incfs」には組み込みのロギングメカニズムがあります。この機能は、さらなる拡張のために、その実装の実際のパフォーマンスを決定するために使用されます。
実用的な使い方
この機能の開始は、Googleのエンジニアの一部がLinuxカーネルへの変更をコミットし始めた2019年5月でした。 AOSPはLinuxカーネル上にも構築されているため、そこに配置することで、Androidのオープンソース部分であり、このオペレーティングシステムの主要な基盤であるAndroid Open Source Project(AOSP)で簡単に使用できるようになりました。
FUSEやOverlayFSなど、ファイルシステムを強化するための同様のアプローチがすでに行われているため、Linuxの貢献者はそれほど満足していませんでした。しかし、Googleの観点からは、これらの実装はローエンドのAndroidデバイスでは十分なパフォーマンスを発揮していませんでした。これは、インクリメンタルファイルシステムの開発につながりました。
最初の反復では、Android 12以降のPlayストアからダウンロードされたゲームに使用され、実際にゲームを起動するのにかかる時間を短縮します。この本当に素晴らしい機能は、インクリメンタルファイルシステムを前提としていますが、Androidに組み込まれているロジックによって、開発者が変更を加えることなく、これらのゲームを早期に実際に開始する方法を決定します。
行動
Feedback
提案された投稿