Das Gentoo-Projekt hat das Paketverwaltungssystem Portage 3.0 vorgestellt

Stabilisiert die Veröffentlichung des Paketverwaltungssystems Portage 3.0, das in der Distribution Gentoo Linuxverwendet wird. Der vorgestellte Branch fasst die langjährige Arbeit am Umstieg auf Python 3 und der Beendigung der Unterstützung für Python 2.7 zusammen.

Neben der Beendigung der Unterstützung für Python 2.7 war eine weitere wichtige Änderung die Einbeziehung von Optimierungen, die es ermöglichten, Berechnungen zur Bestimmung von Abhängigkeiten um 50-60 % zu beschleunigen. Interessanterweise haben einige Entwickler vorgeschlagen, den Code zur Auflösung von Abhängigkeiten in C/C++ oder Go neu zu schreiben, um die Ausführungsgeschwindigkeit zu erhöhen, doch es gelang, das bestehende Problem mit wenig Aufwand zu lösen.

Die Profilierung des vorhandenen Codes zeigte, dass die meiste Zeit bei den Berechnungen für den Aufruf der Funktionen use_reduce und catpkgsplit mit wiederkehrenden Argumenten aufgewendet wurde (zum Beispiel wurde die Funktion catpkgsplit zwischen 1 und 5 Millionen Mal aufgerufen). Um die Geschwindigkeit zu erhöhen, wurde ein Caching der Ergebnisse dieser Funktionen unter Verwendung von Dictionaries implementiert. Die встроенная Funktion lru_cache war optimal für die Speicherung des Caches, aber sie war nur in Python-Versionen ab 3.2 verfügbar. Zur Kompatibilität mit früheren Versionen wurde ein Stub hinzugefügt, der lru_cache ersetzt, aber die Entscheidung, die Unterstützung für Python 2.7 in Portage 3.0 zu beenden, hat die Aufgabe erheblich vereinfacht und ermöglichte es, auf diese zusätzliche Schicht zu verzichten.

Die Verwendung des Caches reduzierte die Ausführungszeit des Befehls „emerge -uDvpU —with-bdeps=y @world“ auf einem ThinkPad X220 von 5 Minuten 20 Sekunden auf 3 Minuten 16 Sekunden (63 %). Tests auf anderen Systemen zeigten eine Leistungssteigerung von mindestens 48 %.

Der Entwickler, der die Änderung vorbereitet hat, versuchte ebenfalls, ein Prototyp des Codes zur Auflösung von Abhängigkeiten in C++ oder Rust zu implementieren, aber die Aufgabe erwies sich als zu anspruchsvoll, da sie die Portierung eines großen Codesatzes erforderte, und es war zudem fraglich, ob das Ergebnis den eingesetzten Aufwand wert gewesen wäre.

Quelle: opennet.ru

60GB SSD 8Gb DDR4