tänään esittelemme uuden WebKit JavaScript benchmark test suite, JetStream. JetStream kodifioi sen, mitä de facto prosessimme on ollut — yhdistää latenssi-ja läpimenovertailut suurin piirtein yhtä suureen painotukseen, ja kaapata sekä perinteisten JavaScript-ohjelmointityylien että uusien JavaScript-pohjaisten teknologioiden mittarit, jotka ovat vanginneet mielikuvituksemme. Pisteet Jetstream ovat hyvä indikaattori suorituskykyä käyttäjät näkisivät kehittyneitä web-sovelluksia, kuten pelejä.
JavaScript-moottorin suorituskyvyn optimointi on WebKit-projektille erittäin tärkeää. Esimerkkejä joitakin parannuksia otimme käyttöön viime vuonna ovat samanaikainen kokoaminen, generational GC, ja FTL JIT. Tällaisten parannusten suunnittelu vaatii keskittymistä: pyrimme priorisoimaan suuritehoiset projektit monimutkaisten optimointien rakentamisen ja ylläpidon edelle, joilla on pienemmät hyödyt. Siksi motivoimme suorituskykytyötä vertailuarvoilla, jotka kuvaavat, millaisia työmääriä WebKitin käyttäjät todennäköisesti kohtaavat. Tämä viitekehitysfilosofia on ollut jo pitkään osa WebKitiä.
aikaisempi JavaScript-Benchmarkingin tila
kun teimme parannuksia WebKit JavaScript-moottoriin, havaitsimme, että mikään yksittäinen benchmark-sarja ei edustanut täysin niitä skenaarioita, joita halusimme parantaa. Pidämme siitä, että JSBench mittaa JavaScript-koodin suorituskykyä suosituilla verkkosivustoilla, mutta WebKit pärjää jo hyvin tässä vertailukohdassa. Pidämme SunSpider sen kattavuus yleisesti käytetty kieli konstruktioita ja siitä, että sen juoksuaika on edustava juoksuaika koodin Webissä, mutta se jää lyhyt mittaus huippunopeus. Pidämme Octane, mutta se vinoutuu liian pitkälle toiseen suuntaan: se on hyödyllinen määritettäessä Moottorin huippunopeus, mutta ei ole tarpeeksi herkkä suorituskykyä olisit todennäköisesti nähdä tyypillinen web-työmäärät. Se myös vähättelee uusia JavaScript teknologioita, kuten asm.js; vain yksi oktaanin 15 vertailuarvosta oli asm.js-testi, ja tässä testissä ei oteta huomioon liukulukujen suorituskykyä.
hyvän asm: n löytäminen.js-vertailu on vaikeaa. Vaikka Emscripten on saamassa mindshare, sen testit ovat pitkään käynnissä ja viime aikoihin asti puuttui web valjaat. Rakensimme oman asm: n.js-vertailuarvot LLVM-testisarjan testien avulla. LLVM: n kehittäjät käyttävät näitä C-ja C++ – testejä clang/LLVM-kääntäjäpinon suorituskyvyn parantamiseen. Emscripten itse käyttää LLVM: ää JavaScript-koodin luomiseen. Tämä tekee LLVM-testisarjasta erityisen sopivan testaamaan, kuinka hyvin JavaScript-moottori käsittelee natiivikoodia. Toinen uusien testiemme etu on se, että ne ovat paljon nopeampia ajaa kuin Emscripten-testisarja.
hyvän JavaScript-viitearvon ansiosta voimme luottavaisin mielin jatkaa WebKitin kunnianhimoisia parannuksia. Esimerkiksi SunSpider ohjasi samanaikaista kokoamistyötämme, kun taas asm.js-testit ja Octanen läpimenotestit motivoivat työskentelyämme YLIVALONNOPEUDELLA. Mutta se, että testimme voi perustua eri vertailukohtien sekamelskaan, on epäkäytännöllistä. On vaikea sanoa osallistujille, mitä heidän pitäisi testata, jos ei ole yhtenäistä testisarjaa, joka voisi kertoa, onko heidän muutoksellaan haluttu vaikutus suorituskykyyn. Haluamme yhden testisarjan, joka voi raportoida yhden pistemäärän lopulta, ja haluamme tämän yhden pistemäärän edustavan WebKitin tulevaa suuntaa.
uuden Jetstream Benchmark Suite
WebKitin eri komponentit vaativat erilaisia lähestymistapoja suorituskyvyn mittaamiseen. Esimerkiksi DOM performancea varten otimme juuri käyttöön nopeusmittarin vertailuarvon. Joissakin tapauksissa ilmeinen lähestymistapa toimii melko hyvin: esimerkiksi monia asettelu-ja renderointioptimointeja voidaan ajaa mittaamalla sivujen latausaikaa edustavilla verkkosivuilla. Ohjelmointikielen toteutuksen suorituskyvyn mittaaminen vaatii kuitenkin enemmän hienovaraisuutta. Haluamme lisätä vertailukohtien herkkyyttä Moottorin perusparannuksille, mutta emme niin paljon, että menettäisimme näkökulman siihen, miten nämä moottoriparannukset toimivat todellisissa verkkosivustoissa. Haluamme minimoida järjestelmän melun mahdollisuudet heittää pois mittauksistamme, mutta aina kun työmäärä on luonnostaan altis melulle, haluamme vertailukohdan, joka osoittaa tämän. Haluamme, että vertailukohtamme edustavat tarkkaa arviota niistä työmääristä, joista WebKitin käyttäjät todennäköisesti välittävät.
JetStream yhdistää erilaisia JavaScript-vertailuarvoja, jotka kattavat erilaisia kehittyneitä työkuormia ja ohjelmointitekniikoita, ja raportoi yhden pistearvon, joka tasapainottaa niitä geometrisen keskiarvon avulla. Jokainen testi suoritetaan kolme kertaa ja tulokset ilmoitetaan 95%: n luottamusvälillä. Jokainen vertailuarvo mittaa erillistä työmäärää, eikä mikään yksittäinen optimointitekniikka riitä nopeuttamaan kaikkia vertailuarvoja. Jotkut vertailuarvot osoittavat tradeoffs, ja aggressiivinen tai erikoistunut optimointi yhden vertailuarvon voi tehdä toisen vertailuarvon hitaampi. Kompromissien osoittaminen on ratkaisevaa työmme kannalta. Kuten edellisessä kirjoituksessani uudesta JIT-kääntäjästämme mainittiin, WebKit pyrkii mukautumaan dynaamisesti työmäärään käyttämällä eri suoritustasoja. Mutta tämä ei ole koskaan täydellistä. Esimerkiksi vaikka Uusi FTL JIT-kääntäjämme antaa meille fantastisia nopeuksia huippunopeustesteissä, se aiheuttaa lieviä taantumia joissakin ramppitesteissä. Uudet optimoinnit edistyneille kieliajoille törmäävät usein tällaisiin kompromisseihin, ja tavoitteemme Jetstreamin kanssa on saada vertailukohta, joka kertoo meille kompromisseista, joita teemme.
JetStream sisältää vertailukohtia SunSpider 1.0.2-ja Octane 2 JavaScript benchmark suites-järjestelmistä. Se sisältää myös vertailuarvoja LLVM kääntäjä open source project, käännetty JavaScript käyttäen Emscripten 1.13. Se sisältää myös Apache Harmony open source-projektin Hashmapiin perustuvan vertailukohdan, joka on käännetty käsin JavaScriptille. Lisätietoja jetstreamin sisältämistä vertailuarvoista löytyy Jetstream in Depth-sivulta.
olemme innoissamme saadessamme esitellä tämän uuden vertailukohdan. Voit käyttää sitä, yksinkertaisesti vierailla browserbench.org/JetStream. voit arkistoida vikoja vertailuarvoa vastaan WebKitin vianhallintajärjestelmän avulla Työkalut / testit-komponentin alla.