Zlib-rs é mais rápido que C
(trifectatech.org)- zlib-rs é uma implementação de zlib em Rust para compressão de dados, e a recente versão 0.4.2 foi lançada com grandes melhorias de desempenho
- Atualmente é a implementação de zlib compatível com API mais rápida, com destaque especial para o desempenho de descompressão, superior ao de produtos concorrentes
- Principais melhorias de desempenho: seleção automática, em tempo de execução, da melhor implementação SIMD, aplicação de otimizações de DFA etc.
Multiversionamento (Multiversioning)
- Em tempo de execução, seleciona automaticamente a versão de função mais rápida de acordo com a CPU
- No Rust, não há suporte nativo a multiversionamento, então isso precisa ser implementado manualmente
- Oferece desempenho ideal minimizando o overhead em tempo de execução do código
Otimização de DFA (Deterministic Finite Automata)
- A linguagem C melhora o desempenho usando fallthrough implícito em instruções
switch - No Rust, não existe um mecanismo semelhante, o que causa perda de desempenho
- Aplicação da opção
-Cllvm-args=-enable-dfa-jump-threaddo LLVM → recuperação de desempenho - Ainda não faz parte da configuração padrão do LLVM, mas deve ser ativada por padrão no Rustc no futuro
Comparação de desempenho em benchmark
1. Comparação de desempenho com zlib-ng
- zlib-rs apresenta desempenho mais rápido que o zlib-ng na maioria dos tamanhos de entrada
- Em especial, é cerca de 10% mais rápido com entrada de 1 KB e cerca de 6% mais rápido com entrada de 65 KB
- Fica ligeiramente atrás nos menores tamanhos de entrada, mas em geral mantém vantagem de desempenho
Por exemplo:
- Quando o tamanho de entrada é de 4 bytes, o zlib-ng é ligeiramente mais rápido, mas isso tem pouco impacto no uso real
- Quando o tamanho de entrada é de 1 KB, o zlib-rs é cerca de 10% mais rápido
- Quando o tamanho de entrada é de 65 KB, o zlib-rs é cerca de 6% mais rápido
→ Vantagem clara de desempenho sobre o zlib-ng em chunks grandes
2. Comparação de desempenho com zlib-chromium
- Em chunks pequenos, o zlib-chromium é mais rápido
- Mas em chunks grandes, o zlib-rs leva vantagem
- Em entradas de tamanho comum, o zlib-rs oferece melhor desempenho
Por exemplo:
- Quando o tamanho de entrada é de 4 bytes, o zlib-chromium é cerca de 12% mais rápido
- Quando o tamanho de entrada é de 16 bytes, o zlib-chromium é cerca de 6% mais rápido
- Quando o tamanho de entrada é de 1 KB ou mais, o zlib-rs tem vantagem de desempenho
→ zlib-rs tem vantagem de desempenho em tamanhos comuns
Comparação de desempenho de compressão
- O desempenho de compressão está melhorando, mas os resultados ainda são mistos
- Melhoria de 6% no nível de compressão padrão (6) e melhoria de 13% no nível máximo de compressão (9)
- Em outros níveis de compressão, o zlib-ng ainda é mais rápido
Por exemplo:
- No nível de compressão 6, o zlib-rs é cerca de 6% mais rápido que o zlib-ng
- No nível de compressão 9, o zlib-rs é cerca de 13% mais rápido que o zlib-ng
- Mas nos níveis de compressão 1 a 4, o zlib-ng leva vantagem
Conclusão
- zlib-rs tem vantagem de desempenho em descompressão sobre zlib-ng e zlib-chromium
- O desempenho de compressão ainda está em evolução, mas já mostra ganhos significativos nos principais níveis de compressão
- Pode ser usado tanto em projetos Rust quanto C
- Rust → usar a flag
zlib-rsno crateflate2 - C → pode ser usado após compilação como biblioteca dinâmica
- Rust → usar a flag
1 comentários
Comentários do Hacker News
Percebi que já sei Rust
unsafe“Mais rápido que C” acaba se resumindo a design, implementação, algoritmo etc.
zippyem Nim afirma ser de 1,5x a 2x mais rápido quezlibzlibem C que são mais rápidas que a instalação padrãozlibé antiquado hoje em dia, mas ainda continua popularFico curioso se o desempenho do Rust tem a ver com o próprio Rust ou se é só uma versão mais otimizada do que outras implementações em C
O Chromium usa
zlibpor causa de algoritmos presentes no padrãoZstandardé mais rápido e também comprime melhorLZ4é muito mais rápido, mas o tamanho não fica tão pequenoZstandarde digestblake3são permitidosÉ mais correto dizer que Rust é tão rápido quanto C
Qual biblioteca compila mais rápido
Usuários de Rust gostam de comparar Rust e C, mas usuários de C raramente comparam C e Rust
Ao lidar com linguagens de sistema compiladas, a linguagem quase não afeta a velocidade
O significado é que a implementação é mais rápida do que em C