Het Gentoo-project introduceerde het Portage 3.0-pakketbeheersysteem

Gestabiliseerd pakketbeheersysteem release Overdragen 3.0, gebruikt bij de distributie Gentoo Linux. De gepresenteerde thread vatte het langetermijnwerk samen over de transitie naar Python 3 en het einde van de ondersteuning voor Python 2.7.

Naast het einde van de ondersteuning voor Python 2.7 was een andere belangrijke verandering de opname van optimalisaties, waardoor het mogelijk werd de berekeningen met betrekking tot het bepalen van afhankelijkheden met 50-60% te versnellen. Interessant is dat sommige ontwikkelaars voorstelden om de afhankelijkheidsresolutiecode in C/C++ of Go te herschrijven om de werking ervan te versnellen, maar ze slaagden erin het bestaande probleem met weinig moeite op te lossen.

Uit het profileren van de bestaande code bleek dat het grootste deel van de rekentijd werd besteed aan het aanroepen van de functies use_reduce en catpkgsplit met een herhalende reeks argumenten (de functie catpkgsplit werd bijvoorbeeld 1 tot 5 miljoen keer aangeroepen). Om de zaken te versnellen, werd gebruik gemaakt van het cachen van de resultaten van deze functies met behulp van woordenboeken. De beste optie voor cacheopslag was de ingebouwde lru_cache-functie, maar deze was alleen beschikbaar in Python-releases vanaf 3.2. Voor compatibiliteit met eerdere versies werd een stub toegevoegd om lru_cache te vervangen, maar de beslissing om de ondersteuning voor Python 2.7 in Portage 3.0 stop te zetten, vereenvoudigde de taak aanzienlijk en maakte het mogelijk om zonder deze laag te doen.

Het gebruik van de cache verminderde de uitvoeringstijd van de bewerking β€œemerge -uDvpU β€”with-bdeps=y @world” op de ThinkPad X220-laptop van 5 minuten 20 seconden naar 3 minuten 16 seconden (63%). Tests op andere systemen lieten een prestatieverbetering zien van minimaal 48%.

De ontwikkelaar die de wijziging heeft voorbereid, probeerde ook een prototype van de afhankelijkheidsresolutiecode in C++ of Rust te implementeren, maar de taak was te moeilijk omdat er een grote hoeveelheid code voor nodig was, en het was twijfelachtig of het resultaat de moeite waard zou zijn. .

Bron: opennet.ru

Voeg een reactie