Zeroize performance on u8 arrays
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
- Tipo di issue
- Bug
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- rust
- Ambito
- performance
Direzione di ricerca
Inizia con il benchmark di Rust Playground collegato nell’issue e ispeziona l’assembly generato per zeroize su [u8; 32]. Confronta l’output attuale con gli approcci basati su inline-assembly e su tipi più grandi descritti nel report. Il lavoro è completato quando è stata concordata un’ottimizzazione o una modifica alla documentazione e ne sono stati verificati gli impatti sulle prestazioni e sulle dimensioni del codice.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- Rust
- Stelle
- 674
- Fork
- 170
- Merge medio
- 1g 12h
- PR unite (30g)
- 10
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di RustCrypto/utils
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
RustCrypto/utils#1546 · 1 commento ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
RustCrypto/utils#1537 · 7 commenti ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
RustCrypto/utils#1534 · 2 commenti ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 45/100
RustCrypto/utils#1529 · 4 commenti ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
RustCrypto/utils#1510 · 1 commento ·
Tutte le issue di RustCrypto/utils
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
-
bug core
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
-
JIT-compiled number -> Decimal conversion silently overflows instead of raising DECIMAL_OVERFLOW Apertafuzz
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
ClickHouse/ClickHouse#122114 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
linebender/vello_svg#90 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100