Zeroize performance on u8 arrays
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Error
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- rust
- Área
- performance
Línea de trabajo
Comienza con el benchmark de Rust Playground enlazado en el issue e inspecciona el ensamblado generado para zeroize sobre [u8; 32]. Compara la salida actual con los enfoques de inline-assembly y tipos más grandes descritos en el informe. Se considera terminado cuando haya una optimización o un cambio en la documentación acordado, y se hayan verificado sus efectos en el rendimiento y el tamaño del código.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I inspected the generated assembly code and benchmarked zeroize for [u8; 32] on x86_64 and found it quite inefficient, storing one byte at a time:
On my Ryzen CPU, it takes ~7.8324 ns, or ~1cpb. Binary code size is also quite large.
Using inline assembly (just stabilized in 1.59) and SSE2, zeroing a [u8; 32] takes just 3 instructions and ~492.87 ps (~16 bytes per cycle):
let mut buf: [u8; 32];
core::arch::asm!(
"xorps {zero}, {zero}",
"movups {zero}, ({ptr})",
"movups {zero}, 16({ptr})",
zero = out(xmm_reg) _,
ptr = in(reg) &mut buf,
options(att_syntax, nostack, preserves_flags),
);
So it might be something worth optimizing/documenting.
If you do not want to use inline assembly, maybe you should encourage using larger types or SIMD types, e.g., [u64; 4] or [__m128; 2] instead of [u8; 32]. Using write_volatile on *mut __m128 generates equally compact and efficient code as the assembly code above.
- Lenguaje dominante
- Rust
- Estrellas
- 674
- Forks
- 170
- Merge medio
- 1 d 12 h
- PR fusionados (30 d)
- 10
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de RustCrypto/utils
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
RustCrypto/utils#1546 · 1 comentario ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
RustCrypto/utils#1537 · 7 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
RustCrypto/utils#1534 · 2 comentarios ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 45/100
RustCrypto/utils#1529 · 4 comentarios ·
-
x86: guard CPUID leaf 7 by the maximum basic leaf; AVX detection may need XMM+YMM XCR0 state Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
RustCrypto/utils#1510 · 1 comentario ·
Todos los issues de RustCrypto/utils
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
TheLarkInn/aipm#2413 ·
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
alexgorbatchev/simple-ptt#15 ·
-
tooling
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
todo:ticket
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
taikoxyz/taiko-mono#22168 · 1 comentario ·