Inkrementelles Android-FS

Wie ein virtuelles Dateisystem in Android viel schnellere Spielstarts ermöglicht

Inkrementelles Dateisystem von Google

Google hat an einem neuen Dateisystem gearbeitet, das die Ausführung von Binärdateien ermöglicht, bevor ein komplettes Bundle geladen wurde. Am Beispiel der Entwicklung von Android-Apps müssen Sie derzeit warten, bis die gesamte Binärdatei zum Debuggen entweder an den Emulator oder Ihr echtes Testgerät übertragen wurde. Das inkrementelle Dateisystem verkürzt diese Verzögerung drastisch, indem es die Ausführung der Binärdatei ermöglicht, bevor das gesamte Paket übertragen wurde. Das klingt immens komplex, und das ist es auch, aber wir können es uns trotzdem ansehen, um besser zu verstehen, was wahrscheinlich eine Standardfunktion in Android 12 und höher sein wird.

Ein virtuelles Dateisystem namens „incfs“

Die virtuelle Dateisystemlösung von Google, die in ihrer ersten Iteration ausschließlich für APKs und AABs verwendet wird, die aus dem Play Store geladen werden, ist eine Schicht, die auf dem realen Dateisystem sitzt. Um die Architektur besser zu veranschaulichen, verwende ich einige Folien, die Google für einen technischen Vortrag erstellt hat. Den Link finden Sie im Anhang am Ende dieser Seite.

Image ee3856bcadf8

Image 8372e503efa4

Um auf das Thema zurückzukommen, kann man sich das inkrementelle Dateisystem von Google als Cache vorstellen, in dem die erstellten Entitäten direkt auf Dateien im realen Dateisystem verweisen. Der Code selbst ist als Kernel-Modul tief in das Betriebssystem eingebaut – was aufgrund seiner Low-Level-Platzierung in der Gesamtarchitektur logisch erscheint.

Vorteil eines virtuellen Dateisystems

Der Vorteil eines solchen virtuellen FS besteht darin, dass man nicht an die Grenzen eines realen Dateisystems gebunden ist, wo das Lesen und anschließende Ausführen eines Programms meist nur dann erfolgen kann, wenn das komplette Bundle verfügbar ist – vom ersten bis zum letzten Byte. Mit dem „Incremental Filesystem“ wird diese Einschränkung technisch aufgehoben. Doch mit einer so leistungsstarken Funktion sind viele komplexe Aspekte zu berücksichtigen.

Aus der Sicht eines Google-Ingenieurs ist die richtige Handhabung von Schreibvorgängen eine große Herausforderung. Das virtuelle Dateisystem hat seinen eigenen Status bezüglich ausstehender Lesevorgänge, muss aber dennoch die Datenintegrität der geladenen Dateien aufrechterhalten.

Image b66896f09bca

Die Herausforderung wird durch die Erstellung eines benutzerdefinierten Index in den „incfs“ angegangen. Jede reale Datei korreliert direkt mit einer Entität im virtuellen Dateisystem, selbst wenn die Originaldatei umbenannt wird.

Image f14b7aa11bdd

Eine weitere Abkürzung namens „ioctl“

Diese Abkürzung steht für „Input/Output Control“ und führt zur Erstellung einer solchen Index-Datei im Incremental File System von Google. „ioctl“ kommt vom Betriebssystem und seine technische Erklärung ist für diesen Artikel nicht relevant. Wenn Sie mehr lesen möchten, finden Sie auch einen Link im Anhang.

Auch recht interessant: „incfs“ hat einen eingebauten Logging-Mechanismus. Diese Funktion wird verwendet, um die reale Leistung ihrer Implementierung für weitere Verbesserungen zu bestimmen.

Praktische Anwendung

Der Start dieser Funktion war im Mai 2019, als einige der Google-Ingenieure begannen, Änderungen am Linux-Kernel vorzunehmen. Die Platzierung dort ermöglichte es ihnen, es einfach im Android Open Source Project (AOSP) zu verwenden, dem Open-Source-Teil von Android und der Hauptgrundlage dieses Betriebssystems, da AOSP ebenfalls auf dem Linux-Kernel basiert.

Linux-Mitwirkende waren nicht so glücklich, da ähnliche Ansätze zur Verbesserung eines Dateisystems bereits gemacht wurden, wie FUSE oder OverlayFS. Aus Sicht von Google waren diese Implementierungen auf Low-End-Android-Geräten jedoch nicht annähernd leistungsfähig genug. Dies führte zur Entwicklung des Inkrementellen Dateisystems.

In der ersten Iteration wird es für Spiele verwendet, die ab Android 12 aus dem Play Store heruntergeladen wurden, um die Zeit zum tatsächlichen Start des Spiels zu verkürzen. Diese wirklich großartige Funktion setzt das inkrementelle Dateisystem voraus, aber auch eine in Android integrierte Logik, um zu bestimmen, wie diese Spiele tatsächlich frühzeitig gestartet werden - ohne Änderungen durch den Entwickler, so Google.