Gentoo プロジェクトは Portage 3.0 パッケージ管理システムを導入しました

安定化 パッケージ管理システムのリリース ポーテージ 3.0、配布で使用されます Gentoo Linux。提示されたスレッドでは、Python 3 への移行と Python 2.7 のサポート終了に関する長期的な作業が要約されました。

Python 2.7 のサポート終了に加えて、もう XNUMX つの重要な変更として、 最適化これにより、依存関係の決定に関連する計算を 50 ~ 60% 高速化することができました。興味深いことに、一部の開発者は、動作を高速化するために C/C++ または Go で依存関係解決コードを書き直すことを提案しましたが、ほとんど努力せずに既存の問題を解決することができました。

既存のコードをプロファイリングすると、計算時間のほとんどが、引数の繰り返しセットを使用した use_reduce 関数と catpkgsplit 関数の呼び出しに費やされていることがわかりました (たとえば、catpkgsplit 関数は 1 万回から 5 万回呼び出されています)。処理を高速化するために、辞書を使用したこれらの関数の結果のキャッシュを使用しました。キャッシュ ストレージの最適なオプションは組み込みの lru_cache 関数でしたが、これは 3.2 以降の Python リリースでのみ使用できました。以前のバージョンとの互換性を保つために、lru_cache を置き換えるスタブが追加されましたが、Portage 2.7 で Python 3.0 のサポートを中止する決定により、タスクが大幅に簡素化され、このレイヤーなしで実行できるようになりました。

キャッシュを使用すると、ThinkPad X220 ラップトップでの「emerge -uDvpU —with-bdeps=y @world」操作の実行時間が 5 分 20 秒から 3 分 16 秒 (63%) に短縮されました。他のシステムでのテストでは、少なくとも 48% のパフォーマンスの向上が示されました。

変更を準備した開発者は、依存関係解決コードのプロトタイプを C++ または Rust で実装しようとしましたが、大量のコードを移植する必要があるため、作業が非常に困難であり、結果が努力に値するかどうかは疑問でした。 。

出所: オープンネット.ru