WebKit: FTL JIT erhält neues Backend unter OS X

Statt der Compilerinfrastruktur LLVM kommt zukünftig B3 für die Low-Level-Optimierung zum Einsatz. Der FTL JIT soll damit vor allem schneller arbeiten können.

In Pocket speichern vorlesen Druckansicht
WebKit: FTL JIT erhält neues Backend unter OS X
Lesezeit: 3 Min.
Von
  • Julia Schmidt

Apples Filip Pizlo hat auf dem Blog der Web Browser Engine WebKit das neue FTL-JIT-Backend (Faster Than Light Just in Time) für OS X vorgestellt. Das sogenannte Bare Bones Backend, kurz B3, soll LLVM als Optimierungsmaßnahme ersetzen. Grund dafür sind angestrebte Verbesserungen der Kompilierzeit, bei denen sich LLVM offenbar immer häufiger als Engpass herausgestellt hatte. Außerdem sei das Tool nicht besonders auf die Herausforderungen dynamischer Sprachen wie JavaScript ausgerichtet.

B3 ist seit Oktober 2015 in Arbeit. Beim Design des Backends war vor allem wichtig, es mit der selben Granularität wie LLVM auszustatten, um ähnliche Optimierungsmaßnahmen zu ermöglichen. Im Gegensatz zu LLVM gibt es in B3 nur zwei Zwischensprachen: B3 IR, die die Einsatzzwecke der LLVM IR abdeckt, und Assembly IR (Air), die Use Cases von anderen IRs wie Machine SSA und Selection DAG übernimmt. Dadurch wollen die Entwickler die Zahl der Speicherzugriffe reduzieren, die zur Codeanalyse nötig sind. Zudem sollte die Größe der IR-Objekte, die zum Darstellen typischer Operationen notwendige Anzahl der Objekte und der Einsatz der Zeiger verringert werden.

Um den dynamischen Sprachen gewachsen zu sein, sind in der Optimierungseinheit des neuen Backends unter anderem Funktionen zum Vereinfachen des Kontrollflussgraphen, Entfernen unnötigen Codes und Prüfen auf Integer-Überläufe enthalten. Aber auch in Air sind einige entsprechende Mechanismen integriert. Um im Gesamtsystem besser abzuschneiden, haben die Entwickler B3 zudem mit einem Opcode für Patchpoints ausgestattet. LLVM nutzt an der Stelle intrinsische Funktionen, die es aber als experimentell behandelt und so die Optimierungsmöglichkeiten einschränkt.

Weitere Vorteile soll die Umsetzung des On-Stack-Replacement mit einem Check-Opscode bieten, die grundlegende Blöcke nicht wie LLVM aufbricht. Alle Verbesserungen sollen dazu führen, dass der JIT-Compiler durch das neue Backend in weniger Zeit Code generieren kann, der zum Teil sogar besser optimiert ist, etwa wenn es um die Modellierung sich selbst verändernden Codes geht. Zwar mussten dafür auch einige Änderungen am FTL JIT durchgeführt werden, allerdings bezogen sich die meisten auf den Umgang mit Patchpoints, die mit B3 wohl einfacher zu nutzen sind.

Noch ist B3 nicht fertig, da der Code noch für ARM64 zu portieren ist. Erste Tests mit den Benchmark-Suites JetStream, Octane und Kraken zeigen laut Pizlo jedoch schon gute Ergebnisse bei der Kompilierzeit, ohne sich dabei negativ auf den Durchsatz auszuwirken. Die genauen Zahlen lassen sich im WebKit-Blog nachlesen. Sobald alle Plattformen mit B3 arbeiten können, plant das Team den LLVM-Support aus dem JIT zu entfernen. (jul)