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

Ingo Molnar, un conocido desarrollador del kernel de Linux y autor del programador de tareas CFS (Completely Fair Scheduler), propuso para discusión en la lista de correo de desarrolladores del kernel de Linux una serie de parches que afectan a más de la mitad de todos los archivos en las fuentes del kernel y Proporciona un aumento en la velocidad de una reconstrucción completa del kernel entre un 50% y un 80%, según la configuración. La optimización implementada es digna de mención porque está asociada con la adición del mayor conjunto de cambios en la historia del desarrollo del kernel: se propuso incluir 2297 parches a la vez, cambiando más de 25 mil archivos (10 mil archivos de encabezado en el campo "incluir /” y “arch/*/include/” directorios "y 15 mil archivos con textos fuente).

La ganancia de rendimiento se logra cambiando el método de procesamiento de archivos de encabezado. Cabe señalar que a lo largo de treinta años de desarrollo del kernel, el estado de los archivos de encabezado ha adquirido un aspecto deprimente debido a la presencia de una gran cantidad de dependencias cruzadas entre archivos. La reestructuración del archivo de encabezado tomó más de un año y requirió una reelaboración significativa de la jerarquía y las dependencias. Durante la reestructuración, se trabajó para separar las definiciones de tipos y las API para diferentes subsistemas del kernel.

Entre los cambios realizados: separar los archivos de encabezado de alto nivel entre sí, eliminar las funciones en línea que vinculan los archivos de encabezado, separar los archivos de encabezado por tipos y API, garantizar el ensamblaje por separado de los archivos de encabezado (alrededor de 80 archivos tenían dependencias indirectas que interferían con el ensamblaje, expuestos a través de otros archivos de encabezado), adición automática de dependencias a archivos “.h” y “.c”, optimización paso a paso de archivos de encabezado, uso del modo “CONFIG_KALLSYMS_FAST=y”, consolidación selectiva de archivos C en bloques de ensamblaje para reducir el número de archivos objeto.

Como resultado, el trabajo realizado permitió reducir el tamaño de los archivos de encabezado procesados ​​en la etapa de posprocesamiento en 1-2 órdenes de magnitud. Por ejemplo, antes de la optimización, el uso del archivo de encabezado “linux/gfp.h” daba como resultado la adición de 13543 líneas de código y la inclusión de 303 archivos de encabezado dependientes, y después de la optimización el tamaño se redujo a 181 líneas y 26 archivos dependientes. U otro ejemplo: al preprocesar el archivo “kernel/pid.c” sin parche, se incluyen 94 mil líneas de código, la mayoría de las cuales no se utilizan en pid.c. La separación de los archivos de encabezado hizo posible reducir tres veces la cantidad de código procesado, reduciendo el número de líneas procesadas a 36 mil.

Cuando el kernel fue completamente reconstruido con el comando “make -j96 vmlinux” en un sistema de prueba, la aplicación de parches mostró una reducción en el tiempo de compilación de la rama v5.16-rc7 de 231.34 a 129.97 segundos (de 15.5 a 27.7 compilaciones). por hora), y también aumentó la eficiencia del uso de núcleos de CPU durante los ensamblajes. Con una compilación incremental, el efecto de la optimización es aún más notable: el tiempo para reconstruir el kernel después de realizar cambios en los archivos de encabezado ha disminuido significativamente (del 112% al 173% dependiendo del archivo de encabezado que se cambie). Actualmente, las optimizaciones solo están disponibles para arquitecturas ARM64, MIPS, Sparc y x86 (32 y 64 bits).

Fuente: opennet.ru

Añadir un comentario