Se ha publicado un conjunto de parches que aceleran la compilación del núcleo de Linux entre un 50 y un 80%.

Ingo Molnar, conocido desarrollador del núcleo de Linux y autor del planificador de tareas CFS (Completely Fair Scheduler), ha propuesto para discusión en la lista de correo de desarrolladores del núcleo de Linux una serie de parches que afectan a más de la mitad de todos los archivos en el código fuente del núcleo, y que garantizan un aumento de la velocidad de recompilación completa del núcleo entre un 50 y un 80%, dependiendo de la configuración. La optimización implementada es notable por el hecho de que implica la inclusión del mayor conjunto de cambios en la historia del desarrollo del núcleo: se proponen 2297 parches que cambian más de 25,000 archivos (10,000 archivos de encabezado en los directorios 'include/' y 'arch/*/include/' y 15,000 archivos de código fuente).

El aumento del rendimiento se logra mediante la modificación del método de manejo de archivos de encabezado. Se observa que, tras treinta años de desarrollo del núcleo, el estado de los archivos de encabezado ha alcanzado un punto crítico debido a la existencia de numerosas dependencias cruzadas entre archivos. El trabajo de reestructuración de los archivos de encabezado tomó más de un año y requirió una revisión significativa de la jerarquía y las dependencias. Durante el proceso de reestructuración, se realizó un trabajo para separar las definiciones de tipos y API para diferentes subsistemas del núcleo.

Entre los cambios realizados se incluyen: la separación de los archivos de encabezado de alto nivel entre sí, la exclusión de las funciones inline que enlazan archivos de encabezado, la separación de archivos de encabezado para tipos y API, la posibilidad de compilación independiente de archivos de encabezado (aproximadamente 80 archivos tenían dependencias indirectas que interferían en la compilación, establecidas a través de otros archivos de encabezado), la adición automática de dependencias a los archivos '.h' y '.c', la optimización gradual de los archivos de encabezado, el uso del modo 'CONFIG_KALLSYMS_FAST=y', y la consolidación selectiva de archivos C en bloques de compilación para reducir el número de archivos objeto.

Como resultado, el trabajo realizado permitió reducir en 1-2 órdenes de magnitud el tamaño de los archivos de encabezado procesados en la etapa de post-preprocesamiento. Por ejemplo, antes de la optimización, el uso del archivo de encabezado "linux/gfp.h" añadía 13543 líneas de código y 303 archivos de encabezado dependientes, mientras que después de la optimización, el tamaño se redujo a 181 líneas y 26 archivos dependientes. Otro ejemplo: al preprocesar el archivo "kernel/pid.c" sin el parche, se conectaban 94000 líneas de código, la mayor parte de las cuales no se utilizaban en pid.c. La separación de los archivos de encabezado permitió reducir el volumen de código procesado en tres veces, reduciendo el número de líneas procesadas a 36000.

Al realizar una recompilación completa del núcleo con el comando "make -j96 vmlinux" en el sistema de prueba, la aplicación de parches mostró una reducción del tiempo de compilación de la ramas v5.16-rc7 de 231.34 a 129.97 segundos (de 15.5 a 27.7 compilaciones por hora), además de mejorar la eficiencia en el uso de núcleos de CPU durante la compilación. En la compilación incremental, el efecto de la optimización es aún más notable: el tiempo de recompilación del núcleo tras realizar cambios en los archivos de encabezado se redujo drásticamente (del 112% al 173% dependiendo del archivo de encabezado modificado). Las optimizaciones actualmente están disponibles solo para arquitecturas ARM64, MIPS, Sparc y x86 (32 y 64 bits).

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster