Redis K/V 存储引擎的 RVV 向量化优化
项目描述
Redis(Remote Dictionary Server)是目前全球最受欢迎的开源、内存中数据结构存储系统。它通常被用作数据库、缓存、消息队列(Broker)和流处理引擎。
Redis 作为高性能的内存键值数据库,其核心瓶颈之一在于网络输入缓冲区的协议解析,比如,Redis 采用 RESP(REdis Serialization Protocol)文本协议,服务端在处理请求时,需要频繁执行单字节循环扫描,以查找控制字符(如 *、$)及换行符(\r\n)。在传统的标量处理器上,这种串行字符匹配消耗了大量的 CPU 周期。
RISC-V Vector(RVV 1.0)扩展提供了强大的单指令多数据(SIMD)并行处理能力,本题要求参赛者将 Redis 完整适配至 RISC-V 平台,并利用 RVV 1.0 向量指令对 Redis 的 RESP 协议解析、RDB/AOF 压缩、Dict 哈希计算等核心模块进行性能加速,推动 RISC-V 在数据库向量化方向的应用落地。
- 目标架构:RISC-V(RV64GCV,支持 RVV 1.0)
- 推荐测试环境:QEMU
virt机器(-cpu rv64,v=true,vlen=256)或真实 RISC-V 开发板 - 验证平台:蓝芯 LX5000 开发板
评分要求
必做任务
优化后的代码必须完全兼容 RESP 协议规范,能够正确解析包括单行字符串、错误信息、整数、大块字符串(Bulk Strings)和数组在内的所有标准 Redis 命令报文。
-
必须使用 RVV 1.0 Intrinsic 函数,可以辅助少量 RISC-V 内联汇编进行优化
-
支持不同 VLEN(128/256/512 bit)的自适应实现,可利用 RVV 的
vsetvl灵活向量长度特性 -
可实现自动向量长度调优(VLEN 探测 + 运行时分发)
-
允许合并或重构原有的循环结构,但不得改变原解析状态机的业务逻辑边界
-
禁止使用多线程优化
-
验证文档:记录测试方案,用于组委会验证参赛选手的优化成果
性能要求及正确性验证
- 评测指标:基础测试、高并发测试、高Value测试、管道测试、持久 化测试
- 能正确运行自带的回归测试集(对比 ARM 平台的测试结果)
- 相比于 memtier_benchmark 标量版本在验证平台的基线测试结果,性能需提升至少 30%
- 性能提升指标包括: GET/SET QPS、P99 延迟等
- 现有数据库内核、字符串核心以及协议解析函数的 RVV 向量化占比 >=70%
注意事项
- 请确保遵循相关的开源协议和版权规范。
- 参赛者需要自行准备开发环境。
- 禁止直接搬运已有第三方 RISC-V Redis 移植代码,须自主实现或明确标注引用来源。
- 若使用 AI 辅助编写代码,需在提交报告中说明使用方式及占比。
- 需符合现有 Redis 代码规范。
参考资料
| 资源 | 链接 |
|---|---|
| Redis 8.8.0 源码 | https://github.com/redis/redis/tree/8.8.0 |
| memtier_benchmark | https://github.com/redis/memtier_benchmark/releases/tag/2.4.1 |
| RISC-V RVV 1.0 规范 | https://github.com/riscv/riscv-v-spec |
| 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-S2603-redis2. 提交方式
请通过 Pull Request(PR) 的方式将结果提交至上述仓库。
下文中所提及的「PR」均指针对该仓库创建的 Pull Request。