Il progetto Gentoo ha introdotto il sistema di gestione dei pacchetti Portage 3.0

Stabilizzato rilascio del sistema di gestione dei pacchetti Portage 3.0, utilizzato nella distribuzione Gentoo Linux. Il thread presentato ha riassunto il lavoro a lungo termine sulla transizione a Python 3 e la fine del supporto per Python 2.7.

Oltre alla fine del supporto per Python 2.7, un altro cambiamento importante è stata l'inclusione di ottimizzazioni, che ha permesso di accelerare i calcoli relativi alla determinazione delle dipendenze del 50-60%. È interessante notare che alcuni sviluppatori hanno suggerito di riscrivere il codice di risoluzione delle dipendenze in C/C++ o Go per velocizzarne il funzionamento, ma sono riusciti a risolvere il problema esistente con poco sforzo.

La profilazione del codice esistente ha mostrato che la maggior parte del tempo di calcolo Γ¨ stato impiegato chiamando le funzioni use_reduce e catpkgsplit con un insieme ripetuto di argomenti (ad esempio, la funzione catpkgsplit Γ¨ stata chiamata da 1 a 5 milioni di volte). Per velocizzare le cose, Γ¨ stata utilizzata la memorizzazione nella cache dei risultati di queste funzioni utilizzando i dizionari. L'opzione migliore per l'archiviazione della cache era la funzione integrata lru_cache, ma era disponibile solo nelle versioni Python a partire dalla 3.2. Per compatibilitΓ  con le versioni precedenti, Γ¨ stato aggiunto uno stub per sostituire lru_cache, ma la decisione di interrompere il supporto per Python 2.7 in Portage 3.0 ha notevolmente semplificato il compito e ha reso possibile fare a meno di questo livello.

L'utilizzo della cache ha ridotto il tempo di esecuzione dell'operazione "emerge -uDvpU β€”with-bdeps=y @world" sul laptop ThinkPad X220 da 5 minuti e 20 secondi a 3 minuti e 16 secondi (63%). Test su altri sistemi hanno mostrato un aumento delle prestazioni di almeno il 48%.

Lo sviluppatore che ha preparato la modifica ha anche provato a implementare un prototipo del codice di risoluzione delle dipendenze in C++ o Rust, ma il compito era troppo difficile perchΓ© richiedeva il porting di una grande quantitΓ  di codice, ed era dubbio che il risultato valesse lo sforzo .

Fonte: opennet.ru

Aggiungi un commento