Zeroize performance on u8 arrays
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- rust
- Lĩnh vực
- performance
Hướng nghiên cứu
Bắt đầu với benchmark Rust Playground được liên kết trong issue và kiểm tra assembly được sinh ra cho zeroize trên [u8; 32]. So sánh đầu ra hiện tại với các cách tiếp cận dùng inline-assembly và kiểu lớn hơn được mô tả trong báo cáo. Công việc được xem là hoàn tất khi đã thống nhất một tối ưu hóa hoặc thay đổi tài liệu, đồng thời xác minh được tác động của nó đến hiệu năng và kích thước mã.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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.
- Ngôn ngữ chính
- Rust
- Star
- 674
- Fork
- 170
- Merge trung bình
- 1 ngày 12 giờ
- Pull request đã merge (30 ngày)
- 10
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của RustCrypto/utils
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
RustCrypto/utils#1546 · 1 bình luận ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 55/100
RustCrypto/utils#1537 · 7 bình luận ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 45/100
RustCrypto/utils#1534 · 2 bình luận ·
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 45/100
RustCrypto/utils#1529 · 4 bình luận ·
-
x86: guard CPUID leaf 7 by the maximum basic leaf; AVX detection may need XMM+YMM XCR0 state Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 45/100
RustCrypto/utils#1510 · 1 bình luận ·
Tất cả issue của RustCrypto/utils
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
-
bug core
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
-
JIT-compiled number -> Decimal conversion silently overflows instead of raising DECIMAL_OVERFLOW Đang mởfuzz
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
ClickHouse/ClickHouse#122114 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 92/100
linebender/vello_svg#90 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100