Primeira versão estável do Mold linker, desenvolvido pela LLVM lld

Rui Ueyama, autor do vinculador LLVM lld e do compilador chibicc, apresentou a primeira versão estável do novo vinculador Mold de alto desempenho, que é visivelmente mais rápido que os vinculadores GNU gold e LLVM lld na velocidade de vinculação de arquivos de objeto. O projeto é considerado pronto para implementação em produção e pode ser usado como um substituto mais rápido e transparente para o vinculador GNU em sistemas Linux. Os planos para o próximo grande lançamento incluem a conclusão do suporte para a plataforma macOS, após o qual o trabalho começará na adaptação do Mold para Windows.

Mold é escrito em C++ (C++20) e licenciado sob AGPLv3, que é compatível com GPLv3, mas não compatível com GPLv2, pois requer alterações abertas ao desenvolver serviços de rede. Esta escolha é explicada pelo desejo de obter financiamento para o desenvolvimento - o autor está disposto a vender os direitos do código para relicenciamento sob uma licença permissiva, como o MIT, ou fornecer uma licença comercial separada para aqueles que não estão satisfeitos com a AGPL.

O Mold suporta todos os recursos do vinculador GNU e tem desempenho muito alto - a vinculação é executada a uma velocidade apenas metade da velocidade da simples cópia de arquivos com o utilitário cp. Por exemplo, ao construir o Chrome 96 (tamanho do código 1.89 GB), leva 8 segundos para vincular arquivos executáveis ​​​​com informações de depuração em um computador de 53 núcleos usando GNU gold, LLVM lld - 11.7 segundos e Mold apenas 2.2 segundos (26 vezes mais rápido que Ouro GNU). Ao vincular o Clang 13 (3.18 GB), leva 64 segundos no GNU gold, 5.8 segundos no LLVM lld e 2.9 segundos no Mold. Ao construir o Firefox 89 (1.64 GB), são necessários 32.9 segundos no GNU gold, 6.8 segundos no LLVM lld e 1.4 segundos no Mold.

Primeira versão estável do Mold linker, desenvolvido pela LLVM lld

A redução do tempo de construção pode melhorar significativamente a conveniência do desenvolvimento de grandes projetos, reduzindo a espera no processo de geração de arquivos executáveis ​​ao depurar e testar alterações. A motivação para a criação do Mold foi a frustração de ter que esperar a conclusão da vinculação após cada alteração de código, o baixo desempenho dos vinculadores existentes em sistemas multi-core e o desejo de tentar uma arquitetura de vinculação fundamentalmente diferente sem recorrer a modelos excessivamente complicados, como como vinculação incremental.

O alto desempenho de vinculação de um arquivo executável de um grande número de arquivos de objetos preparados pelo compilador no Mold é obtido usando algoritmos mais rápidos, paralelização ativa de operações entre núcleos de CPU disponíveis e o uso de estruturas de dados mais eficientes. Por exemplo, o Mold implementa técnicas para realizar cálculos intensivos ao copiar arquivos, pré-carregar arquivos de objetos na memória, usar tabelas hash rápidas para resolução de caracteres, verificar tabelas de realocação em um thread separado e desduplicar seções mescladas que são repetidas em arquivos diferentes.

Fonte: opennet.ru

Adicionar um comentário