Праект 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

Дадаць каментар