¿El binding de Python de OpenDAL es más lento que Python?
- OpenDAL es una capa de acceso a datos que permite recuperar datos de distintos servicios de almacenamiento de forma eficiente.
- Hay reportes de que el binding de Python de OpenDAL es más lento que Python en sí.
- Se plantea como hipótesis que la causa podría ser la caché interna de Python, la aceleración de lectura de archivos y la sobrecarga adicional de PyO3.
¿El servicio Fs de OpenDAL es más lento que Python?
- Es un problema en el que intervienen varios factores, como Rust, OpenDAL, Python y PyO3.
- También se descubrió que el servicio fs de OpenDAL implementado en Rust es más lento que Python.
¿Rust std fs es más lento que Python?
- OpenDAL implementa el servicio fs mediante
std::fs. - Se confirmó que una implementación usando
std::fsde Rust también es más lenta que Python.
¿Rust std fs es más lento que Python? ¿En serio!?
- Se pone en duda el resultado de que Rust std fs sea más lento que Python.
- Se aprende a analizar llamadas al sistema usando
strace. - A través del análisis de los resultados de
strace, no se logra encontrar por qué Python es más rápido aunque ambos usanmmap.
¿Por qué se usa mmap aquí?
mmapno solo se usa para mapear archivos en memoria, sino también para asignar grandes regiones de memoria.- Al solicitar memoria con
malloc,glibcusammappara asignarla.
¿Python tiene el mismo asignador de memoria que Rust?
- Python usa un asignador de memoria llamado
pymalloc, optimizado para asignaciones pequeñas. pymallocestá optimizado para objetos pequeños, y para asignaciones grandes usaPyMem_RawMalloc()yPyMem_RawRealloc().
¿Rust con el asignador de memoria predeterminado es más lento que Python?
- Se sospecha que
mmapestá causando el problema. - Se descubre que un programa Rust que cambia a
jemallocfunciona más rápido que Python.
¿Rust solo es más lento que Python en mi computadora?
- El hecho de que Rust funcione más lento que Python ocurre solo en una computadora específica.
- Se proporciona información detallada sobre la CPU y la memoria.
- Incluso ajustando funciones de mitigación de vulnerabilidades de la CPU, Transparent Hugepage y la afinidad de núcleos de CPU, no hay cambios en el resultado.
- Se confirma usando un programa eBPF que Rust es más lento que Python incluso al nivel de llamadas al sistema.
¿C es más lento que Python?
- También se descubre que una versión implementada en C es más lenta que Python.
¿C es más lento que Python? ¡Sin offset especificado!
- Se descubre una diferencia en el offset de la región de memoria, y al ajustar el offset mejora la velocidad del programa en C.
- Se confirma que en una CPU AMD Ryzen ocurre una degradación de rendimiento sin cierto offset.
¿AMD Ryzen 9 5900X es lento sin offset especificado?
- Se confirma que es un problema relacionado con la CPU, y un desarrollador del kernel participa en la discusión.
- A través de perfiles con
perf, se vuelve a confirmar que sin offset ocurre una degradación de rendimiento.
Opinión de GN⁺: El punto más importante de este artículo es que Rust y C pueden funcionar más lento que Python en ciertos entornos de hardware, y que esto puede deberse a la asignación de memoria y a formas específicas de funcionamiento de la CPU. El artículo muestra, mediante la exploración de diversos factores que afectan el rendimiento del software, cuán compleja puede ser la interacción entre hardware y software. Esta investigación ofrece una lección importante para resolver problemas inesperados que pueden surgir en el mundo de la ingeniería de software.
1 comentarios
Opiniones de Hacker News
Opinión sobre una premisa confusa
Debate sobre los flags de funciones del CPU
Enlace a un bug relacionado de glibc
Reacción positiva al artículo
Alta valoración del artículo
Sugerencia para resolver el problema
Información sobre el asignador predeterminado de Rust
Consideraciones de desarrolladores Rust para mejorar el rendimiento
Explicación de las diferencias de CPU entre AMD e Intel
El artículo fue compartido con las personas adecuadas