bemutatjuk a Jetstream Benchmark Suite

Ma bemutatjuk az új WebKit JavaScript Benchmark test suite, JetStream. A JetStream kodifikálja a de facto folyamatunkat — kombinálja a késleltetési és átviteli referenciaértékeket nagyjából azonos súlyozással, és rögzíti a hagyományos JavaScript programozási stílusok mindkét mutatóját, valamint az új JavaScript-alapú technológiákat, amelyek megragadták képzeletünket. A Jetstream pontszáma jó mutatója annak a teljesítménynek, amelyet a felhasználók látnának a fejlett webes alkalmazásokban, például a játékokban.

a JavaScript motor teljesítményének optimalizálása kiemelt fontosságú a WebKit projekt számára. Az elmúlt évben bevezetett néhány fejlesztés példái közé tartozik a concurrent compilation, a generational GC és az FTL JIT. Az ilyen fejlesztések megtervezése fókuszt igényel: igyekszünk a nagy hatású projekteket előtérbe helyezni a kisebb előnyökkel járó komplex optimalizálások építésével és fenntartásával szemben. Így a teljesítménymunkát olyan referenciaértékekkel motiváljuk, amelyek szemléltetik azokat a munkaterheléseket, amelyekkel a WebKit-felhasználók valószínűleg találkoznak. A benchmark-vezérelt fejlesztés ezen filozófiája már régóta része a WebKit-nek.

a JavaScript Benchmarking korábbi állapota

a WebKit JavaScript motor fejlesztései során azt tapasztaltuk, hogy egyetlen benchmark csomag sem volt teljesen reprezentatív a javítani kívánt forgatókönyvekre. Tetszik, hogy a JSBench méri a JavaScript kód teljesítményét a népszerű webhelyeken, de a WebKit már nagyon jól teljesít ezen a referenciaértéken. Szeretjük a SunSpider-t az általánosan használt nyelvi konstrukciók lefedettségéért és azért, mert a futási ideje reprezentálja a webes kód futási idejét, de nem éri el a csúcsteljesítmény mérését. Szeretjük az Oktánt, de túl messzire torzul a másik irányba: hasznos a motor csúcsteljesítményének meghatározásához, de nem elég érzékeny arra a teljesítményre, amelyet a tipikus webes terheléseknél valószínűleg látni fog. Azt is downplays új JavaScript technológiák, mint asm.js; az Octane 15 referenciaértéke közül csak az egyik volt asm.js teszt, és ez a teszt figyelmen kívül hagyja a lebegőpontos teljesítményt.

jó asm megtalálása.a JS referenciaértékek nehézek. Annak ellenére, hogy az Emscripten mindshare-t szerez, tesztjei régóta futnak, és egészen a közelmúltig nem volt webes kábelköteg. Így saját asm-et építettünk.js referenciaértékek segítségével tesztek a LLVM test suite. Ezeket a C és C++ teszteket az LLVM fejlesztői használják a clang/LLVM fordítóprogram teljesítményének javítására. Emscripten maga használja LLVM generálni JavaScript kódot. Ezáltal az LLVM tesztcsomag különösen alkalmas annak tesztelésére, hogy a JavaScript motor mennyire kezeli a natív kódot. Az új tesztek másik előnye, hogy sokkal gyorsabban futnak, mint az Emscripten tesztcsomag.

a jó JavaScript referenciaértékek lehetővé teszik számunkra, hogy magabiztosan folytassuk a WebKit ambiciózus fejlesztéseit. Például a SunSpider irányította egyidejű fordítási munkánkat, míg az asm.a js tesztek és az Octane áteresztőképességi tesztjei motiválták a munkánkat az FTL JIT – en. De lehetővé téve, hogy tesztelésünk e különböző benchmark lakosztályok hodgepodge-ján alapuljon, praktikussá vált. Nehéz megmondani a közreműködőknek, hogy mit kell tesztelniük, ha nincs egységes tesztcsomag, amely meg tudja mondani nekik, hogy változtatásuk a kívánt hatást gyakorolta-e a teljesítményre. Egy tesztcsomagot akarunk, amely egy pontszámot jelenthet a végén, és azt akarjuk, hogy ez az egy pontszám reprezentálja a WebKit jövőbeli irányát.

az új JetStream Benchmark Suite tervezése

a különböző WebKit komponensek eltérő megközelítést igényelnek a teljesítmény mérésére. Például a DOM teljesítményéhez most vezettük be a sebességmérő referenciaértékét. Egyes esetekben, a nyilvánvaló megközelítés elég jól működik: például számos elrendezési és renderelési optimalizálás vezérelhető az oldal betöltési idejének mérésével a reprezentatív weboldalakon. De a programozási nyelv megvalósításának teljesítményének mérése több finomságot igényel. Szeretnénk növelni a referenciaértékek érzékenységét az alapvető motorfejlesztések iránt, de nem annyira, hogy elveszítsük a perspektívát arról, hogy ezek a motorfejlesztések hogyan játszódnak le a valódi webhelyeken. Szeretnénk minimalizálni a rendszerzaj lehetőségeit, hogy eldobják a méréseinket, de bármikor, amikor a munkaterhelés természeténél fogva hajlamos a zajra, azt akarjuk, hogy egy referenciaérték mutassa ezt. Azt akarjuk, hogy referenciaértékeink a WebKit-felhasználók számára valószínűleg fontos munkaterhelések nagy pontosságú közelítését képviseljék.

a JetStream számos JavaScript referenciaértéket egyesít, amelyek számos fejlett munkaterhelést és programozási technikát fednek le, és egyetlen pontszámot jelent, amely egy geometriai átlag segítségével kiegyensúlyozza őket. Minden tesztet háromszor futtatnak, és a pontszámokat 95% – os konfidencia intervallummal jelentik. Minden benchmark különböző munkaterhelést mér, és egyetlen optimalizálási technika sem elegendő az összes benchmark felgyorsításához. Egyes referenciaértékek kompromisszumokat mutatnak, és az egyik referenciaérték agresszív vagy speciális optimalizálása lelassíthatja a másik referenciaértéket. A kompromisszumok bemutatása elengedhetetlen a munkánkhoz. Amint azt az új JIT fordítónkról szóló korábbi bejegyzésemben tárgyaltam, a WebKit különböző végrehajtási szintek segítségével próbál dinamikusan alkalmazkodni a munkaterheléshez. De ez soha nem tökéletes. Például, míg az új FTL JIT fordítónk fantasztikus sebességet biztosít nekünk a csúcsteljesítmény-teszteken, enyhe regressziót okoz néhány felfutási tesztben. Az advanced language runtimes új optimalizálása gyakran ilyen kompromisszumokba ütközik, és a Jetstream célja, hogy olyan referenciaérték legyen, amely tájékoztat minket a kompromisszumokról.

a JetStream a SunSpider 1.0.2 és az Octane 2 JavaScript Benchmark csomag referenciaértékeit tartalmazza. Ez magában foglalja az LLVM fordító nyílt forráskódú projektjének referenciaértékeit is, amelyeket az Emscripten 1.13 használatával JavaScriptre fordítottak. Tartalmaz egy benchmarkot is, amely az Apache Harmony nyílt forráskódú projekt HashMap-Ján alapul, kézzel lefordítva JavaScript-re. A Jetstream-ben szereplő referenciaértékekről További információ a JetStream in Depth oldalon található.

izgatottan mutatjuk be ezt az új mércét. Futtatni, egyszerűen látogasson el browserbench.org/JetStream. a hibákat a benchmark ellen a WebKit hibakezelő rendszerével az eszközök/tesztek összetevő alatt lehet benyújtani.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.