SunSpider: JavaScript-Benchmark arbeitet zuverlässiger

Die Codeoptimierung moderner JavaScript-Engines und die Energieverwaltung machten der JavaScript- Benchmark-Suite SunSpider bis jetzt zu schaffen. Mit der Veröffentlichung von Version 1.0 versucht das WebKit-Team das zu ändern.

In Pocket speichern vorlesen Druckansicht 8 Kommentare lesen
Lesezeit: 3 Min.
Von
  • Julia Schmidt

Fünf Jahre nach dem ersten Release hat das WebKit-Team Version 1.0 der hauseigenen JavaScript-Benchmark-Suite SunSpider veröffentlicht. Nachdem die Suite zur Zeit ihres Erscheinens eine feste Größe beim Messen der Leistungsfähigkeit von JavaScript-Engines war, verlor sie mit der Zeit etwas an Bedeutung und Benchmarks wie Kraken und Octane kamen auf den Markt. Da der Schwerpunkt von SunSpider im Vergleich allerdings etwas anders gelagert ist, beschäftigten sich die Entwickler für die neue Version mit SunSpiders Schwachstellen, um mit erhöhter Genauigkeit und Reproduzierbarkeit der Tests wieder an Relevanz zu gewinnen.

Unter anderem ergänzte das Team Überprüfungen der Ergebnisse bei 23 der 26 SunSpider-Tests. Diese sollen zum einen dazu dienen, dass die JavaScript-Engines die Tests vollständig ausführen und zum anderen überprüfen, ob der Test auch richtig ausgeführt wurde. Dieser Schritt ist notwendig, da die in modernen Engines enthaltenen Optimierungsverfahren Codestücke, deren Ergebnisse nicht benutzt werden, überspringen. Kommen solche Passagen auch in den Tests vor, kann es passieren, dass sie nicht ausgeführt werden und so in der Zeitmessung fehlen, was deren Ergebnisse verfälscht. Von den Prüfgängen nicht abgedeckt sind Tests, die mit Zufallsgrößen oder Zeitzonen arbeiten, da sie für verschiedene Nutzer und Implementierungen unterschiedliche Ergebnisse erzeugen.

Darüber hinaus wurden die Pausen zwischen den verschiedenen Tests entfernt. In Version 0.9 wartete SunSpider nach jedem Test 500 ms, um asynchrone Aktivitäten zum Abschluss zu bringen, bevor die nächste Messung begann. Seit dem hat sich allerdings nicht nur die Performance der Engines verbessert, sondern auch die Energieverwaltung der Hardware. So hatten die vergleichsweise langen Pausen zur Folge, dass CPUs der Plattformen teilweise ihre Taktfrequenz drosselten und so die Geschwindigkeitsmessungen negativ beeinflussten. In der Nachfolgeversion 0.9.1 setzten die Entwickler die Wartezeit zwischen den Tests dann auf 10 ms herunter. Mittlerweile hat sich allerdings wieder einiges in Sachen Hardware und JavaScript-Engines getan, sodass es erneut zu Verzerrungen kommt, die der Reproduzierbarkeit der Testergebnisse verhindern. Durch das Entfernen der Pausen sollen der Einfluss der Energieverwaltung weiter reduziert worden sein und asynchrone Aktivitäten schneller zum Vorschein kommen. Außerdem berichtet das WebKit-Team, die Zeit der Testdurchläufe so teilweise auf die Hälfte gedrückt zu haben.

Ob alle Änderungen den gewünschten Erfolg bringen, kann jedoch noch nicht mit Sicherheit gesagt werden. Ein kurzer Test ließ zumindest in Sachen Reproduzierbarkeit zu wünschen übrig. Mit jedem Durchlauf benötigte SunSpider weniger Zeit:

1. Durchlauf (benötigte Zeit) 2. Durchlauf (benötigte Zeit) 3. Durchlauf (benötigte Zeit)
Firefox 20, OpenSuse 12.1 330,8 ms 326,4 ms 323,7 ms
IE 10, Windows 8 304,0 ms 247,8 ms 245,7 ms

(jul)