- SourceFS es un sistema de archivos virtual de alto rendimiento diseñado para resolver los problemas de velocidad y eficiencia de compilación en grandes bases de código de dispositivos
- Mejora la velocidad de compilación de Android hasta 9 veces y la velocidad de checkout de código más de 10 veces, reduce el uso de disco en 83% y disminuye los costos de cómputo hasta 14 veces
- El principio clave es la virtualización de archivos y la materialización bajo demanda, una estructura donde los archivos parecen reales, pero su contenido solo se carga cuando hace falta
- Durante el proceso de compilación, la mayoría de las etapas pueden reproducirse de inmediato mediante caché basada en sandbox que registra y reutiliza la entrada/salida y el entorno
El problema de las compilaciones lentas y el checkout de código
- Los dispositivos conectados modernos funcionan con bases de código de cientos de millones de líneas
- El kernel de Linux tiene alrededor de 40 millones de líneas, Android AOSP supera los 140 millones, y los dispositivos reales añaden soporte de hardware, funciones personalizadas y código de servicios, superando las 200 millones de líneas
- Los vehículos eléctricos (EV) alcanzan más de 500 millones de líneas y siguen creciendo con las actualizaciones de software
- Al hacer checkout del código se descargan cientos de GB de datos, y la compilación pasa por cientos de miles de etapas
- Debido a la imperfección del grafo de dependencias, incluso cambios pequeños pueden provocar recompilaciones masivas o generar resultados incorrectos
- Como resultado, se producen pérdidas de varias horas diarias de tiempo de los desarrolladores y un aumento drástico de los costos de cómputo en CI
Source File System (SourceFS)
- SourceFS no es un sistema de compilación nuevo, sino un sistema de archivos virtual de alto rendimiento que puede integrarse con los flujos de trabajo existentes
- Mejora de forma drástica la velocidad de checkout y compilación de bases de código Android, con casi nula carga de migración
- El principio central es virtualizar todos los archivos, materializarlos solo cuando se necesiten y hacer que este proceso sea transparente
- Aceleración del checkout: crea una representación virtual de archivos de toda la base de código y solo carga el contenido cuando se accede a él
- Los archivos se ven como si fueran reales, pero la mayoría permanece en estado virtual, lo que ahorra espacio en disco
- Totalmente compatible con Git y Repo
- Aceleración de compilación: cada etapa de compilación se ejecuta en un sandbox ligero que registra la entrada/salida y el entorno
- Las etapas idénticas reutilizan resultados sin volver a ejecutarse, y solo se procesan de nuevo las etapas modificadas
- Se aplica no solo a la compilación, sino a todo el proceso de build, incluyendo linking, empaquetado y generación de documentación
- Internamente usa algoritmos de caché y replay de alto rendimiento, sandboxing eficiente y un backend basado en Rust
- Puede escalarse a toda la organización con un overhead casi nulo
Compilaciones más rápidas, almacenamiento más eficiente y reducción de costos
- En un entorno SourceFS, el checkout de código es más de 20 veces más rápido que antes
- Los desarrolladores pueden trabajar dentro de una carpeta de SourceFS manteniendo el mismo flujo de trabajo que en un árbol Git tradicional
- La reducción en uso de disco es una gran ventaja para desarrolladores de dispositivos que necesitan cambiar entre múltiples bases de código
- Incluso al cambiar entre varias versiones de dispositivos o al corregir bugs a gran escala, se puede trabajar con la ligereza de un repositorio pequeño de GitHub
- La velocidad de compilación mejora hasta 9 veces, permitiendo completar builds grandes rápidamente incluso en máquinas de desarrollo comunes
- Al acortar el ciclo de retroalimentación en pipelines de CI, se maximiza la productividad de desarrollo
- El ahorro de costos puede llegar hasta 14 veces
- Usar SourceFS en máquinas comunes resulta más rápido y más barato que usar máquinas de alto rendimiento
- Es posible hacer más trabajo con el mismo presupuesto de cómputo
Comparación con alternativas existentes
- SourceFS supera las limitaciones de los enfoques tradicionales
- La migración a nuevos sistemas de compilación como Bazel o Buck2 es poco realista en proyectos grandes, y en bases de código de dispositivos que incluyen múltiples sistemas operativos (por ejemplo, Yocto, Android, QNX) la complejidad se multiplica
- SourceFS ofrece las mismas mejoras de rendimiento sin necesidad de esa migración
- Los wrappers de compilador (REClient, Goma, etc.) solo aceleran algunas etapas del build y no ayudan con el checkout
- Además, dependen del análisis de flags de línea de comandos, por lo que existe la posibilidad de errores inesperados
Planes a futuro
2 comentarios
Parece que ya usan algo similar en Android.
Opiniones de Hacker News
Parece que parte del equipo son ex-Googlers, pero esto es distinto del srcfs basado en Piper que conocemos
Hay similitudes, pero casi no hay detalles, y también decepciona que la versión self-hosted tenga una política de precios tipo “Talk to us”
Y sobre el precio, si es un equipo que maneja una base de código de decenas de miles de millones de líneas, ¿de verdad no puede pagar un precio de tipo “TalkToUs”?
Incluso open source como Linux corre bien en mi laptop
Esto me recuerda al antiguo MVFS de ClearCase
Durante la compilación interceptaba llamadas como open(2), getenv(3) y registraba por completo qué herramienta usó qué versión de qué archivo y en qué entorno
Si las condiciones eran las mismas, reutilizaba el resultado existente con “winked-in”, y también permitía control de versiones a nivel de sistema de archivos
Por ejemplo, se podía acceder con algo como file.c@@/trunk/branch/subbranch/3
La cifra de tiempo del título se siente un poco exagerada
Me hace pensar si estarán intentando convertir en producto algo tipo EdenFS o alguna clase de git fuse
Dicen algo como “las etapas de compilación iguales a las anteriores se omiten automáticamente y se reutilizan sus resultados”, pero suena tan bien que cuesta creerlo
Honestamente, esto se siente como marketing de contenidos comercial. Casi no hay detalles técnicos
Por compartir algunos tips que me funcionaron cuando trabajaba como ingeniero de builds:
compilar en tmpfs, usar symlink/hardlink en vez de copiar archivos grandes, reducir I/O innecesario con libeatmydata,
y elegir bien el cross-compiler
Lo realmente importante es optimizar el sistema de compilación y hacer buena caché de artefactos intermedios que no cambian
Hola, soy Serban, cofundador de Source.dev
Gracias por los upvotes y la discusión. Para una startup en etapa temprana, este tipo de feedback realmente significa mucho
Me alegra ver que sienten que lo que estamos construyendo de verdad tiene valor
Me dio risa leer la frase “SourceFS acelera la compilación 9 veces”
Mientras más tarde una compilación, más tiempo hay para practicar esgrima, así que las compilaciones lentas también tienen su lado bueno
Sus afirmaciones de rendimiento están muy por delante de cualquier sistema distribuido de compilación de Android que yo haya usado
Me intriga cuál será la salsa secreta
Cuando una compilación llega al punto de ser “lo suficientemente rápida”, desaparece el incentivo de negocio para hacer el doloroso trabajo de entender la base de código
Ahora solo queda el camino hacia una base de código de mil millones de líneas
Por la explicación, suena como si estuviera orientado solo al código fuente de Android. Me pregunto por qué, y si puede aplicarse también a otras bases de código