introductie van de JetStream Benchmark Suite

vandaag introduceren we een nieuwe WebKit JavaScript benchmark test suite, JetStream. JetStream codificeert wat ons de facto proces is geweest – om latency en doorvoerbenchmarks te combineren met ongeveer gelijke weging, en het vastleggen van zowel metrics van traditionele Javascript-programmeerstijlen als nieuwe JavaScript-gebaseerde technologieën die onze verbeelding hebben vastgelegd. Scores op JetStream zijn een goede indicator van de prestaties die gebruikers zouden zien in geavanceerde webapplicaties zoals games.

het optimaliseren van de prestaties van onze JavaScript-engine is een hoge prioriteit voor het WebKit-project. Voorbeelden van enkele van de verbeteringen die we in het afgelopen jaar hebben geïntroduceerd zijn gelijktijdige compilatie, generationele GC en de FTL JIT. Engineering van dergelijke verbeteringen vereist focus: we proberen high-impact projecten te prioriteren boven het bouwen en onderhouden van complexe optimalisaties met kleinere voordelen. Zo motiveren we prestatiewerk met benchmarks die het soort workloads illustreren dat WebKit-gebruikers waarschijnlijk zullen tegenkomen. Deze filosofie van benchmarkgedreven ontwikkeling is al lang onderdeel van WebKit.

de vorige stand van JavaScript Benchmarking

toen we verbeteringen aan de Webkit JavaScript-engine maakten, vonden we dat geen enkele benchmark-suite volledig representatief was voor de scenario ‘ s die we wilden verbeteren. We vinden het leuk dat JSBench de prestaties van JavaScript-code op populaire websites meet, maar WebKit doet het al heel goed op deze benchmark. We houden van SunSpider voor zijn dekking van veelgebruikte taalconstructies en voor het feit dat de looptijd representatief is voor de looptijd van code op het web, maar het schiet tekort voor het meten van piekdoorvoer. We houden van octaan, maar het scheef te ver in de andere richting: het is nuttig voor het bepalen van onze motor piek doorvoer, maar is niet gevoelig genoeg voor de prestaties die je zou het meest waarschijnlijk te zien op typische web workloads. Het bagatelliseert ook nieuwe JavaScript-technologieën zoals asm.js; slechts één van Octane ‘ s 15 benchmarks was een asm.js test, en deze test negeert floating point prestaties.

het vinden van goede asm.js benchmarks is moeilijk. Hoewel Emscripten wordt steeds mindshare, de tests zijn langlopende en tot voor kort, ontbrak een web harnas. Dus bouwden we onze eigen asm.js benchmarks door het gebruik van tests uit de LLVM test suite. Deze C-en c++ – tests worden gebruikt door LLVM-ontwikkelaars om prestatieverbeteringen van de Clang/LLVM-compiler stack bij te houden. Emscripten zelf gebruikt LLVM om JavaScript-code te genereren. Dit maakt de LLVM test suite bijzonder geschikt voor het testen hoe goed een JavaScript engine omgaat met native code. Een ander voordeel van onze nieuwe tests is dat ze veel sneller te draaien zijn dan de Emscripten test suite.

het hebben van goede Javascript benchmarks stelt ons in staat om met vertrouwen ambitieuze verbeteringen aan WebKit na te streven. Bijvoorbeeld, SunSpider begeleid onze gelijktijdige compilatie werk, terwijl de asm.js-tests en Octane ‘ s doorvoertests motiveerden ons werk aan de FTL JIT. Maar het toestaan van onze testen op basis van een mengelmoes van deze verschillende benchmarksuites is onpraktisch geworden. Het is moeilijk om bijdragers te vertellen wat ze zouden moeten testen als er geen uniforme testsuite is die hen kan vertellen of hun verandering het gewenste effect op de prestaties had. We willen één test suite die één score kan rapporteren op het einde, en we willen dat deze ene score representatief is voor WebKit ‘ s toekomstige richting.

het ontwerpen van de nieuwe Jetstream Benchmark Suite

verschillende WebKit-componenten vereisen verschillende benaderingen voor het meten van prestaties. Voor DOM-prestaties hebben we bijvoorbeeld zojuist de Snelheidsmeterbenchmark geïntroduceerd. In sommige gevallen werkt de voor de hand liggende aanpak vrij goed: bijvoorbeeld, veel lay-out en rendering optimalisaties kunnen worden gedreven door het meten van pagina laadtijd op representatieve webpagina ‘ s. Maar het meten van de prestaties van een programmeertaal implementatie vereist meer subtiliteit. We willen de benchmarks’ gevoeligheid voor core Motor verbeteringen verhogen, maar niet zozeer dat we het perspectief verliezen over hoe die motor verbeteringen spelen in echte websites. We willen de mogelijkheden voor systeemruis minimaliseren om onze metingen af te leiden, maar wanneer een werkbelasting inherent gevoelig is voor lawaai, willen we een benchmark om dit aan te tonen. We willen dat onze benchmarks een high-fidelity benadering vertegenwoordigen van de workloads waar WebKit-gebruikers waarschijnlijk om geven.

JetStream combineert een verscheidenheid aan JavaScript-benchmarks, die een verscheidenheid aan geavanceerde workloads en programmeertechnieken omvatten, en rapporteert een enkele score die deze balanceert met behulp van een geometrisch gemiddelde. Elke test wordt drie keer uitgevoerd en scores worden gerapporteerd met 95% betrouwbaarheidsintervallen. Elke benchmark meet een duidelijke werklast, en geen enkele optimalisatietechniek is voldoende om alle benchmarks te versnellen. Sommige benchmarks tonen afwegingen, en agressieve of gespecialiseerde optimalisatie voor een benchmark kan een andere benchmark langzamer maken. Het demonstreren van afwegingen is cruciaal voor ons werk. Zoals besproken in mijn vorige post over onze nieuwe JIT compiler, WebKit probeert dynamisch aan te passen aan de werkbelasting met behulp van verschillende uitvoeringsniveaus. Maar dit is nooit perfect. Bijvoorbeeld, terwijl onze nieuwe FTL JIT compiler ons fantastische snelheden geeft bij piekdoorvoertests, veroorzaakt het wel lichte regressies bij sommige oprittests. Nieuwe optimalisaties voor geavanceerde taal runtimes lopen vaak in dergelijke trade-offs, en ons doel met JetStream is om een benchmark die ons informeert over de trade-offs die we maken.Jetstream bevat benchmarks van de SunSpider 1.0.2 en Octane 2 JavaScript benchmark suites. Het bevat ook benchmarks van de LLVM compiler open source project, gecompileerd naar JavaScript met behulp van Emscripten 1.13. Het bevat ook een benchmark gebaseerd op de HashMap van het Apache Harmony open source project, handmatig vertaald naar JavaScript. Meer informatie over de benchmarks opgenomen in JetStream is beschikbaar op de Jetstream in Depth pagina.

we zijn verheugd om deze nieuwe benchmark te introduceren. Om het uit te voeren, bezoek browserbench.org/JetStream. u kunt bugs bestand tegen de benchmark met behulp van WebKit ‘ s bug management systeem onder de Tools / Tests component.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.