Foram publicados os resultados da avaliação do impacto no desempenho da recompilação de pacotes para Ubuntu com várias opções e implementações de funções de alocação de memória. O experimentador conseguiu aumentar em 90% (1,9 vezes) o desempenho do pacote jq, uma ferramenta para processamento de dados em formato JSON, através da recompilação normal a partir do mesmo pacote com código-fonte, sem modificar o próprio código. O desempenho foi avaliado medindo o tempo de execução de uma consulta filtro padrão sobre dados GeoJSON com 500MB.
Resultados do experimento:
- A versão compilada em GCC a partir dos mesmos fontes com as flags padrão se mostrou 2-4% mais rápida que o pacote binário do Ubuntu.
- A recompilação com Clang 18, usando nível de otimização '-O3', habilitando a otimização no estágio de vinculação ('-flto') e desativando as informações de depuração ('-DNDEBUG') resultou em uma aceleração de 20%.
- A recompilação com o sistema de alocação de memória TCMalloc (adicionando '-L/usr/lib/x86_64-linux-gnu -ltcmalloc_minimal' em LDFLAGS) levou a uma aceleração de 40%.
- A substituição das funções malloc pelos sistemas de alocação de memória tcmalloc, jemalloc e mimalloc através de 'LD_PRELOAD=/usr/lib/x86_64-linux-gnu/lib….so' resultou em aumentos de desempenho de 27%, 29% e 44%. Ao executar com mimalloc, que apresentou uma aceleração de 44%, a variável de ambiente 'MIMALLOC_LARGE_OS_PAGES=1' foi configurada.
- A recompilação do pacote com mimalloc em LDFLAGS, ao invés de vinculação através de LD_PRELOAD, resultou em uma aceleração no teste de 90%. Outro teste de processamento de 2,2GB de dados JSON em 13000 arquivos também mostrou um aumento de desempenho de aproximadamente duas vezes.
Fonte: opennet.ru
