Hlavní navigace

Chrome už nebude žrout paměti, sníží spotřebu o desítky procent

Petr Krčmář

Chrome (Chromium) je nejrozšířenějším prohlížečem současnosti, je o něm ovšem známo, že je to velký žrout paměti. Prosincové vydání ale přijde s řadou optimalizací snižujících spotřebu.

Prohlížeč Chrome dnes podle naměřených statistik na webech najdeme na každém druhém počítači. Jeho nejbližší soupeř Internet Explorer má poloviční zastoupení. Přes všechny přednosti má Chrome dlouhodobě velký problém s konzumací paměti a řada uživatelů jej proto nemá rádo.


NetMarketShare

Zastoupení prohlížečů září 2016

Vývojáři se nyní podívali spotřebě paměti na zoubek a připravovaná verze 55 by měla být výrazně úspornější. Podle plánů se jí dočkáme v prosinci, ale už nyní je možné ji vyzkoušet v rámci vývojářských kanálů. Optimalizace se týkají zejména javascriptového jádra V8. V průběhu několika posledních měsíců tým V8 analyzoval a významně snížil spotřebu paměti u několika stránek reprezentujících současný moderní webový vývoj, píše se na vývojářském blogu.

Mnoho testování

V případě takových optimalizací je zásadní intenzivní testování, při kterém jsou odhaleny konkrétní problémy. Vývojáři přitom používají nástroj Telemetry, který dovoluje provádět reprodukovatelné simulace práce s JavaScriptem – simuluje interakci uživatele s daným webem a zaznamenává veškeré chování serveru i prohlížeče.

V praxi se testování zpravodajských webů provádí tak, že se stránka načte, automat klikne na první odkaz, počká na kompletní načtení a vrátí se zpět. Pak klikne na další odkaz a celou tuto činnost několikrát zopakuje. V případě webu s multimediálním obsahem se spustí video, několik sekund se nechá běžet a poté automat vybere další položku ke sledování. Tato činnost se také několikrát opakuje.

Takto vytvořené benchmarky je pak možné v testovacím prostředí průběžně během vývoje opakovat a sledovat tak dopad optimalizací na různé verze prohlížeče. Vývojářský tým své testy zveřejnil, takže je může kdokoliv zopakovat.

Vývojáři do nových verzí Chrome přidali možnost velmi podrobného sledování javascriptového jádra. Prohlížeč spuštěný s parametrem --trace-gc-object-stats vypisuje do konzole podrobnosti o alokaci paměti pro jednotlivé datové struktury. Ty je pak možné vizualizovat speciálním nástrojem. Výsledek vypadá přibližně takto:

Datové struktury na haldě

Na základě alokace paměti je pak možné se vrátit do kódu a zjistit, zda se jednotlivé struktury chovají podle očekávání nebo existuje možnost optimalizace. Použili jsme tento nástroj k odhalení nízké efektivity v mnoha datových typech, píší vývojáři.

Zmenšení haldy pro JavaScript

Existuje přímá vazba mezi intenzitou použití garbage collectoru, latencí a spotřebou paměti. Využití garbage collectoru může být například sníženo tak, že aplikace dostane více paměti – není pak potřeba tak často uklízet a uživatel nepozoruje prodlevy. V případě zařízení s malým množstvím paměti (třeba levné telefony s 512 MB RAM) by ale přílišná roztahovačnost vedla k zásahu out-of-memory killeru a shazování nenasytné aplikace.

Vývojáři proto nasadili heuristiku, která se dynamicky rozhoduje, jakou strategii při použití garbage collectoru zvolí. Po ukončení úklidu se provede statistika živých objektů a podle ní se prostředí rozhodne, na kdy naplánuje další úklid. Pokud se rozhodne pamětí šetřit, začne plánovat běh collectoru častěji.

Následující graf ukazuje, jak tento postup sníží využití paměti na zařízeních s malým množstvím paměti. Průměr se pohybuje okolo 50 %, ale například v případě serveru New York Times se množství alokované paměti snížilo o 66 %.

Využití paměti v Chrome 53 a 55

Další optimalizace se týká snížení velikosti stránky na javascriptové haldě na polovinu. Místo 1MB stránek se tak v novějších verzích používají 512KB. To umožňuje menší fragmentaci, snižuje to využití paměti a dovoluje to více využívat paralelizaci nad menšími kousky paměti.

Správa paměti pro VM

Javascriptové jádro V8 také kromě haldy využívá další paměť pro interní operace s VM. Tato paměť je alokovaná v takzvaných zónách, které dovolují velmi rychlou alokaci a vyprázdnění, jakmile je zóna zase zrušena. Toho se využívá nejčastěji při parsování a kompilaci skriptů.

Ke zpracování skriptů přitom dochází v pozadí už při načítání stránky. Vývojáři pomocí vizualizace paměti zjistili, že tento proces nechává naalokovanou zónu i po skončení kompilace. Bylo přijato nové opatření, které způsobí, že je zóna zrušena okamžitě po dokončení práce kompilátoru. To vede k celkově nižší spotřebě paměti a hlavně menším špičkám.

Zároveň vývojáři zjistili, že kompilátor C++, kterým je Chrome sestavován, ne vždy dobře optimalizuje rozložení polí v paměti. Když jsou například v paměti umístěny dvě proměnné typu boolean, měly by obsadit sousední bity v jednom slově nebo využít volné bity v už používané paměti. Kompilátor se ale ne vždy chová správně, proto se vývojáři rozhodli tuto optimalizaci provádět sami. Výsledkem je opět snížení množství zbytečně alokované paměti, ale také vyšší výkon parseru a kompilátoru javascriptu.

Na následujícím grafu je vidět, jak klesla spotřeba paměti prohlížeče po úpravách správy paměti ve VM.

Využití paměti v Chrome 54 a 55

Vývojáři slibují, že v této oblasti neskončili a plánují další optimalizace týkající se zón. Zaměří se při tom na zařízení, která mají mezi 512 MB a 1 GB paměti.

Dočkáme se v prosinci

Zmíněné optimalizace jsou nyní součástí vývojářského sestavení a postupně se dostanou k uživatelům. V tuto chvíli je aktuální verze 53, přibližně za týden nás čeká vydání verze 54 a podle plánu bychom se stabilního vydání 55 se zmíněnými optimalizacemi měli dočkat 6. prosince.

Našli jste v článku chybu?

11. 10. 2016 15:02

Ale ano, vždycky se dá optimalizovat.
Každý program lze zkrátit o jednu instrukci.
Každý program obsahuje alespoň jednu chybu.
Matematickou indukcí pak dojdeme k tomu, že každý program zle zkrátit na jednu instrukci, která je špatně.




11. 10. 2016 14:11

Moc příjemný nakouknout pod pokličku. Vyvolává to dojem, že vždycky se dá optimalizovat. Za mě palec hore.

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Vitalia.cz: 7 druhů hotových těst na vánoční cukroví

7 druhů hotových těst na vánoční cukroví

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy