Představujeme JetStream Benchmark Suite

Dnes představujeme nový WebKit JavaScript benchmark test suite, JetStream. JetStream kodifikuje to, co náš de facto proces byl-kombinovat latence a propustnost benchmarků se zhruba stejnou váhou, a zachytit jak metriky tradičních stylů programování JavaScript, stejně jako nové technologie založené na JavaScriptu, které zachytily naše představy. Skóre na JetStream jsou dobrým ukazatelem výkonu, který by uživatelé viděli v pokročilých webových aplikacích, jako jsou hry.

Optimalizace výkonu našeho JavaScriptu je pro projekt WebKit vysokou prioritou. Mezi příklady některých vylepšení, která jsme představili v loňském roce, patří souběžná kompilace, generační GC, a FTL JIT. Inženýrství takových vylepšení vyžaduje zaměření: snažíme se upřednostňovat projekty s velkým dopadem před budováním a udržováním komplexních optimalizací, které mají menší výhody. Motivujeme tedy výkonovou práci pomocí benchmarků, které ilustrují druhy pracovních zátěží, se kterými se uživatelé WebKitu pravděpodobně setkají. Tato filozofie vývoje založeného na benchmarku je již dlouho součástí WebKitu.

předchozí stav benchmarkingu JavaScriptu

když jsme vylepšili JavaScript engine WebKit, zjistili jsme, že žádná sada benchmarků není zcela reprezentativní pro scénáře, které jsme chtěli zlepšit. Líbí se nám, že JSBench měří výkon kódu JavaScript na populárních webech, ale WebKit již v tomto benchmarku dělá velmi dobře. SunSpider se nám líbí pro pokrytí běžně používaných jazykových konstrukcí a pro skutečnost, že jeho doba běhu je reprezentativní pro dobu běhu kódu na webu, ale pro měření špičkové propustnosti nedosahuje. Líbí se nám Oktan, ale příliš se zkresluje opačným směrem: je to užitečné pro určení špičkové propustnosti našeho motoru, ale není dostatečně citlivé na výkon, který byste s největší pravděpodobností viděli na typických pracovních zátěžích na webu. Rovněž bagatelizuje nové technologie JavaScript, jako je asm.js; pouze jeden z oktanových měřítek 15 byl asm.test js a tento test ignoruje výkon s plovoucí desetinnou čárkou.

nalezení dobrého asm.JS benchmarky je obtížné. Přestože Emscripten získává mindshare, jeho testy jsou dlouhodobé a donedávna postrádaly webový postroj. Tak jsme postavili vlastní asm.JS benchmarky pomocí testů z testovací sady LLVM. Tyto testy C A C++ používají vývojáři LLVM ke sledování zlepšení výkonu kompilátoru Clang / LLVM. Emscripten sám používá LLVM ke generování kódu JavaScript. Díky tomu je testovací sada LLVM zvláště vhodná pro testování toho, jak dobře JavaScript engine zpracovává nativní kód. Další výhodou našich nových testů je, že jsou mnohem rychlejší než testovací sada Emscripten.

díky dobrým měřítkům JavaScriptu můžeme s jistotou usilovat o ambiciózní vylepšení WebKitu. Například SunSpider vedl naši souběžnou kompilační práci, zatímco asm.testy js a testy propustnosti oktanu motivovaly naši práci na JIT FTL. Ale umožnit, aby naše testování bylo založeno na hodgepodge těchto různých srovnávacích sad, se stalo nepraktickým. Je těžké říct přispěvatelům, co by měli testovat, pokud neexistuje jednotná testovací sada, která by jim mohla říci, zda jejich změna měla požadovaný vliv na výkon. Chceme jednu testovací sadu, která může na konci hlásit jedno skóre, a chceme, aby toto skóre reprezentovalo budoucí směr WebKitu.

navrhování nové sady JetStream Benchmark

různé komponenty WebKit vyžadují různé přístupy k měření výkonu. Například pro výkon DOM jsme právě představili měřítko rychloměru. V některých případech, zřejmý přístup funguje docela dobře: mnoho optimalizací rozvržení a Vykreslování lze například řídit měřením doby načítání stránky na reprezentativních webových stránkách. Měření výkonu implementace programovacího jazyka však vyžaduje více jemnosti. Chceme zvýšit citlivost benchmarků na vylepšení jádra motoru, ale ne tolik, abychom ztratili pohled na to, jak se tato vylepšení motoru odehrávají na skutečných webových stránkách. Chceme minimalizovat možnosti, jak systémový šum zahodit naše měření, ale kdykoli je pracovní zátěž ze své podstaty náchylná k hluku, chceme, aby to ukázal benchmark. Chceme, aby naše měřítka představovala vysoce věrnou aproximaci pracovních zátěží, o které se uživatelé WebKitu pravděpodobně budou starat.

JetStream kombinuje různé javascriptové benchmarky, které pokrývají řadu pokročilých pracovních zátěží a programovacích technik a hlásí jediné skóre, které je vyvažuje pomocí geometrického průměru. Každý test se provádí třikrát a skóre se hlásí s 95% intervaly spolehlivosti. Každý benchmark měří zřetelnou pracovní zátěž a žádná jediná optimalizační technika nestačí k urychlení všech benchmarků. Některá měřítka ukazují kompromisy a agresivní nebo specializovaná optimalizace pro jeden benchmark může zpomalit další benchmark. Demonstrace kompromisů je pro naši práci zásadní. Jak bylo uvedeno v mém předchozím příspěvku o našem novém kompilátoru JIT, WebKit se snaží dynamicky přizpůsobit pracovní zátěži pomocí různých úrovní provádění. Ale to nikdy není dokonalé. Například, zatímco náš nový kompilátor FTL JIT nám dává fantastické zrychlení při testech špičkové propustnosti, v některých testech ramp-up způsobuje mírné regrese. Nové optimalizace pro pokročilé jazykové Runtime často narazí na takové kompromisy, a naším cílem JetStream je mít měřítko, které nás informuje o kompromisech, které děláme.

JetStream obsahuje měřítka od SunSpider 1.0.2 a Octane 2 JavaScript benchmark suites. Obsahuje také benchmarky z projektu LLVM compiler open source, zkompilovaného do JavaScriptu pomocí Emscripten 1.13. Obsahuje také benchmark založený na Hashmapu open source projektu Apache Harmony, ručně přeložený do JavaScriptu. Více informací o benchmarcích obsažených v JetStream je k dispozici na stránce JetStream in Depth.

jsme nadšeni, že představujeme tento nový benchmark. Chcete-li jej spustit, jednoduše navštivte browserbench.org/JetStream. můžete soubor chyby proti benchmarku pomocí systému pro správu chyb WebKit v rámci nástroje / Testy komponenty.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.