ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Gentoo прСдставил систСму управлСния ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ Portage 3.0

Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€Π²Π°Π½ выпуск систСмы управлСния ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ Portage 3.0, примСняСмой Π² дистрибутивС Gentoo Linux. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½Π°Ρ Π²Π΅Ρ‚ΠΊΠ° ΠΏΠΎΠ΄Π²Π΅Π»Π° ΠΈΡ‚ΠΎΠ³ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρƒ Π½Π° Python 3 ΠΈ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Python 2.7.

ΠšΡ€ΠΎΠΌΠ΅ прСкращСния ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Python 2.7, Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ стало Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ²ΡˆΠΈΡ… Π½Π° 50-60% ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ вычислСния, связанныС с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ зависимостСй. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ зависимостСй Π½Π° C/C++ ΠΈΠ»ΠΈ Go для ускорСния Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½ΠΎ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π²ΡˆΡƒΡŽΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠ°Π»ΠΎΠΉ ΠΊΡ€ΠΎΠ²ΡŒΡŽ.

ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ профилирования имСвшСгося ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ, Ρ‡Ρ‚ΠΎ основноС врСмя ΠΏΡ€ΠΈ вычислСниях тратится Π½Π° Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ use_reduce ΠΈ catpkgsplit с ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠΌΡΡ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, функция catpkgsplit Π²Ρ‹Π·Ρ‹Π²Π°Π»Π°ΡΡŒ ΠΎΡ‚ 1 Π΄ΠΎ 5 ΠΌΠ»Π½ Ρ€Π°Π·). Для ускорСния Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΎ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с использованиСм словарСй. ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ для хранСния кэша Π±Ρ‹Π»Π° встроСнная функция lru_cache, Π½ΠΎ ΠΎΠ½Π° Π±Ρ‹Π»Π° доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² выпусках Python, начиная с 3.2. Для совмСстимости с Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠΌΠΈ вСрсиями Π±Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π·Π°Π³Π»ΡƒΡˆΠΊΠ°, ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡŽΡ‰Π°Ρ lru_cache, Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Python 2.7 Π² Portage 3.0 сильно упростило Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· Π΄Π°Π½Π½ΠΎΠΉ прослойки.

ИспользованиС кэша ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ врСмя выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ «emerge -uDvpU —with-bdeps=y @world» Π½Π° Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅ ThinkPad X220 с 5 ΠΌΠΈΠ½ΡƒΡ‚ 20 сСкунд Π΄ΠΎ 3 ΠΌΠΈΠ½ΡƒΡ‚ 16 сСкунд (63%). ВСсты Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… систСмах ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅ Π½ΠΈΠΆΠ΅ 48%.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ²ΡˆΠΈΠΉ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‚Π°ΠΊΠΆΠ΅ попытался Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ ΠΊΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ зависимостСй Π½Π° C++ ΠΈΠ»ΠΈ Rust, Π½ΠΎ Π·Π°Π΄Π°Ρ‡Π° оказалась слишком слоТной, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π° портирования большого ΠΎΠ±ΡŠΡ‘ΠΌΠ° ΠΊΠΎΠ΄Π°, ΠΈ, ΠΏΡ€ΠΈ этом, Π±Ρ‹Π»ΠΎ ΡΠΎΠΌΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ стоил Π±Ρ‹ ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… усилий.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru