V části Nepřetržité testování integrace pro linuxové jádro , Psal jsem o projektu Continuous Kernel Integration (CKI) a jeho poslání změnit způsob práce vývojářů a správců jádra. Tento článek je hlubokým ponorem do některých techničtějších aspektů projektu a do toho, jak do sebe všechny části zapadají.
Všechno začíná změnou
Každá vzrušující funkce, vylepšení a chyba v jádře začíná změnou navrženou vývojářem. Tyto změny se objevují na nesčetných e-mailových konferencích pro různá úložiště jádra. Některá úložiště se zaměřují na určité subsystémy v jádře, jako je úložiště nebo síťování, zatímco jiná se zaměřují na široké aspekty jádra. Projekt CKI začne fungovat, když vývojáři navrhnou změnu nebo sadu patchů v jádře nebo když správce provede změny v samotném repozitáři.
Projekt CKI udržuje spouštěče, které monitorují tyto sady patchů a provádějí akci. Softwarové projekty, jako je Patchwork, usnadňují tento proces tím, že shromažďují příspěvky z více oprav do jediné série oprav. Tato série prochází jako celek systémem CKI a umožňuje publikování jediné zprávy o sérii.
Ostatní spouštěče sledují změny v úložišti. K tomu dochází, když správci jádra spojují sady oprav, vracejí opravy nebo vytvářejí nové značky. Testování těchto kritických změn zajišťuje, že vývojáři budou mít vždy pevný základ, který mohou použít jako základ pro psaní nových oprav.
Všechny tyto změny se dostávají do potrubí GitLab a procházejí několika fázemi a více systémy.
Připravte sestavení
Vše začíná přípravou zdroje na kompilaci. To vyžaduje klonování úložiště, použití sady patchů navržené vývojářem a vygenerování konfiguračního souboru jádra. Tyto konfigurační soubory mají tisíce možností, které zapínají nebo vypínají funkce, a konfigurační soubory se neuvěřitelně liší mezi různými architekturami systému. Například poměrně standardní systém x86_64 může mít ve svém konfiguračním souboru k dispozici spoustu možností, ale systém s390x (sálové počítače IBM zSeries) má pravděpodobně mnohem méně možností. Některé možnosti mohou dávat smysl na tomto sálovém počítači, ale na spotřebitelském notebooku nemají žádný význam.
Jádro se posune vpřed a přemění se ve zdrojový artefakt. Artefakt obsahuje celý repozitář s aplikovanými záplatami a všechny konfigurační soubory jádra potřebné pro kompilaci. Upstream jádra postupují jako tarball, zatímco jádra Red Hat se stávají zdrojovým RPM pro další krok.
Hromadné kompilace
Kompilace jádra změní zdrojový kód na něco, co může počítač spustit a použít. Konfigurační soubor popisuje, co se má sestavit, skripty v jádře popisují, jak to sestavit, a nástroje v systému (jako GCC a glibc) sestavují. Dokončení tohoto procesu chvíli trvá, ale projekt CKI jej potřebuje udělat rychle pro čtyři architektury:aarch64 (64bitový ARM), ppc64le (POWER), s390x (IBM zSeries) a x86_64. Je důležité, abychom jádra kompilovali rychle, abychom udrželi naše nevyřízené položky zvládnutelné a vývojáři dostávali rychlou zpětnou vazbu.
Přidání dalších procesorů poskytuje spoustu vylepšení rychlosti, ale každý systém má své limity. Projekt CKI kompiluje jádra v kontejnerech v nasazení OpenShift; ačkoli OpenShift umožňuje spoustu škálovatelnosti, nasazení má stále k dispozici konečný počet CPU. Tým CKI alokuje 20 virtuálních CPU pro kompilaci každého jádra. Se čtyřmi zapojenými architekturami je to 80 CPU!
Další zvýšení rychlosti pochází z nástroje zvaného ccache. Vývoj jádra jde rychle, ale velké množství jádra zůstává nezměněno i mezi více vydáními. Nástroj ccache ukládá vytvořené objekty (malé části celkového jádra) během kompilace na disk. Když se později objeví další kompilace jádra, ccache hledá nezměněné části jádra, které viděl předtím. Ccache stáhne objekt uložený v mezipaměti z disku a znovu jej použije. To umožňuje rychlejší kompilace a nižší celkové využití CPU. Jádra, jejichž kompilace trvala 20 minut, nyní dojíždějí do cíle za méně než několik minut.
Doba testování
Další zdroje pro Linux
- Cheat pro příkazy Linuxu
- Cheat sheet pro pokročilé příkazy systému Linux
- Bezplatný online kurz:Technický přehled RHEL
- Síťový cheat pro Linux
- Cheat sheet SELinux
- Cheat pro běžné příkazy pro Linux
- Co jsou kontejnery systému Linux?
- Naše nejnovější články o Linuxu
Jádro přechází ke svému poslednímu kroku:testování na skutečném hardwaru. Každé jádro nabootuje na své nativní architektuře pomocí Beaker a nesčetné testy do něj začnou šťourat, aby našly problémy. Některé testy hledají jednoduché problémy, jako jsou problémy s kontejnery nebo chybové zprávy při spouštění. Jiné testy se ponoří hluboko do různých subsystémů jádra, aby nalezly regrese v systémových voláních, alokaci paměti a vláknech.
Velké testovací rámce, jako je Linux Test Project (LTP), obsahují tuny testů, které hledají problematické regrese v jádře. Některé z těchto regresí by mohly vrátit zpět kritické bezpečnostní opravy a existují testy, které zajistí, že tato vylepšení zůstanou v jádře.
Po dokončení testů zbývá jeden kritický krok:hlášení. Vývojáři a správci jádra potřebují stručnou zprávu, která jim přesně řekne, co fungovalo, co nefungovalo a jak získat další informace. Každá sestava CKI obsahuje podrobnosti o použitém zdrojovém kódu, parametrech kompilace a testovacím výstupu. Tyto informace pomáhají vývojářům vědět, kde začít hledat řešení problému. Také to pomáhá správcům vědět, kdy je potřeba sadu patchů pozdržet pro další kontrolu, než se chyba dostane do jejich jaderného úložiště.
Přehled
Projektový tým CKI se snaží zabránit pronikání chyb do linuxového jádra poskytováním včasné a automatické zpětné vazby vývojářům a správcům jádra. Tato práce jim usnadňuje práci tím, že nalézá nízko visící ovoce, které vede k chybám jádra, bezpečnostním problémům a problémům s výkonem.
Chcete-li se dozvědět více, můžete se zúčastnit CKI Hackfestu 12. až 13. září po konferenci Linux Plumbers Conference 9.–11. září v Lisabonu v Portugalsku.