返回资讯中心
外部精选
软件工程
#开发者实时流

Rust 库 hyper64 发布:基于 AVX-512 的 Base64 引擎,吞吐达 10-25 GiB/s

来源标题:Hyper64 – Fast AVX-512 Base64 engine in Rust (10-25 GiB/s)

hyper64 是一个面向 Rust 的 Base64 引擎,在多档 SIMD 指令集加持下实现超过 10-25 GiB/s 的持续吞吐,并保证零堆内存分配。它采用原地零拷贝解码与常数时间执行,API 与 base64 0.22 crate 完全兼容、可直接替换。基准测试显示其 64 KiB 负载下吞吐为 10.20 GiB/s,约为 base64 0.22 的 4.4 倍。

Hacker News 最新glastor-core2026/11/12 · 今天20 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

为 Rust 打造的下一代、超高吞吐、零分配 Base64 引擎

hyper64 是一款工业级 Base64 引擎,从硬件层面出发设计,旨在解决标准 base64 crate 在真实场景中遇到的性能、内存分配与侧信道安全瓶颈。 通过结合多层级 SIMD 向量化(AVX-512BW、AVX2、SSSE3、AArch64 NEON、WebAssembly SIMD128)、经数学证明的原地零拷贝解码、常量时间密码学执行,以及零重复写入的内存初始化,hyper64 实现了持续超过 10–25 GiB/s 的吞吐量,同时保证零堆分配,并与 base64 0.22 crate 实现 100% API 直接替换兼容。

在标准 x86_64 硬件上通过 Criterion.rs 测得、将 hyper64 与 crates.io/crates/base64(v0.22)对比的基准测试结果: 64 B | [hyper64] 1.23 GiB/s(快 42%) | [base64] 863 MiB/s 1 KiB | [hyper64] 7.22 GiB/s(快 3.35 倍,+235%) | [base64] 2.15 GiB/s 64 KiB | [hyper64] 10.20 GiB/s(快 4.40 倍,+340%) | [base64] 2.32 GiB/s

负载大小 base64 crate 0.22 hyper64 加速比 / 提升 64 字节 863 MiB/s(70.6 ns) 1.23 GiB/s(48.3 ns) 吞吐量 +42% 1 KiB 2.15 GiB/s(442.4 ns) 7.22 GiB/s(132.1 ns) 快 3.35 倍(+235%) 64 KiB 2.32 GiB/s(26.2 µs) 10.20 GiB/s(5.98 µs) 快 4.40 倍(+340%)

⚡ 解码吞吐与延迟(CPU 时间越低越好) 负载大小 base64 crate 0.22 hyper64 原地(0 堆分配) hyper64(分配) CPU 延迟降低 1 KiB 2.12 GiB/s(448.3 ns) 6.84 GiB/s(139.3 ns) 7.15 GiB/s(134.2 ns) CPU 时间 -76.7% 64 KiB 1.96 GiB/s(31.0 µs) 6.78 GiB/s(8.99 µs) 7.91 GiB/s(7.71 µs) CPU 时间 -80.6%

🚀 架构优势 能力 标准 base64 Crate hyper64 生产工程价值 向量化 SIMD 引擎 ❌ 仅标量(约 2 GB/s) ✅ AVX-512 / AVX2 / SSSE3 / NEON / WASM(>10–25 GB/s) 在 JSON/gRPC API 与边缘环境中,服务器 CPU 占用降低 4–10 倍 零分配原地解码 ❌ 需要目标缓冲区 ✅ decode_in_place(&mut [u8]) 网络代理、TLS 与 mesh 路由器中零堆分配 零重复写入内存 ❌ 先对整个 Vec 填零 ✅ 空闲容量写入器 在多兆字节大对象上,将内存总线饱和削减一半 no_std 动态 CPUID ❌ 标量回退 ✅ 硬件 CPUID / OSXSAVE 在裸金属、微虚拟机与 SGX enclave 上实现原生向量化 抗时序攻击 ❌ 易受攻击(内存查找表) ✅ 无分支常量时间 防止 HMAC、JWT 与认证令牌中的缓存时序泄漏 PEM 与 MIME 空白解析器 ❌ 遇到换行符直接失败 ✅ SWAR 原地解析器 可直接解析 X.509 证书、SSH 密钥与 MIME 邮件 零分配 Display 流 ❌ 分配中间 String ✅ hyper64::display(&slice) 将 Base64 直接流式写入格式化器、日志或 JSON 编译期求值 ❌ 无 const fn ✅ const fn 与宏 在编译期预计算令牌与密码学密钥 异步 I/O ❌ 仅阻塞式 ✅ Tokio AsyncWrite / AsyncRead 为 Web 服务提供非阻塞分块流式处理 直接替换兼容层 — ✅ base64::Engine API 无需重写应用代码即可无缝替换 核心依赖 中等 ✅ 0 依赖 默认构建下零供应链攻击面

📦 安装与 Feature Flags 将 hyper64 添加到你的 Cargo.toml: [dependencies] hyper64 = "0.2"

Cargo Features Feature 默认 描述 std 是 启用 std::io::Write/Read 流以及标准运行时 CPU 特性查询。 alloc 是(通过 std) 启用返回 String 和 Vec<u8> 的便捷 API(encode、decode)。 simd 否 为特定目标平台的 intrinsics 保留的显式开关。 serde 否 启用零拷贝 Serde 包装器(#[serde(with = "...")] 与 Base64<T>)。 tokio 否 启用非阻塞流式适配器(AsyncEncoderWriter、AsyncDecoderReader)。

面向嵌入式与裸金属环境: [dependencies] hyper64 = { version = "0.2", default-features = false }

💡 快速开始与用法示例

  1. 高层便捷 API use hyper64::{encode, decode}; let raw_data = b"Rust 2026 High Performance Base64 Engine"; let encoded_str = encode(raw_data); assert_eq!(encoded_str, "UnVzdCAyMDI2IEhpZ2ggUGVyZm9ybWFuY2UgQmFzZTY0IEVuZ2luZQ=="); let decoded_bytes = decode(&encoded_str).unwrap(); assert_eq!(decoded_bytes, raw_data);
  2. 零分配原地解码(SIMD 加速) 直接在已有的可变切片(例如数据包缓冲区、预分配 arena)内部解码 Base64 数据,完全不触碰堆: use hyper64::{decode_in_place, STANDARD}; let mut packet = *b"SGVsbG8gV29ybGQh"; // 16 bytes on stack let decoded = decode_in_place(&mut packet, &STANDARD).unwrap(); assert_eq!(decoded, b"Hello World!");
  3. 原地 PEM 证书与 MIME 空白解码 真实世界的证书、SSH 密钥与邮件包含内嵌换行(\r\n、\n)与头部信息。hyper64 直接在原地解析并解码,零内存拷贝: use hyper64::decode_pem_in_place; let mut cert = *b"-----BEGIN CERTIFICATE-----\r\nSGVsbG8gV29ybGQh\r\n-----END CERTIFICATE-----\r\n"; let block = decode_pem_in_place(&mut cert).unwrap(); assert_eq!(block.label, "CERTIFICATE"); assert_eq!(block.contents, b"Hello World!");
  4. 零分配 Display 流式输出 将二进制哈希与令牌格式化进日志器、HTTP 头部或 JSON 序列化中,无需分配临时中间 String: use hyper64::display; let token_hash = [0x42u8; 32]; // Formats directly into the output stream using an internal 64-byte L1 stack buffer! let header = format!("Authorization: Bearer {}", display(&token_hash)); assert!(header.starts_with("Authorization: Bearer QkJC"));
  5. 常量时间密码学模式(抗侧信道) 在处理私钥、密码学 nonce 或令牌时,消除缓存时序漏洞与数据相关的内存查表: use hyper64::{encode_constant_time, decode_constant_time, ct_eq}; let secret = [0x5au8; 32]; let mut safe_buffer = [0u8; 44]; encode_constant_time(&secret, &mut safe_buffer); let mut recovered = [0u8; 32]; decode_constant_time(&safe_buffer, &mut recovered).unwrap(); // Constant-time equality comparison

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →