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

Stabilizzato il rilascio del sistema di gestione dei pacchetti Portage 3.0, utilizzato nella distribuzione Gentoo Linux. 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 di ottimizzazioni, 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

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster