Facebook hat den Cinder-Quellcode veröffentlicht, der von Instagram verwendet wird

Facebook enthüllt vor kurzem durch einen Beitrag, Freigabe des Quellcodes des Cinder-Projekts, was ist eine Gabelung des CPython-Zweigs und die Hauptreferenzimplementierung der Programmiersprache Python.

Cinder wird in der Produktionsinfrastruktur von Facebook verwendet, um Instagram mit Strom zu versorgen und enthält Optimierungen zur Verbesserung der Leistung. Der Code wurde veröffentlicht, um die Möglichkeit der Migration vorgefertigter Optimierungen auf den Mainstream von CPython zu erörtern und andere Projekte zur Leistungsverbesserung von CPython zu unterstützen.

Facebook erwähnt, dass Cinder als separates Open Source-Projekt nicht unterstützt wird und der Code wird in der Form dargestellt, in der er in der Infrastruktur des Unternehmens verwendet wird, ohne zusätzliche Dokumentation.

Cinder bewirbt sich auch nicht als Alternative zu CPython - das Hauptentwicklungsziel ist die Verbesserung von CPython selbst.

Der Code von Cinder wird als ziemlich zuverlässig angesehen und in Produktionsumgebungen getestet, aber Wenn Probleme festgestellt werden, müssen diese selbst behoben werden, da Facebook nicht garantiert, dass es auf externe Fehlermeldungen reagiert und Anfragen ziehen.

Gleichzeitig schließt Facebook eine konstruktive Zusammenarbeit mit der Community nicht aus und ist bereit, Ideen zu diskutieren, wie Cinder noch schneller gemacht oder die Übertragung vorbereiteter Änderungen auf das CPython-Hauptframework beschleunigt werden kann.

Die wichtigsten in Cinder implementierten Optimierungen sind:

  • Bytecode-Online-Caching: Die Essenz der Methode besteht darin, typische Opcode-Ausführungssituationen zu identifizieren, die dynamisch optimiert werden können, und diesen Opcode durch schnellere spezialisierte Optionen zu ersetzen.
  • Routinebewertung: Bei asynchronen Funktionsaufrufen, die sofort verarbeitet werden, wird das Ergebnis dieser Funktionen direkt ersetzt, ohne eine Coroutine zu erstellen und ohne eine Ereignisschleife aufzurufen. In dem von Facebook verwendeten Code, der häufig verwendet wird, führt die Optimierung zu einer Beschleunigung von etwa 5%.
  • Selektive JIT-Kompilierung auf der Ebene einzelner Methoden und Funktionen: Es wird durch die Option "-X jit" oder die Umgebungsvariable PYTHONJIT = 1 aktiviert und ermöglicht die Beschleunigung vieler Leistungstests um das 1,5- bis 4-fache.
    Die Liste der Funktionen, für die JIT aktiviert werden soll, kann anhand der Ergebnisse des Profils festgelegt werden. In Zukunft wird eine Unterstützung für die dynamische JIT-Kompilierung auf der Grundlage einer internen Analyse der Häufigkeit von Funktionsaufrufen erwartet. Angesichts der Besonderheiten der Startprozesse auf Instagram ist die JIT-Kompilierung in der Anfangsphase auch für Facebook geeignet.
    Das JIT konvertiert zuerst den Bytecode von Python in eine High-Level-Intermediate-Repräsentation (HIR), die dem Bytecode von Python ziemlich nahe kommt, jedoch eine auf Datensätzen basierende virtuelle Maschine anstelle eines auf Datensätzen basierenden virtuellen Maschinenstapels verwendet und auch verwendet zusätzliche typinformationsrelevante Typinformationen und Details. Das HIR wird dann in ein SSA-Formular (Static Single Allocation) konvertiert und auf der Grundlage des Referenzzählers und der Speichernutzungsdaten optimiert. Als Ergebnis wird eine Low-Level-Intermediate-Repräsentation (LIR) generiert, die der Assemblersprache nahe kommt.
  • Strenger Modus für Module:Die Funktionalität besteht aus drei Komponenten: Der StrictModule-Typ. Ein statischer Analysator, der feststellen kann, dass die Ausführung eines Moduls den Code außerhalb dieses Moduls nicht beeinflusst.
  • Statisches Python: ist ein experimenteller Bytecode-Compiler, der Typanmerkungen verwendet, um Bytecode zu generieren, der für jeden Typ spezifisch ist und durch die JIT-Kompilierung schneller ausgeführt wird. In einigen Tests zeigt die Kombination von Static Python und JIT eine bis zu 7-fache Leistungsverbesserung gegenüber typischem CPython. In vielen Situationen werden die Ergebnisse so ausgewertet, als ob die Compiler MyPyC und Cython verwendet würden.

Schließlich wenn Sie daran interessiert sind, den Cinder-Code zu erhalten oder erfahren Sie mehr darüber, können Sie die konsultieren Details im folgenden Link.


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.