Facebook udostępnił kod źródłowy Cinder, który jest używany przez Instagram

Prezentacja Facebooka ostatnio za pośrednictwem poczty, udostępnienie kodu źródłowego projektu Cinder, który jest rozwidlenie gałęzi CPython oraz główna implementacja referencyjna języka programowania Python.

Żużel wykorzystywane w infrastrukturze produkcyjnej Facebooka do zasilania Instagrama i zawiera optymalizacje poprawiające wydajność. Kod został opublikowany w celu omówienia możliwości migracji gotowych optymalizacji do głównego nurtu CPython oraz w celu wsparcia innych projektów poprawy wydajności CPythona.

Facebook wspomina, że ​​nie będzie obsługiwał Cindera jako oddzielnego projektu open source a kod prezentowany jest w takiej formie, w jakiej jest używany w infrastrukturze firmy, bez dodatkowej dokumentacji.

Cinder również nie promuje się jako alternatywa dla CPythona - głównym celem rozwoju jest ulepszenie samego CPythona.

Kod Cindera jest uważany za dość niezawodny i przetestowane w środowiskach produkcyjnych, ale jeśli zostaną zidentyfikowane problemy, będą musiały zostać rozwiązane samodzielnie, ponieważ Facebook nie gwarantuje, że zareaguje na zewnętrzne komunikaty o błędach i pull requesty.

Jednocześnie Facebook nie wyklucza konstruktywnej współpracy ze społecznością i jest gotowy do dyskusji nad pomysłami, jak jeszcze bardziej przyspieszyć Cindera lub jak przyspieszyć przenoszenie przygotowanych zmian do głównego frameworka CPythona.

Główne optymalizacje wdrożone w Cinder to:

  • Buforowanie online kodu bajtowego: Istotą tej metody jest zidentyfikowanie typowych sytuacji wykonywania kodu operacji, które można dynamicznie zoptymalizować, i zastąpienie tego kodu operacji szybszymi opcjami specjalistycznymi.
  • Ocena rutynowa: W przypadku wywołań funkcji asynchronicznych, które są przetwarzane natychmiast, wynik tych funkcji jest bezpośrednio zastępowany bez tworzenia procedury i bez wywoływania pętli zdarzeń. W kodzie używanym przez Facebooka, z którego intensywnie korzysta, optymalizacja prowadzi do przyspieszenia o około 5%.
  • Selektywna kompilacja JIT na poziomie poszczególnych metod i funkcji: jest włączana opcją „-X jit” lub zmienną środowiskową PYTHONJIT = 1 i umożliwia przyspieszenie wielu testów wydajnościowych od 1,5 do 4 razy.
    Listę funkcji, dla których należy włączyć JIT, można określić na podstawie wyników profilu. W przyszłości spodziewane jest wsparcie dla dynamicznej kompilacji JIT w oparciu o wewnętrzną analizę częstotliwości wywołań funkcji, ale biorąc pod uwagę specyfikę procesów uruchamiania na Instagramie, kompilacja JIT jest również odpowiednia dla Facebooka w początkowej fazie.
    JIT najpierw konwertuje kod bajtowy Pythona na reprezentację pośrednią wysokiego poziomu (HIR), która jest dość zbliżona do kodu bajtowego Pythona, ale jest zaprojektowana do używania maszyny wirtualnej opartej na rekordach, a nie maszyny wirtualnej opartej na rekordach. Stack, a także używa dodatkowe informacje o typie i szczegóły dotyczące wydajności. HIR jest następnie konwertowany do postaci statycznej pojedynczej alokacji (SSA) i przechodzi etapy optymalizacji na podstawie liczby referencji i danych dotyczących wykorzystania pamięci. W rezultacie generowana jest reprezentacja pośrednia niskiego poziomu (LIR), która jest zbliżona do języka asemblera.
  • Tryb ścisły dla modułów:Funkcjonalność składa się z trzech składników: typu StrictModule. Analizator statyczny zdolny do określenia, że ​​wykonanie modułu nie wpływa na kod poza tym modułem.
  • Statyczny Python: jest eksperymentalnym kompilatorem kodu bajtowego, który używa adnotacji typu do generowania kodu bajtowego, który jest specyficzny dla każdego typu i działa szybciej dzięki kompilacji JIT. W niektórych testach połączenie Static Python i JIT wykazuje nawet 7-krotną poprawę wydajności w porównaniu z typowym CPythonem. W wielu sytuacjach wyniki są oceniane tak, jakby były używane kompilatory MyPyC i Cython.

W końcu jeśli jesteś zainteresowany uzyskaniem kodu Cinder lub dowiedzieć się więcej na ten temat, możesz zapoznać się z szczegóły w poniższym linku.


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.