il rilascio del sistema di gestione dei pacchetti , utilizzato nella distribuzione . Il ramo presentato ha riassunto un lungo lavoro di migrazione a Python 3 e della cessazione del supporto per Python 2.7.
Oltre alla cessazione del supporto per Python 2.7, un'altra importante modifica è stata l'inclusione , che hanno permesso di accelerare i calcoli legati alla determinazione delle dipendenze del 50-60%. È interessante notare che alcuni sviluppatori hanno proposto di riscrivere il codice di risoluzione delle dipendenze in C/C++ o Go per migliorarne le prestazioni, ma siamo riusciti a risolvere il problema senza complicazioni eccessive.
L'esecuzione di un profiling del codice esistente ha mostrato che la maggior parte del tempo speso nei calcoli veniva dedicata alla chiamata delle funzioni use_reduce e catpkgsplit con un insieme ripetuto di argomenti (ad esempio, la funzione catpkgsplit veniva chiamata da 1 a 5 milioni di volte). Per accelerare è stato utilizzato un caching dei risultati di queste funzioni mediante dizionari. La funzione integrata lru_cache era ottimale per la memorizzazione nella cache, ma era disponibile solo nelle versioni di Python a partire dalla 3.2. Per compatibilità con versioni precedenti, è stata aggiunta una dipendenza che sostituisce lru_cache, ma la decisione di cessare il supporto per Python 2.7 in Portage 3.0 ha semplificato notevolmente il lavoro, eliminando la necessità di questo strato intermedio.
L'uso della cache ha ridotto il tempo di esecuzione dell'operazione "emerge -uDvpU —with-bdeps=y @world" su un laptop ThinkPad X220 da 5 minuti e 20 secondi a 3 minuti e 16 secondi (63%). I test su altri sistemi hanno mostrato un incremento delle prestazioni non inferiore al 48%.
Lo sviluppatore che ha preparato la modifica ha anche tentato di implementare un prototipo del codice di risoluzione delle dipendenze in C++ o Rust, ma il compito si è rivelato troppo complesso, richiedendo il porting di un grande volume di codice e, nel contempo, era dubbio che il risultato ottenuto giustificasse gli sforzi impiegati.
Fonte: opennet.ru
