Facebook ha rilasciato il codice sorgente di Cinder che viene utilizzato da Instagram

Facebook svelato recentemente tramite un post, rilasciando il codice sorgente del progetto Cinder, che è un fork del ramo CPython e l'implementazione di riferimento principale del linguaggio di programmazione Python.

tizzone utilizzato nell'infrastruttura di produzione di Facebook per alimentare Instagram e include ottimizzazioni per migliorare le prestazioni. Il codice è stato pubblicato per discutere la possibilità di migrare ottimizzazioni già pronte al mainstream di CPython e per aiutare altri progetti di miglioramento delle prestazioni di CPython.

Facebook afferma che non supporterà Cinder come progetto open source separato e il codice è presentato nella forma in cui è utilizzato nell'infrastruttura dell'azienda, senza ulteriore documentazione.

Nemmeno Cinder si sta promuovendo come alternativa a CPython: l'obiettivo principale dello sviluppo è migliorare lo stesso CPython.

Il codice di Cinder è considerato ragionevolmente affidabile e testato in ambienti di produzione, ma se vengono identificati problemi, dovranno essere risolti da soli, poiché Facebook non garantisce che risponderà ai messaggi di errore esterni e pull richieste.

Allo stesso tempo, Facebook non esclude una cooperazione costruttiva con la comunità ed è pronto a discutere idee su come rendere Cinder ancora più veloce o su come accelerare il trasferimento delle modifiche preparate al framework principale di CPython.

Le principali ottimizzazioni implementate in Cinder sono:

  • Memorizzazione nella cache in linea di bytecode: L'essenza del metodo è identificare le tipiche situazioni di esecuzione del codice operativo che possono essere ottimizzate dinamicamente e sostituire tale codice operativo con opzioni specializzate più veloci.
  • Valutazione di routine: Per le chiamate di funzione asincrone che vengono elaborate immediatamente, il risultato di tali funzioni viene sovrascritto direttamente senza creare una coroutine e senza richiamare un ciclo di eventi. Nel codice utilizzato da Facebook, che utilizza pesantemente, l'ottimizzazione porta ad un'accelerazione di circa il 5%.
  • Compilazione selettiva di JIT a livello di metodi e funzioni individuali: è abilitato dall'opzione "-X jit" o dalla variabile d'ambiente PYTHONJIT = 1 e consente di velocizzare molti test delle prestazioni da 1,5 a 4 volte.
    L'elenco delle funzioni per le quali deve essere abilitato JIT può essere determinato in base ai risultati del profilo. In futuro è previsto il supporto per la compilazione JIT dinamica basata sull'analisi interna della frequenza delle chiamate di funzione, ma considerando le specificità dei processi di lancio su Instagram, la compilazione JIT è adatta anche per Facebook nella fase iniziale.
    Il JIT converte prima il bytecode di Python in una rappresentazione intermedia di alto livello (HIR), che è ragionevolmente vicino al bytecode di Python, ma è progettato per utilizzare una macchina virtuale basata su record piuttosto che una macchina virtuale basata su record. In stack, e anche utilizza informazioni sul tipo e dettagli aggiuntivi rilevanti per le prestazioni. L'HIR viene quindi convertito in un modulo SSA (Static Single Allocation) e viene sottoposto a fasi di ottimizzazione in base al conteggio dei riferimenti e ai dati sull'utilizzo della memoria. Di conseguenza, viene generata una rappresentazione intermedia di basso livello (LIR), che è vicina al linguaggio assembly.
  • Modalità rigorosa per i moduli:La funzionalità ha tre componenti: Il tipo StrictModule. Un analizzatore statico in grado di determinare che l'esecuzione di un modulo non influisce sul codice esterno a quel modulo.
  • Python statico: è un compilatore di bytecode sperimentale che utilizza annotazioni di tipo per generare bytecode specifico per ogni tipo e funziona più velocemente attraverso la compilazione JIT. In alcuni test, la combinazione di Static Python e JIT dimostra un miglioramento delle prestazioni fino a 7 volte rispetto al tipico CPython. In molte situazioni, i risultati vengono valutati come se fossero stati utilizzati i compilatori MyPyC e Cython.

Infine se sei interessato a poter ottenere il codice Cinder o saperne di più, puoi consultare il dettagli nel seguente collegamento.


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.