O binding Python do OpenDAL é mais lento que Python?
- OpenDAL é uma camada de acesso a dados que permite buscar dados de forma eficiente em vários serviços de armazenamento.
- Há relatos de que o binding Python do OpenDAL é mais lento que o próprio Python.
- Levanta-se a hipótese de que o cache interno do Python, a aceleração de leitura de arquivos e a sobrecarga adicional do PyO3 possam ser as causas.
O serviço Fs do OpenDAL é mais lento que Python?
- É um problema que envolve vários elementos, como Rust, OpenDAL, Python e PyO3.
- Também foi constatado que o serviço fs do OpenDAL, implementado em Rust, é mais lento que Python.
O std::fs do Rust é mais lento que Python?
- O OpenDAL implementa o serviço fs por meio de
std::fs. - Confirmou-se que a implementação usando
std::fsdo Rust também é mais lenta que Python.
O std::fs do Rust é mais lento que Python? Sério!?
- O resultado de que o
std::fsdo Rust é mais lento que Python é questionado. - Aprende-se a analisar chamadas de sistema usando
strace. - Ao analisar o resultado do
strace, não se encontra a razão de Python ser mais rápido, mesmo que ambos usemmmap.
Por que usar mmap aqui?
mmapé usado não apenas para mapear arquivos na memória, mas também para alocar grandes regiões de memória.- Ao solicitar memória com
malloc, oglibcusammappara alocar memória.
Python tem o mesmo alocador de memória que Rust?
- Python usa um alocador de memória chamado
pymalloc, otimizado para pequenas alocações. - O
pymallocé otimizado para objetos pequenos, e para grandes alocações usaPyMem_RawMalloc()ePyMem_RawRealloc().
Rust é mais lento que Python com o alocador de memória padrão?
- Suspeita-se que
mmapseja a causa do problema. - Descobre-se que um programa Rust que troca para
jemallocpassa a rodar mais rápido que Python.
Rust é mais lento que Python só no meu computador!
- O fato de Rust rodar mais devagar que Python acontece apenas em um computador específico.
- São fornecidas informações detalhadas sobre a CPU e a memória.
- Mesmo ajustando mitigação de vulnerabilidades da CPU, Transparent Hugepage e afinidade de núcleos da CPU, não há mudança no resultado.
- Usando um programa eBPF, confirma-se que Rust é mais lento que Python até no nível de chamadas de sistema.
C é mais lento que Python?
- Descobre-se que a versão implementada em C também é mais lenta que Python.
C é mais lento que Python? Sem offset especificado!
- Descobre-se uma diferença no offset da região de memória e, ao ajustar esse offset, o desempenho do programa em C melhora.
- Confirma-se que, em CPUs AMD Ryzen, há queda de desempenho sem um offset específico.
O AMD Ryzen 9 5900X é lento sem o offset especificado!
- Confirma-se que é um problema relacionado à CPU, e um desenvolvedor do kernel entra na discussão.
- Com profiling usando
perf, confirma-se novamente que há queda de desempenho sem o offset.
Opinião do GN⁺: O ponto mais importante deste texto é que Rust e C podem rodar mais lentamente que Python em certos ambientes de hardware, e isso pode estar ligado à alocação de memória e a comportamentos específicos da CPU. O texto mostra, ao explorar os vários fatores que afetam o desempenho de software, o quão complexa pode ser a interação entre hardware e software. Essa investigação oferece uma lição importante para resolver problemas inesperados que podem surgir no mundo da engenharia de software.
1 comentários
Comentários do Hacker News
Opinião sobre uma premissa confusa
Discussão sobre flags de recursos da CPU
Link para bug relacionado no glibc
Reação positiva ao artigo
Grande elogio ao artigo
Sugestão para resolver o problema
Informação sobre o alocador padrão do Rust
Considerações de desenvolvedores Rust para melhorar desempenho
Explicação sobre diferenças de CPU entre AMD e Intel
Compartilhamento do artigo com as pessoas certas