GNU/Linux >> Znalost Linux >  >> Linux

Rychlejší spouštění Linuxu

Ze všech počítačů, které jsem kdy vlastnil nebo používal, byl ten, který se spouštěl nejrychleji, z 80. let; ve chvíli, kdy se vaše ruka přesunula z vypínače na klávesnici, byl překladač BASIC připraven na vaše příkazy. Moderním počítačům trvá spuštění malého domácího serveru od 15 sekund u notebooku až po minuty. Proč je takový rozdíl v dobách spouštění?

Mikropočítač z 80. let 20. století, který nabootoval přímo do příkazového řádku BASIC, měl velmi jednoduchý CPU, který začal načítat a provádět instrukce z adresy paměti okamžitě po zapnutí napájení. Vzhledem k tomu, že tyto systémy měly BASIC v ROM, nebyl čas načítání – k výzvě BASIC jste se dostali opravdu rychle. Složitější systémy té samé éry, jako IBM PC nebo Macintosh, zabíraly značnou dobu, než se zavedly (~30 sekund), i když to bylo většinou kvůli nutnosti číst operační systém (OS) z diskety. Firmware strávil pouze několik sekund, než bylo možné načíst OS.

Moderní servery obvykle tráví ve firmwaru minuty, spíše než sekundy, než se dostanou k bodu zavedení operačního systému z disku. To je z velké části způsobeno zvýšenou složitostí moderních systémů. CPU už nemůže jen tak přijít a začít vykonávat instrukce plnou rychlostí; zvykli jsme si na škálování frekvence CPU, klidové stavy, které šetří spoustu energie, a více jader CPU. Ve skutečnosti je uvnitř moderních CPU překvapivé množství jednodušších CPU, které pomáhají spouštět hlavní jádra CPU a poskytují runtime služby, jako je omezení frekvence, když se příliš zahřeje. Na většině architektur CPU je kód běžící na těchto jádrech uvnitř vašeho CPU poskytován jako neprůhledné binární bloby.

V systémech OpenPOWER je každá instrukce provedená na každém jádru uvnitř CPU softwarem s otevřeným zdrojovým kódem. Na strojích s OpenBMC (jako je systém AC922 od IBM a systémy TALOS II a Blackbird od Raptoru) se to vztahuje i na kód běžící na Baseboard Management Controller. To znamená, že můžeme získat obrovské množství informací o tom, co trvá tak dlouho od chvíle, kdy zapojíte napájecí kabel, do doby, kdy se zobrazí známá výzva k přihlášení.

Pokud jste součástí týmu, který pracuje na linuxovém jádře, pravděpodobně bootujete hodně jader. Pokud jste součástí týmu, který pracuje na firmwaru, pravděpodobně zavedete spoustu různých bitových kopií firmwaru, po nichž bude následovat operační systém, aby bylo zajištěno, že váš firmware stále funguje. Pokud dokážeme zkrátit dobu spouštění hardwaru, mohou být tyto týmy produktivnější a koncoví uživatelé mohou být vděční, když nastavují systémy nebo restartují kvůli instalaci firmwaru nebo aktualizací OS.

Programování a vývoj

  • Blog vývojářů Red Hat
  • Programování cheatů
  • Vyzkoušejte zdarma:Předplatné Red Hat Learning
  • eKniha:Úvod do programování s Bash
  • Bash Shell Scripting Cheat Sheet
  • Elektronická kniha:Modernizace podnikové Java

V průběhu let bylo provedeno mnoho vylepšení doby spouštění linuxových distribucí. Moderní init systémy dobře zvládají dělat věci souběžně a na vyžádání. Jakmile se na moderním systému spustí jádro, může trvat několik sekund, než se dostanete k výzvě k přihlášení. Tato hrstka sekund není místem pro optimalizaci doby spouštění; musíme jít dříve:než se dostaneme k OS.

Na systémech OpenPOWER firmware načte OS zavedením linuxového jádra uloženého ve firmwarovém flash čipu, který spouští program v uživatelském prostoru zvaný Petitboot, aby našel disk, který obsahuje OS, který chce uživatel zavést, a na něj kexec(). Toto opětovné použití kódu využívá úsilí vynaložené na rychlejší spouštění Linuxu. I tak jsme v konfiguraci jádra a uživatelském prostoru našli místa, kde bychom se mohli zlepšit a snadno zkrátit dobu spouštění o sekundy. Díky těmto optimalizacím představuje spouštění prostředí Petitboot jednociferné procento doby spouštění, takže jsme museli najít další vylepšení jinde.

Než se spustí prostředí Petitboot, existuje předchozí část firmwaru zvaná Skiboot a před tím je zde Hostboot. Před Hostbootem je Self-Boot Engine, samostatné jádro na kostce, které získává jedno jádro CPU a provádí instrukce z mezipaměti úrovně 3. Tyto komponenty jsou místem, kde můžeme dosáhnout největšího pokroku při zkrácení doby spouštění, protože zabírají drtivou většinu času. Možná některé z těchto komponent nejsou dostatečně optimalizovány nebo nedělají tolik paralelně, jak by mohly?

Další cestou útoku je doba restartu spíše než doba bootování. Při restartu opravdu je třeba znovu inicializovat vše hardware?

Jako každý moderní systém byla řešení pro zlepšení doby spouštění (a restartu) směsí dělat více souběžně, zabývat se staršími verzemi a (pravděpodobně) podvádět.

Stewart Smith představí Booting rychleji na linux.conf.au, 21.–25. ledna v Christchurch na Novém Zélandu.


Linux
  1. Linux – deaktivace služeb Vbox pro zkrácení doby spouštění?

  2. Stavy procesu Linuxu

  3. Jak předat hodnotu vestavěnému modulu jádra Linuxu při spouštění?

  1. Příklady příkazů času Linux

  2. Proces spouštění Linuxu

  3. Příklady příkazů timedatectl v Linuxu

  1. Příklady příkazů uptime v Linuxu

  2. Mohu zavést Linux z VHD?

  3. Proč se pro linux doporučuje 100MB spouštěcí oddíl ext2?