Schnellere Software bei Facebook: HipHop Virtual Machine

Facebook hat seinen PHP-zu-C++-Compiler "HipHop for PHP" in einer neuen Ausbaustufe vorgestellt. Eine Virtual Machine soll eine dynamische Kompilierung erlauben – und Code deutlich schneller ausführen können.

In Pocket speichern vorlesen Druckansicht 90 Kommentare lesen
Lesezeit: 3 Min.
Von
  • Robert Lippert

Facebooks interne Anwendungen sollen künftig schneller laufen. Dazu erweitert das Unternehmen seinen HipHop for PHP-Cross-Compiler um eine virtuelle Maschine, die die Vorteile des alten Systems (optimierter Code für die Facebook-Server) mit den Vorteilen einer dynamisch kompilierbaren Sprache vereint. Die neue Ausbaustufe des PHP-zu-C++-Kompilers nennt sich HipHop Virtual Machine und soll eine dynamische Übersetzung von PHP-Code in nativen Maschinencode ermöglichen. Im Vergleich zum HipHop-Interpreter verspricht die VM eine deutlich schnellere Ausführung des Quellcodes – die Technik hat jedoch einige Hürden zu nehmen.

Aktuell verwendet Facebook noch den HipHop-Compiler, um aus seinem PHP-Quellcode optimierte Binaries für die Website zu erstellen. Die Technik stellte Facebook Anfang 2010 mit HipHop for PHP vor und sorgte damit für Aufsehen in der Szene – hatte man doch eine Technik entwickelt, die es dem Unternehmen erlaubte, den PHP-Quellcode seiner Infrastruktur in optimierten C++-Code zu übersetzen. Damit büßte man zwar einen Teil der Flexibilität ein, da die an sich dynamisch interpretierte Skriptsprache PHP in statischen Code kompiliert werden musste, jedoch konnten die CPUs der Facebook-Webserver besser genutzt werden – bis zu 50 Prozent weniger Last pro Seite.

Im Detail folgt die Übersetzung dem Muster PHP zu AST zu C++ zu x64, mithilfe der HipHop Virtual Machine verfolgen die Entwickler bei Facebook nun aber das Ziel, den Prozess über eine Just-in-Time-Kompilierung abzukürzen. Die VM stellt hier einen an PHP angepassten Stack zur Verfügung, der letztlich den HipHop-Bytecode (HHBC) ausführt. An der Übersetzung von PHP zu AST wird dabei nicht gerüttelt, jedoch wird der Ablauf um einen Schritt von AST zu HipHop-Bytecode ergänzt. Parallel dazu hat man einen dynamischen HHBC-zu-x64-Übersetzer entwickelt.

Im Vergleich zum klassischen HipHop-for-PHP-Interpreter sei der Bytecode-Interpreter aus der VM um den Faktor 1,6 schneller (gemessen an Facebook-spezifischen Benchmarks). Für Facebooks Entwickler verspricht die Technik beim klassischen Editieren-Neuladen-Debuggen-Arbeitsablauf einen spürbaren Zeitgewinn (Reload-Zeiten konnten von 8 auf 5 Sekunden reduziert werden), der sich letztlich auch in der Produktivität niederschlage.

Ganz ohne Schwierigkeiten gehe die Entwicklung der HipHop Virtual Machine jedoch nicht vonstatten. Beispielsweise verbrauche x64-Maschinencode derzeit eine bis zu 10-fache Speichermenge im Vergleich zum korrespondierenden HipHop-Bytecode. In den kommenden Monaten will man die VM jedoch weiter optimieren, es sei durchaus denkbar, das mit der Virtual Machine erzeugter Bytecode die statisch kompilierten Binaries in Facebooks Produktivumgebung leistungstechnisch schlagen könne.

Die HHVM ist als integraler Bestandteil des HipHop-Quellcodes quelloffen über GitHub verfügbar. (rl)