Facebook mengeluarkan kod sumber Cinder yang digunakan oleh Instagram

Facebook dilancarkan baru-baru ini melalui siaran, melepaskan kod sumber projek Cinder, iaitu garpu cawangan CPython dan pelaksanaan rujukan utama bahasa pengaturcaraan Python.

Cinder digunakan dalam infrastruktur pengeluaran Facebook untuk menggerakkan Instagram dan merangkumi pengoptimuman untuk meningkatkan prestasi. Kod tersebut telah diterbitkan untuk membincangkan kemungkinan memindahkan pengoptimuman siap pakai ke arus perdana CPython dan untuk membantu projek peningkatan prestasi CPython yang lain.

Facebook menyebut bahawa ia tidak akan menyokong Cinder sebagai projek sumber terbuka yang berasingan dan kod tersebut disajikan dalam bentuk yang digunakan dalam infrastruktur syarikat, tanpa dokumentasi tambahan.

Cinder tidak mempromosikan dirinya sebagai alternatif untuk CPython - matlamat pembangunan utama adalah untuk meningkatkan CPython itu sendiri.

Kod Cinder dianggap boleh dipercayai dan diuji dalam persekitaran pengeluaran, tetapi jika masalah dikenal pasti, mereka perlu diselesaikan sendiri, kerana Facebook tidak menjamin bahawa ia akan bertindak balas terhadap mesej ralat luaran dan tarik permintaan.

Pada masa yang sama, Facebook tidak mengecualikan kerjasama yang membina dengan masyarakat dan bersedia untuk membincangkan idea bagaimana membuat Cinder lebih cepat atau bagaimana mempercepat pemindahan perubahan yang telah disiapkan ke kerangka utama CPython.

Pengoptimuman utama yang dilaksanakan di Cinder adalah:

  • Cache dalam talian Bytecode: Intipati kaedah ini adalah untuk mengenal pasti situasi pelaksanaan opcode biasa yang dapat dioptimumkan secara dinamik dan menggantikan opcode tersebut dengan pilihan khusus yang lebih cepat.
  • Penilaian rutin: Untuk panggilan fungsi tak segerak yang diproses dengan segera, hasil fungsi tersebut diganti secara langsung tanpa membuat coroutine dan tanpa memanggil gelung peristiwa. Dalam kod yang digunakan oleh Facebook, yang banyak digunakannya, pengoptimuman membawa kepada percepatan sekitar 5%.
  • Penyusunan selektif JIT pada tahap kaedah dan fungsi individu: ia diaktifkan dengan pilihan "-X jit" atau pemboleh ubah persekitaran PYTHONJIT = 1 dan membolehkan banyak ujian prestasi dipercepat sebanyak 1,5 hingga 4 kali.
    Senarai fungsi yang harus diaktifkan JIT dapat ditentukan berdasarkan hasil profil. Di masa depan, sokongan untuk penyusunan JIT dinamik berdasarkan analisis dalaman frekuensi panggilan fungsi diharapkan, tetapi mengingat spesifik proses pelancaran di Instagram, penyusunan JIT juga sesuai untuk Facebook pada tahap awal.
    JIT pertama menukar Python bytecode ke perwakilan perantaraan peringkat tinggi (HIR), yang cukup dekat dengan Python bytecode, tetapi direka untuk menggunakan mesin maya berasaskan rekod dan bukannya mesin maya berasaskan rekod. Dalam timbunan, dan juga menggunakan maklumat jenis dan perincian tambahan yang berkaitan dengan prestasi. HIR kemudian diubah menjadi bentuk Static Single Allocation (SSA) dan menjalani tahap pengoptimuman berdasarkan jumlah rujukan dan data penggunaan memori. Hasilnya, perwakilan menengah rendah (LIR) dihasilkan, yang hampir dengan bahasa perhimpunan.
  • Mod yang ketat untuk modul:Fungsinya mempunyai tiga komponen: Jenis StrictModule. Penganalisis statik yang dapat menentukan bahawa pelaksanaan modul tidak mempengaruhi kod di luar modul itu.
  • Python Statik: adalah penyusun bytecode eksperimen yang menggunakan anotasi jenis untuk menghasilkan kod bytec yang khusus untuk setiap jenis dan berjalan lebih pantas melalui penyusunan JIT. Dalam beberapa ujian, gabungan Static Python dan JIT menunjukkan peningkatan prestasi sehingga 7x berbanding CPython biasa. Dalam banyak keadaan, hasilnya dinilai seolah-olah penyusun MyPyC dan Cython digunakan.

Akhirnya sekiranya anda berminat untuk mendapatkan kod Cinder atau ketahui lebih lanjut mengenainya, anda boleh berjumpa dengan perincian dalam pautan berikut.


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.