Nedávné verze Podman, Buildah a CRI-O začaly využívat výhod nové funkce jádra, volatilních překryvných připojení. Tato funkce vám umožňuje připojit překryvný souborový systém s příznakem, který mu říká, že se nemá synchronizovat s diskem.
Pokud potřebujete připomenout použití a výhody překryvných držáků, podívejte se na můj článek z minulého léta.
Co je synchronizace a proč je důležitá?
V Linuxu, když zapisujete do souboru nebo adresáře, jádro okamžitě nezapíše data na disk. Místo toho ukládá do vyrovnávací paměti spoustu zápisů a poté pravidelně ukládá data na disk, aby se zvýšil výkon. Tomu se říká synchronizace . Problém je v tom, že proces myslí data byla uložena po dokončení zápisu, ale ve skutečnosti to není, dokud jádro tato data nesynchronizuje. To znamená, že pokud jste zapsali data a jádro se zhroutilo, existuje šance, že data nebyla nikdy uložena.
Z tohoto důvodu se mnoho souborových systémů pravidelně synchronizuje a nástroje mohou vyžadovat, aby synchronizace probíhala často. Když dojde k synchronizaci, jádro přestane zpracovávat data se zámkem a synchronizuje všechna data na disk. To samozřejmě způsobuje horší výkon. Pokud máte proces, který způsobuje časté synchronizace, může být výkon vaší práce skutečně narušen. Některé nástroje, jako je RPM, vyžadují synchronizaci po zapsání každého souboru na disk, což způsobí vyprázdnění všech nečistých stránek daného souboru, což je značná režie.
[ Začínáte s kontejnery? Podívejte se na tento bezplatný kurz. Nasazení kontejnerových aplikací:technický přehled. ]
Kontejnery možná nevyžadují synchronizaci
Ve světě kontejnerů máme mnoho případů použití, kdy nám nezáleží na tom, zda jsou data uložena. Pokud by se jádro zhroutilo, zapsaná data bychom stejně nepoužili.
Když děláte buildah bud
nebo podman build
, je obraz kontejneru zapsán do překryvného přípojného bodu, často pomocí DNF nebo YUM. Pokud by se jádro zhroutilo uprostřed vytváření obrázku, byl by obsah zapsaný do překryvné vrstvy k ničemu a musí jej uživatel vyčistit. Cokoli, co se nepodařilo zapsat, bude smazáno. Po dokončení sestavení se však překryvná vrstva roztrhá na svazek obrázků, který lze poté synchronizovat s diskem.
Dalším případem použití nestálých překryvných připojení je spuštění Podman s --rm
vlajka. --rm
flag říká Podmanovi, aby zničil kontejner a překryvný bod připojení, když kontejner dokončí. Zhroucení kontejneru by zanechalo obsah, o kterém uživatel již uvedl, že pro něj nemá využití, takže není důvod se starat o to, zda byl zápis úspěšný.
Ve světě Kubernetes je CRI-O kontejnerový engine. Kubernetes je téměř vždy nastaven tak, aby při spouštění odstranil všechny kontejnery. V podstatě to chce začít s čistým stavem. To znamená, že pokud jádro zkolabuje během zapisování dat do překryvného připojení, tato data budou zničena, jakmile se systém zavede. Je také bezpečné používat takové konfigurace se stavovými kontejnery, protože data se obvykle zapisují na externí svazky, které nebudou za běhu ovlivněny příznakem „volatile“.
Přidání nestálé možnosti
Kontejnerový týmový inženýr Giuseppe Scrivano si všiml těchto případů použití a myslel si, že bychom mohli zlepšit výkon přidáním nestálé možnosti do překryvného souborového systému linuxového jádra a implementovali toto chování. Výsledkem je, že novější verze Buildah, Podman a CRI-O budou v těchto případech použití jako výchozí používat volatilní příznak a doufejme, že dosáhnou lepšího výkonu.
Pamatujte, že všechny svazky připojené do kontejneru budou mít i nadále výchozí synchronizační chování typických souborových systémů, takže se nemusíte obávat ztráty dat zapsaných do trvalého úložiště.
Níže uvedený graf ukazuje, jak se snižuje počet IOPS zápisu v kontejneru, který běží yum install -y texlive
na stroji s 16 GB RAM. Kromě toho, když kontejner běží se zapnutým nestálým příznakem, je ovlivněn také čas jeho nástěnných hodin a končí rychleji.
Nečisté stránky budou nakonec zapsány do úložiště, jakmile vyprší časový limit špinavého poměru nebo inodu, protože tato nastavení nejsou ovlivněna příznakem nestálého připojení.
Sbalit
Díky technologii kontejnerů neustále posouváme hranice toho, co systém Linux zvládne, a experimentujeme s novými případy použití. Přidání nestálé možnosti do překryvného souborového systému jádra pomáhá zvýšit výkon a umožňuje kontejnerům pokračovat ve vývoji a poskytovat větší výhody.
[ Zdarma ke stažení:cheat sheet pro pokročilé příkazy Linuxu. ]