Das Gentoo-Projekt führte das Paketverwaltungssystem Portage 3.0 ein

Stabilisiert Version des Paketverwaltungssystems Transport 3.0, in der Verteilung verwendet Gentoo Linux. Der vorgestellte Thread fasste die langfristige Arbeit an der Umstellung auf Python 3 und dem Ende der Unterstützung für Python 2.7 zusammen.

Neben dem Ende der Unterstützung für Python 2.7 war eine weitere wichtige Änderung die Aufnahme von Optimierungen, was es ermöglichte, Berechnungen zur Ermittlung von Abhängigkeiten um 50-60 % zu beschleunigen. Interessanterweise schlugen einige Entwickler vor, den Code zur Abhängigkeitsauflösung in C/C++ oder Go neu zu schreiben, um seine Funktionsweise zu beschleunigen, aber es gelang ihnen, das bestehende Problem mit geringem Aufwand zu lösen.

Die Profilierung des vorhandenen Codes zeigte, dass die meiste Berechnungszeit damit verbracht wurde, die Funktionen use_reduce und catpkgsplit mit einem sich wiederholenden Satz von Argumenten aufzurufen (z. B. wurde die Funktion catpkgsplit 1 bis 5 Millionen Mal aufgerufen). Um die Arbeit zu beschleunigen, wurde die Zwischenspeicherung der Ergebnisse dieser Funktionen mithilfe von Wörterbüchern verwendet. Die beste Option für die Cache-Speicherung war die integrierte Funktion lru_cache, die jedoch nur in Python-Versionen ab 3.2 verfügbar war. Aus Kompatibilitätsgründen mit früheren Versionen wurde ein Stub hinzugefügt, um lru_cache zu ersetzen. Die Entscheidung, die Unterstützung für Python 2.7 in Portage 3.0 einzustellen, vereinfachte die Aufgabe jedoch erheblich und ermöglichte den Verzicht auf diese Ebene.

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

Der Entwickler, der die Änderung vorbereitete, versuchte auch, einen Prototyp des Abhängigkeitsauflösungscodes in C++ oder Rust zu implementieren, aber die Aufgabe war zu schwierig, da sie die Portierung einer großen Codemenge erforderte, und es war zweifelhaft, ob das Ergebnis den Aufwand wert sein würde .

Source: opennet.ru

Kommentar hinzufügen