RocksDB 存储引擎 RISC-V 移植与性能优化
项目描述
随着 RISC-V 架构迈向服务器与高性能计算领域,符合 RVA23 标准,支持 RVV 1.0 的高性能多核 SoC 逐渐成熟,在基于 JAVA 生态分布式基础软件中,存储引擎的性能直接决定了上层中间件的吞吐量与延迟边界。RocksDB 是 Facebook 开源的高性能嵌入式键值存储引擎,广泛应用于现代云原生架构中。开源分布式消息中间件 Apache RocketMQ 核心的多通道存储、索引以及部分状态元数据,均深度依赖 RocksDB 作为底层存储引擎。然而,目前 RocksDB 的核心加速算法(如 CRC32 校验、布隆过滤器、SST 压缩、MemTable 内存分配等)主要针对 x86 (AVX/SSE) 和 ARM (NEON) 进行了深度汇编级优化,在 RISC-V 架构(特别是向量扩展 RVV)上的性能仍有巨大提升空间。
本赛题要求参赛队伍将 RocksDB v11.1.1 完整移植至 RISC-V 64 平台,并结 合 RISC-V 矢量扩展(RVV)、异构多核架构(如主核与协处理核调度)进行性能优化,且能成功以 JNI 动态库的方式部署到 RocketMQ 5.5.0 运行环境。
- 目标架构:RISC-V(RV64GCV,支持 RVV 1.0)
- 推荐测试环境:QEMU
virt机器(-cpu rv64,v=true,vlen=256)或真实 RISC-V 开发板 - 验证平台:蓝芯 LX5000 开发板
评分要求
必做任务
- 利用 RISC-V Vector (RVV 1.0) 指令集,对布隆过滤器(Bloom Filter)的位图查找、SST 文件的序列化/反序列化、CRC32C 数据校验算法进行优化
- 现有 ARM/Neon 优化的算子中,至少 90% 需提供 RVV 或内联汇编加速版本实现
- 支持不同 VLEN(128/256/512 bit)的自适应实现,可利用 RVV 的
vsetvl灵活向量长度特性 - 可实现自动向量长度调优(VLEN 探测 + 运行时分发)
- 将优化后的 RocksDB 作为本地存储引擎,部署到 RocketMQ 运行环境
- 提供 RocketMQ 自带的 Benchmark 在标准高并发消息流(混合读写、大消息体、高堆积场景)的压测数据
- 提供 RocksDB 自带的 db_bench 测试数据,包括: fillrandom(随机写)、readrandom(随机读)、seekrandom(随机查找)的每秒操作数 (OPS)
- 验证文档:记录测试方案,用于组委会验证参赛选手的优化成果
加分项
- 多核并发与锁优化
针对 RISC-V 的原子指令(AMO)和内存模型,优化 RocksDB 的写路径(Write Path)并发锁、WAL(预写日志)分配以及 MemTable(跳表)的并发插入性能
性能与正确性要求
- 能够在验证平台正确运行 RocksDB 自带的 make check 单元测试
- 以高并发消息读写吞吐量(TPS)和 P99 延迟作为最终的评测指标
- 能在验证平台正确运行 RocksDB 核心测试集(db_test)
- 部署到 RocketMQ 之后,执行 60 分钟高压群集测试,要求无 OOM、无数据损坏、不丢失消息
- 优化代码需具备良好的工程规范,需采用条件编译(如 #ifdef __riscv_vector),不破坏原生代码对其他架构的兼容性
- 相比于 db_bench 标量版本在验证平台的基线测试结果,性能需提升至少 30%
注意事项
- 请确保遵循相关的开源协议和版权规范。
- 参赛者需要自行准备开发环境。
- 禁止直接搬运已有第三方 RISC-V 适配/优化代码,须自主实现或明确标注引用来源。
- 若使用 AI 辅助编写代码,需在提交报告中说明使用方式及占比。
参考资料
| 资源 | 链接 |
|---|---|
| RocksDB 源码 | https://github.com/facebook/rocksdb/releases/tag/v11.1.1 |
| RocketMQ 官方文档 | https://rocketmq.apache.org/docs/ |
| RocketMQ 5.5.0 源码 | https://github.com/apache/rocketmq/releases/tag/rocketmq-all-5.5.0 |
| RISC-V RVV 1.0 规范 | https://github.com/riscv/riscv-v-spec |
| RVV Intrinsics 参考手册 | https://github.com/riscv-non-isa/rvv-intrinsic-doc |
| RISC-V GNU 工具链 | https://github.com/riscv-collab/riscv-gnu-toolchain |
| QEMU RISC-V 文档 | https://www.qemu.org/docs/master/system/target-riscv.html |
提交说明
1. 提交仓库
参赛者需将代码提交至以下仓库:
https://github.com/rv2036/rvspoc-S2605-rocksdb2. 提交方式
请通过 Pull Request(PR) 的方式将结果提交至上述仓库。
下文中所提及的「PR」均指针对该仓库创建的 Pull Request。
3. PR 中需包含的内容
创建 PR 时,必须提供用于复现移植及优化结果的全部必要内容,包括但不限于:
- 完整的源代码或二进制文件(* 详见第 5 条说明)
- 配置文件(若有)
- 依赖的库文件(若有)
- 补丁文件(若有)
- 其他对验证提交结果所必需的内容
4. 必须附带的说明文件
创建 PR 时,须同时附带一份说明文件,内容应包含用于验证优化成果的详细步骤与信息,包括但不限于:
- 验证平台说明:是否限定特定平台?若限定,请注明操作系统名称、版本及安装说明
- 依赖库说明:是否限定特定依赖库?若限定,请注明相关信息及安装说明
- 程序编译及安 装步骤
- 程序运行步骤
- 程序运行结果
- 其他对验证提交结果所必需的信息
5. 关于源代码的特别说明(优化类赛题)
针对第 3 条中「完整的源代码或二进制文件」一项,补充说明如下:
- 若参赛者在比赛截止时间前仅提交了二进制文件用于结果验证,则必须在之后通过 PR 的方式补充提交完整的源代码,方可视为完成本赛题。
- 补充提交的完整源代码必须与先前提交的二进制文件 100% 对应(即由该源代码编译生成)。
- 比赛截止时间后提交的源代码,其验证结果不计入比赛成绩,组委会仅会核实其是否与对应的二进制文件一致。
6. 成绩认定时间节点
组委会将在比赛结束后(即 2026 年 8 月 31 日 (AoE) 之后)统一对提交内容进行验证。
自该时间点起,新增或修改的 PR 内容均不计入比赛成绩。
获胜条件:精度符合产出要求,性能评分最高的选手。
7. 评判与争议处理
比赛组委会与赞助商将共同委派技术代表,组成 「联合评判组」。
评判组的职责包括:
- 对比赛过程及评判结果进行技术评判
- 受理并处理所有与比赛相关的争议
验收说明
- 2026 年 9 月 20 日后,由 RVSPOC 组委会公布。
- 由于赛题的开放性和软件的复杂性,赛题发布时可能存在未解释或需要修正的部分。针对未考虑到的方面,随着比赛进程的推进可能根据选手的反馈会有调整,请保持对赛事网站的关注。最终解释权归属于比赛的赛题评审委员会。
知识产权及开源协议要求
所有参赛结果要求开源,并提交至主办方指定仓库。参赛者(作者)持有作品的所有权。主办方鼓励参赛者将结果回馈贡献至 upstream。