Publicouse un conxunto de parches que aceleran a construción do núcleo de Linux nun 50-80%

Ingo Molnar, un coñecido desenvolvedor do núcleo de Linux e autor do programador de tarefas CFS (Completely Fair Scheduler), propuxo para o debate sobre a lista de correo do programador do núcleo Linux unha serie de parches que afectan a máis da metade de todos os ficheiros das fontes do núcleo. proporcionar un aumento na velocidade dunha reconstrución completa do núcleo nun 50-80% dependendo da configuración. A optimización implementada é salientable porque está asociada coa adición do maior conxunto de cambios na historia do desenvolvemento do núcleo: propuxéronse 2297 parches á vez, cambiando máis de 25 mil ficheiros (10 mil ficheiros de cabeceira no "incluír /” e “arch/*/include/” directorios “e 15 mil ficheiros con textos fonte).

A ganancia de rendemento conséguese cambiando o método de procesamento dos ficheiros de cabeceira. Nótase que ao longo de trinta anos de desenvolvemento do núcleo, o estado dos ficheiros de cabeceira adquiriu un aspecto deprimente debido á presenza dunha gran cantidade de dependencias cruzadas entre ficheiros. A reestruturación do ficheiro de cabeceira levou máis dun ano e requiriu unha importante reelaboración da xerarquía e dependencias. Durante a reestruturación, traballouse para separar definicións de tipos e API para diferentes subsistemas do núcleo.

Entre os cambios realizados: separación de ficheiros de cabeceira de alto nivel entre si, eliminación de funcións en liña que vinculan ficheiros de cabeceira, separación de ficheiros de cabeceira para tipos e API, garantía de montaxe separada de ficheiros de cabeceira (uns 80 ficheiros tiñan dependencias indirectas que interferían coa montaxe, expostas mediante outros ficheiros de cabeceira), adición automática de dependencias a ficheiros ".h" e ".c", optimización paso a paso dos ficheiros de cabeceira, uso do modo "CONFIG_KALLSYMS_FAST=y", consolidación selectiva de ficheiros C en bloques de ensamblaxe para reducir o número de ficheiros obxecto.

Como resultado, o traballo realizado permitiu reducir en 1-2 ordes de magnitude o tamaño dos ficheiros de cabeceira procesados ​​na fase de post-preprocesamento. Por exemplo, antes da optimización, o uso do ficheiro de cabeceira "linux/gfp.h" resultou na adición de 13543 liñas de código e na inclusión de 303 ficheiros de cabeceira dependentes, e despois da optimización o tamaño reduciuse a 181 liñas e 26 ficheiros dependentes. Ou outro exemplo: ao preprocesar o ficheiro “kernel/pid.c” sen parche, inclúense 94 mil liñas de código, a maioría das cales non se usan en pid.c. A separación dos ficheiros de cabeceira permitiu reducir a cantidade de código procesado por tres veces, reducindo o número de liñas procesadas a 36 mil.

Cando o núcleo foi completamente reconstruído co comando "make -j96 vmlinux" nun sistema de proba, a aplicación de parches mostrou unha redución no tempo de compilación da rama v5.16-rc7 de 231.34 a 129.97 segundos (de 15.5 a 27.7 compilacións). por hora), e tamén aumentou a eficiencia do uso de núcleos de CPU durante as montaxes. Cunha compilación incremental, o efecto da optimización é aínda máis perceptible: o tempo para reconstruír o núcleo despois de facer cambios nos ficheiros de cabeceira diminuíu significativamente (do 112 % ao 173 % dependendo do ficheiro de cabeceira que se cambie). Actualmente, as optimizacións só están dispoñibles para arquitecturas ARM64, MIPS, Sparc e x86 (32 e 64 bits).

Fonte: opennet.ru

Engadir un comentario