Lançamento estável do Portage 3.0 já anunciado

Desenvolvedores recentemente que são responsáveis ​​pelo sistema de gerenciamento de pacotes Carreto (na distribuição Gentoo Linux) anunciou o lançamento da versão estável da versão 3.0.

Em que, a principal novidade deste novo ramo apresentado, é o trabalho que foi realizado a longo prazo na transição para Python 3 e fim do suporte para Python 2.7 (algo que já vinha acontecendo há muito tempo, já que este ramo ficou oficialmente sem suporte por vários meses)

Temos boas notícias! O projeto Gentoo Portage estabilizou recentemente a versão 3.0 do gerenciador de pacotes.

O que há de novo? Bem, esta terceira versão do Portage remove o suporte para Python 2.7, que tem sido um esforço contínuo no repositório principal do Gentoo pelo projeto Gentoo Python ao longo de 2020.

Além da descontinuação do suporte para Python 2.7, outra grande mudança que se destaca neste novo ramo estável do Portage 3.0 foi a inclusão de várias otimizações que eles permitiram faça cálculos muito mais rápido (entre 50% e 60%) associado à determinação de dependências.

Curiosamente, alguns desenvolvedores sugeriram reescrever o código de resolução de dependência em C / C ++ ou Go para acelerar seu trabalho, mas eles conseguiram resolver o problema existente com grande esforço.

E é que o perfil do código existente mostrou que na maioria das vezes Cálculo é dedicado a chamar as funções use_reduce e catpkgsplit com um conjunto repetido de argumentos (a pessoa que liderou este trabalho menciona que, por exemplo, a função catpkgsplit foi chamada de 1 a 5 milhões de vezes).

Com o problema detectado, mencione que para agilizar os cálculos, cache foi aplicado do resultado dessas funções por meio de dicionários.

Além disso, devido a um patch fornecido pelo usuário, atualizar para a versão mais recente do Portage pode acelerar muito os cálculos de dependência em 50-60%. Adoramos ver nossa comunidade participando de nosso software! Para obter mais detalhes, verifique esta postagem do Reddit do membro da comunidade que forneceu o patch. Fique saudável e continue cozinhando com o Gentoo!

Além disso também observa que a função integrada lru_cache era ótima para esta tarefa de cache, mas estava disponível apenas nas versões Python desde 3.2.

Para compatibilidade com versões anteriores, um stub também foi adicionado para substituir lru_cache, mas a decisão de encerrar o suporte ao Python 2.7 no Portage 3.0 simplificou muito a tarefa e tornou possível ignorar essa camada.

Passei algum tempo criando o perfil do Portage com cProfile e vmprof para entender quais recursos estavam demorando mais. Eu também gerei alguns flamegraphs a partir dos resultados do profiler, que se parecem com isto. O que percebi foi que algumas funções, como use_reducecatpkgsplit, são chamados muito frequentemente com os mesmos argumentos (como, 1 a 5 milhões de vezes, para catpkgsplit) Eu fiz alguns experimentos para armazenar em cache os resultados dessas funções em um ditado, e depois de ver alguns bons aceleramentos, enviei um patch para a lista de desenvolvedores do Portage. Alguém sugeriu o uso de Python integradolru_cache em vez disso, decorador de função, mas só está disponível no Python 3.2 e superior.

Por outro lado, o uso do cache reduziu a operação "emerge -uDvpU –with-bdeps = y @world" no ThinkPad X220 de 5 minutos 20 segundos para 3 minutos e 16 segundos (63%). Testes em outros sistemas mostraram um ganho de desempenho de pelo menos 48%.

O desenvolvedor que preparou a mudança também tentou implementar um protótipo do código de resolução de dependência em C ++ ou Rust, mas a tarefa acabou sendo muito difícil, já que exigia portar uma grande quantidade de código e ao mesmo tempo era duvidoso se o resultado valesse o esforço.

Finalmente se você quiser saber mais sobre isso Sobre a nota de lançamento deste branch estável, você pode verificar os detalhes no link a seguir.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: AB Internet Networks 2008 SL
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.