Ontem postei benchmarks de seis distribuições Linux no HP Dev One, o novo e empolgante laptop Linux lançado pela HP em colaboração com o System76 que está usando sua distribuição Pop!_OS. A partir desses benchmarks, uma das descobertas bizarras foi que o desempenho de compactação do Zstd no Arch Linux simplesmente era péssimo, mas alguns desenvolvedores interessados ​​mergulharam e encontraram o culpado bastante bizarro pelo qual o desempenho do Zstd é tão ruim em relação a outras distribuições Linux na mesma versão.

O desempenho do binário zstd fornecido pelo Arch Linux foi dolorosamente lento em relação a outras distribuições Linux neste mesmo laptop… Muito mais lento do que as outras distribuições Linux testadas no mesmo hardware exato e todas as distribuições usando seu binário Zstd fornecido pelo sistema para esses benchmarks:

Mas os resultados foram reproduzíveis, repetidos várias vezes, e eu estou atrás dos benchmarks. Apesar de ser esticado para chegar ao fim (considere desligar seu bloqueador de anúncios! Ou ingressar no Phoronix Premium para visualização sem anúncios e outros benefícios), não tive tempo/recursos para aprofundar esse problema específico com rotineiramente (praticamente diariamente) encontrando peculiaridades de desempenho semelhantes com hardware/software diferente no Linux.

Felizmente, alguns desenvolvedores ansiosos do Arch Linux analisaram isso neste artigo e descobriram a razão surpreendente pela qual o desempenho do Zstd era escandalosamente lento:

O sistema de compilação (mais ou menos). > Hã? Não, não é uma diferença de sinalizadores do compilador para ajustar a otimização ou nível… Arch Linux usa o sistema de compilação CMake do Zstd para compilar seu pacote, enquanto o Ubuntu e outras distribuições Linux geralmente usam a compilação Makefile simples fornecida pelo Zstd. O Zstd também fornece suporte ao sistema de compilação Meson. Os desenvolvedores do Arch Linux descobriram que usar o CMake para compilar o Zstd levou a uma velocidade de compactação mais lenta do Zstd, mas se usar o make convencional, o desempenho foi o esperado (o Meson também regrediu).

Então, como diabos o sistema de compilação está interferindo no desempenho binário resultante se não for uma diferença de nível de otimização? É aqui que fica ainda mais estranho e outro exemplo do impacto que o suporte a vários sistemas de compilação pode ter no projeto…

O sistema de compilação do CMake para Zstd acaba adicionando o”-std=c99“onde os outros sistemas de compilação não especificam o uso do padrão C99. Surpreendentemente, ter esse padrão C99 especificado é o que acabou causando essa grande diferença de desempenho… não parece ser uma explicação sólida. De qualquer forma, é um bug do Zstd que produz um comportamento fundamental diferente com base em qual dos sistemas de compilação suportados é usado.

Os desenvolvedores testaram a compilação baseada em CMake sem especificar o”-std=c99″e ela produziu um desempenho semelhante aos binários Zstd produzidos pelos sistemas de compilação alternativos. Alternativamente, a configuração de C11 também estava bem.

O grande trabalho envolvido pelos desenvolvedores/contribuidores do Arch Linux (Arvid Norlander, Antonio Rojas, etc) é apresentado através de seus Relatório de bug do Arch Linux e também ter relatado para Zstd como um problema upstream. Esperamos que o Zstd, por sua vez, altere sua versão padrão da linguagem C para o CMake para corresponder ao comportamento de seus outros sistemas de compilação ou unificar melhor o manuseio das coisas.

O Arch Linux pelo menos tem uma solução simples, então deve ser capaz de enviar uma correção para seus usuários em breve para fornecer um desempenho muito melhor.

Categories: IT Info