Facebook merilis kode sumber Cinder yang digunakan oleh Instagram

Facebook diresmikan baru-baru ini melalui sebuah postingan, merilis kode sumber proyek Cinder, yang mana cabang dari CPython dan implementasi referensi utama dari bahasa pemrograman Python.

Abu digunakan dalam infrastruktur produksi Facebook untuk memberdayakan Instagram dan mencakup pengoptimalan untuk meningkatkan kinerja. Kode telah diterbitkan untuk membahas kemungkinan migrasi pengoptimalan siap pakai ke arus utama CPython dan untuk membantu proyek peningkatan kinerja CPython lainnya.

Facebook menyebutkan bahwa itu tidak akan mendukung Cinder sebagai proyek open source terpisah dan kode tersebut disajikan dalam bentuk yang digunakan dalam infrastruktur perusahaan, tanpa dokumentasi tambahan.

Cinder juga tidak mempromosikan dirinya sebagai alternatif untuk CPython - tujuan pengembangan utamanya adalah untuk meningkatkan CPython itu sendiri.

Kode Cinder dianggap cukup andal dan diuji di lingkungan produksi, tetapi jika masalah teridentifikasi, mereka harus diselesaikan sendiri, karena Facebook tidak menjamin akan menanggapi pesan kesalahan eksternal dan menarik permintaan.

Pada saat yang sama, Facebook tidak mengesampingkan kerja sama yang konstruktif dengan komunitas dan siap untuk mendiskusikan ide-ide tentang bagaimana membuat Cinder lebih cepat atau bagaimana mempercepat transfer perubahan yang telah disiapkan ke kerangka utama CPython.

Pengoptimalan utama yang diterapkan di Cinder adalah:

  • Caching online bytecode: Inti dari metode ini adalah untuk mengidentifikasi situasi eksekusi opcode tipikal yang dapat dioptimalkan secara dinamis dan mengganti opcode tersebut dengan opsi khusus yang lebih cepat.
  • Evaluasi rutin: Untuk panggilan fungsi asynchronous yang segera diproses, hasil dari fungsi tersebut diganti secara langsung tanpa membuat coroutine dan tanpa memanggil event loop. Dalam kode yang digunakan oleh Facebook, yang sangat banyak digunakannya, pengoptimalan menghasilkan akselerasi sekitar 5%.
  • Kompilasi JIT selektif pada tingkat metode dan fungsi individu: ini diaktifkan oleh opsi "-X jit" atau variabel lingkungan PYTHONJIT = 1 dan memungkinkan Anda untuk mempercepat banyak uji kinerja sebanyak 1,5 hingga 4 kali.
    Daftar fungsi yang JIT harus diaktifkan dapat ditentukan berdasarkan hasil profil. Kedepannya, diharapkan dukungan untuk kompilasi JIT dinamis berdasarkan analisis internal frekuensi pemanggilan fungsi diharapkan, tetapi dengan mempertimbangkan spesifikasi proses peluncuran di Instagram, kompilasi JIT juga cocok untuk Facebook pada tahap awal.
    JIT pertama-tama mengubah bytecode Python menjadi representasi perantara tingkat tinggi (HIR), yang cukup dekat dengan bytecode Python, tetapi dirancang untuk menggunakan mesin virtual berbasis catatan daripada mesin virtual berbasis tumpukan, dan juga menggunakan informasi jenis dan detail tambahan yang relevan dengan kinerja. HIR tersebut kemudian diubah menjadi bentuk Static Single Allocation (SSA) dan menjalani tahapan pengoptimalan berdasarkan jumlah referensi dan data penggunaan memori. Hasilnya, representasi menengah tingkat rendah (LIR) dihasilkan, yang mendekati bahasa assembly.
  • Mode ketat untuk modul:Fungsionalitas tersebut memiliki tiga komponen: Jenis StrictModule. Penganalisis statis yang mampu menentukan bahwa eksekusi modul tidak memengaruhi kode di luar modul itu.
  • Python Statis: adalah kompilator bytecode eksperimental yang menggunakan anotasi jenis untuk menghasilkan bytecode yang spesifik untuk setiap jenis dan berjalan lebih cepat melalui kompilasi JIT. Dalam beberapa pengujian, kombinasi Static Python dan JIT mendemonstrasikan peningkatan kinerja hingga 7x lipat dari CPython biasa. Dalam banyak situasi, hasilnya dievaluasi seolah-olah kompiler MyPyC dan Cython digunakan.

Akhirnya jika Anda tertarik untuk bisa mendapatkan kode Cinder atau mempelajari lebih lanjut tentang itu, Anda dapat berkonsultasi dengan detailnya di tautan berikut.


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.