Er is een reeks patches gepubliceerd die de bouw van de Linux-kernel met 50-80% versnellen

Ingo Molnar, een bekende Linux-kernelontwikkelaar en auteur van de CFS-taakplanner (Completely Fair Scheduler), stelde ter discussie op de mailinglijst voor Linux-kernelontwikkelaars een reeks patches voor die meer dan de helft van alle bestanden in de kernelbronnen en -bronnen beïnvloeden. zorgen voor een verhoging van de snelheid van een volledige herbouw van de kernel met 50-80%, afhankelijk van de instellingen. De geïmplementeerde optimalisatie is opmerkelijk omdat deze verband houdt met de toevoeging van de grootste reeks veranderingen in de geschiedenis van de kernelontwikkeling - er werden 2297 patches voorgesteld voor opname in één keer, waarbij meer dan 25 bestanden werden gewijzigd (10 headerbestanden in de "include /” en “arch/*/include/” mappen "en 15 duizend bestanden met bronteksten).

De prestatiewinst wordt bereikt door de methode voor het verwerken van headerbestanden te wijzigen. Opgemerkt wordt dat gedurende dertig jaar kernelontwikkeling de toestand van de headerbestanden een deprimerend uiterlijk heeft gekregen vanwege de aanwezigheid van een groot aantal onderlinge afhankelijkheden tussen bestanden. De herstructurering van het headerbestand duurde meer dan een jaar en vereiste een aanzienlijke aanpassing van de hiërarchie en afhankelijkheden. Tijdens de herstructurering werd gewerkt aan het scheiden van typedefinities en API's voor verschillende kernelsubsystemen.

Tot de aangebrachte wijzigingen behoren onder meer het scheiden van headerbestanden op hoog niveau van elkaar, het elimineren van inline-functies die headerbestanden koppelen, het scheiden van headerbestanden voor typen en API's, het zorgen voor een afzonderlijke samenstelling van headerbestanden (ongeveer 80 bestanden hadden indirecte afhankelijkheden die de montage hinderden, blootgelegd via andere headerbestanden), automatische toevoeging van afhankelijkheden aan “.h”- en “.c”-bestanden, stapsgewijze optimalisatie van headerbestanden, gebruik van de “CONFIG_KALLSYMS_FAST=y”-modus, selectieve consolidatie van C-bestanden in assemblageblokken om verminder het aantal objectbestanden.

Als gevolg hiervan maakte het verrichte werk het mogelijk om de grootte van headerbestanden die in de post-voorverwerkingsfase werden verwerkt, met 1-2 ordes van grootte te verminderen. Vóór de optimalisatie resulteerde het gebruik van het headerbestand “linux/gfp.h” bijvoorbeeld in de toevoeging van 13543 regels code en de opname van 303 afhankelijke headerbestanden, en na optimalisatie werd de grootte teruggebracht tot 181 regels en 26 afhankelijke bestanden. Of nog een voorbeeld: bij het voorbewerken van het bestand “kernel/pid.c” zonder patch worden 94 duizend regels code meegeleverd, waarvan het grootste deel niet wordt gebruikt in pid.c. Door de headerbestanden te scheiden, werd het mogelijk de hoeveelheid verwerkte code met drie keer te verminderen, waardoor het aantal verwerkte regels werd teruggebracht tot 36 duizend.

Toen de kernel volledig opnieuw werd opgebouwd met het commando “make -j96 vmlinux” op een testsysteem, liet de toepassing van patches een vermindering zien in de bouwtijd van de v5.16-rc7 branch van 231.34 naar 129.97 seconden (van 15.5 naar 27.7 builds per uur), en verhoogde ook de efficiëntie van het gebruik van CPU-kernen tijdens assemblages. Met een incrementele build is het effect van de optimalisatie zelfs nog merkbaarder: de tijd om de kernel opnieuw te bouwen na het aanbrengen van wijzigingen in de headerbestanden is aanzienlijk afgenomen (van 112% naar 173%, afhankelijk van het headerbestand dat wordt gewijzigd). Optimalisaties zijn momenteel alleen beschikbaar voor ARM64-, MIPS-, Sparc- en x86-architecturen (32- en 64-bit).

Bron: opennet.ru

Voeg een reactie