Fast Kernel Headers, joukko korjaustiedostoja, jotka nopeuttavat ytimen kääntämistä 50-80 %

Ingo Molnar, tunnettu Linux-ytimen kehittäjä ja CFS Task Scheduler -ohjelman kirjoittaja ehdotettiin Linux-ytimen kehittämisen postituslistakeskustelulle useita korjaustiedostoja, jotka vaikuttavat yli puoleen kaikista ytimen lähteen tiedostoista ja tarjoavat ytimen kokonaisuudelleenrakennusnopeuden 50-80% kokoonpanosta riippuen.

Optimointi toteutettu on huomattava, koska se liittyy suurimman muutosjoukon lisäämiseen ytimen kehityksen historiassa: he pyrkivät sisällyttämään 2297 korjaustiedostoa kerralla, muuttaen yli 25 tuhatta tiedostoa.

Suorituskyvyn lisäys saavutetaan muuttamalla otsikkotiedoston käsittelytapaa. On huomattava, että kolmenkymmenen vuoden ytimen kehityksen aikana otsikkotiedostojen tila on saanut synkän muodon tiedostojen välisten suuren määrän ristiriippuvuuksien vuoksi.

Otsikkotiedostojen uudelleenjärjestely kesti yli vuoden ja vaati hierarkian ja riippuvuuksien merkittävää uudelleensuunnittelua. Uudelleenjärjestelyn aikana eri ytimen alijärjestelmien tyyppimääritykset ja API:t erotettiin toisistaan.

Minulla on ilo ilmoittaa ensimmäisestä julkisesta versiosta uudesta "Fast Kernel Headers" -projektistani, jonka parissa olen työstänyt vuoden 2020 lopusta lähtien. Se on Linux-ytimen otsikkohierarkian ja otsikkoriippuvuuksien kattava uudistus, jolla on kaksi tavoitetta:

- nopeuttaa ytimen rakentamista (sekä absoluuttiset että inkrementaaliset rakennusajat)

- alijärjestelmän ja määritelmien API:n tyypin irrottaminen toisistaan

Kuten useimmat ytimen kehittäjät tietävät, Linux-ytimessä on noin 10,000 30 .h-pääotsikkoa include / and arch / * / include / -hierarkioissa. Yli XNUMX viime vuoden aikana niistä on kehittynyt monimutkainen ja tuskallinen ristiriippuvuussarja, jota kutsumme hellästi "riippuvuushelveksi".

Tehtyjä muutoksia ovat mm. korkean tason otsikkotiedostojen erottaminen toisistaan, Otsikkotiedostoja linkittävien sisäisten toimintojen poissulkeminen, otsikkotiedostojen kartoitus tyypeille ja API:ille, erillisen otsikkotiedostojoukon tarjoaminen (noin 80 tiedostossa oli epäsuoria riippuvuuksia, jotka häiritsevät kokoamista, paljastettiin muiden tiedostojen otsikkotiedostojen kautta), riippuvuuksien automaattinen lisääminen ".h"- ja ".c"-tiedostot, otsikkotiedostojen vaiheittainen optimointi, "CONFIG_KALLSYMS_FAST = y" -tilan käyttö, C-tiedostojen selektiivinen yhdistäminen kokoonpanolohkoihin objektitiedostojen määrän vähentämiseksi.

Tämän seurauksena tehty työ mahdollisti käsiteltyjen otsikkotiedostojen koon pienentämisenesikäsittelyvaiheessa 1-2 suuruusluokkaa.

  • Esimerkiksi ennen optimointia otsikkotiedoston "linux / gfp.h" käyttö johti 13543 303 koodirivin lisäämiseen ja 181 riippuvan otsikkotiedoston sisällyttämiseen, ja optimoinnin jälkeen kokoa pienennettiin 26 riviin ja XNUMX riippuvaan tiedostoon.
  • Toinen esimerkki: korjaamattoman "kernel / pid.c" -tiedoston esikäsittely yhdistää 94 tuhatta koodiriviä, joista suurinta osaa ei käytetä pid.c:ssä. Otsikkotiedostojen jakaminen antoi meille mahdollisuuden vähentää käsitellyn koodin määrää kolme kertaa, jolloin käsiteltyjen rivien määrä väheni 36 XNUMX:een.

Kun ydin rakennettiin kokonaan uudelleen komennolla "make -j96 vmlinux" testijärjestelmässä, korjaus osoitti v5.16-rc7-haaran käännösajan lyhenemisen 231,34:stä 129,97 sekuntiin 15,5 sekuntia (27,7:stä XNUMX:ään koontiversiota kohti). tunti) ja lisäsi myös suorittimen ytimen käytön tehokkuutta rakentamisen aikana.

Inkrementaalisella käännöksellä optimointivaikutus on vieläkin huomattavampi: ytimen uudelleen rakentamiseen kuluva aika otsikkotiedostoihin tehtyjen muutosten jälkeen on lyhentynyt merkittävästi (112 %:sta 173 %:iin, riippuen muutettavasta otsikkotiedostosta).

Optimoinnit ovat tällä hetkellä saatavilla vain ARM64-, MIPS-, Sparc- ja x86 (32-bittinen ja 64-bittinen) arkkitehtuureille.

Hienoksi jos olet kiinnostunut tietämään siitä lisää, voit tarkistaa yksityiskohdat seuraava linkki.


Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.