Sistema de archivos incremental de Google
Google ha estado trabajando en un nuevo tipo de sistema de archivos que permite la ejecución de binarios antes de que se haya cargado un paquete completo. Tomando el desarrollo de aplicaciones de Android como ejemplo, actualmente debe esperar a que todo el binario se transmita al emulador o al dispositivo de prueba real para su depuración. El sistema de archivos incremental acorta drásticamente este retraso al permitir la ejecución del binario antes de que se haya transmitido todo el paquete. Esto suena inmensamente complejo, y eso es lo que es, pero aún podemos echarle un vistazo para comprender mejor lo que probablemente será una función predeterminada en Android 12 y versiones posteriores.
Un sistema de archivos virtual llamado "incfs"
La solución de sistema de archivos virtual de Google, que en su primera iteración se utilizará exclusivamente para los APK y AAB cargados desde Play Store, es una capa que se ubica en la parte superior del sistema de archivos real. Para ilustrar mejor la arquitectura, estoy usando algunas diapositivas que Google creó para una charla técnica. Puede encontrar el enlace en el apéndice al final de esta página.
Volviendo al tema, el Sistema de archivos incremental de Google se puede considerar como una caché, donde las entidades creadas hacen referencia directamente a los archivos en el sistema de archivos real. El código en sí está profundamente integrado en el sistema operativo como un módulo del kernel, lo que parece lógico debido a su ubicación de bajo nivel en la arquitectura general.
Ventaja de un sistema de archivos virtual
La ventaja de un FS virtual de este tipo es que no está atado a los límites de un sistema de archivos real, donde la lectura y posterior ejecución de un programa generalmente solo puede ocurrir si el paquete completo está disponible, desde el primer hasta el último Byte. Con el "Sistema de archivos incremental", esta limitación se borra técnicamente. Sin embargo, con una característica tan poderosa viene un gran conjunto de aspectos complejos a considerar.
Tomándolo de un ingeniero de Google, un gran desafío es el manejo correcto de las operaciones de escritura. El sistema de archivos virtual tiene su propio estado con respecto a las lecturas pendientes, pero aún debe mantener la integridad de los datos de los archivos cargados.
El desafío se aborda creando un índice personalizado en el "incfs". Cada archivo real se correlaciona directamente con una entidad en el sistema de archivos virtual, incluso cuando se cambia el nombre del archivo original.
Una abreviatura más llamada "ioctl"
Esta abreviatura significa "control de entrada / salida" y conduce a la creación de un archivo de índice de este tipo en el sistema de archivos incremental de Google. “Ioctl” proviene del sistema operativo y su explicación técnica está fuera del alcance de este artículo. Si desea leer más, también hay un enlace en el apéndice.
También es bastante interesante: "incfs" tiene un mecanismo de registro incorporado. Esta función se utilizará para determinar el rendimiento en el mundo real de su implementación para futuras mejoras.
Uso practico
El inicio de esta función fue en mayo de 2019, cuando algunos de los ingenieros de Google comenzaron a realizar cambios en el kernel de Linux. Colocarlo allí les permitió simplemente usarlo en el Proyecto de código abierto de Android (AOSP), la parte de código abierto de Android y la base principal de este sistema operativo, ya que AOSP también se basa en el Kernel de Linux.
Los colaboradores de Linux no estaban tan contentos, ya que ya se habían hecho enfoques similares para mejorar un sistema de archivos, como FUSE o OverlayFS. Sin embargo, desde la perspectiva de Google, esas implementaciones no tuvieron el rendimiento suficiente en los dispositivos Android de gama baja. Esto llevó al desarrollo del Sistema de archivos incremental.
Para la primera iteración, se utilizará para juegos descargados de Play Store a partir de Android 12 para acortar el tiempo que lleva iniciar el juego. Esta gran característica presupone el Sistema de archivos incremental, pero también cierta lógica incorporada en Android para determinar cómo iniciar esos juegos en forma temprana, sin ningún cambio por parte del desarrollador, según Google.