Memcached 分布式内存管理的 RVV 优化
项目描述
Memcached 是全球部署最广泛的高性能分布式内存对象缓存系统。作为高并发、低延迟的代表,Memcached 的主要性能瓶颈在于海量小对象的内存搬运开销(Slab Allocation 导致的内存整理)以及键值对定位时的哈希计算损耗。Memcached 将内存划分为不同大小的 Slab 类,当申请、释放或进行 LRU 内存页冷热数据整理(Slab Rebalance)时,底层会高频触发大块内存的 memcpy 和 memset(内存清零),需要对内存分配与批量清零加速。
随着 RISC-V Vector (RVV 1.0) 向量扩展的普及,通过单指令多数据(SIMD)技术并行处理内存块拷贝、批量初始化以及高维度位运算成为了可能。本赛题要求参赛者深入 Memcached 1.6.42 版本的核心底层组件,利用 RVV 1.0 对其内存管理和哈希定位模块进行重构,充分发挥 RISC-V 平台算力。
- 目标架构:RISC-V(RV64GCV,支持 RVV 1.0)
- 推荐测试环境:QEMU
virt机器(-cpu rv64,v=true,vlen=256)或真实 RISC-V 开发板 - 验证平台:蓝芯 LX5000 开发板
评分要求
必做任务
-
必须使用 RVV 1.0 Intrinsic 函数、可以辅助少量 RISC-V 内联汇编进行优化
-
编写比标准 C 库更高效的向量化内存拷贝与批量清零函数、哈希计算与关联数组查找 RVV 加速
-
将 MurmurHash3 算法改造为并行/流式向量化版本
-
实现单次动态拉取多个链表节点的 Key 指针进行批量比对,加速哈希冲突链的查找
-
支持不同 VLEN(128/256/512 bit)的自适应实现,可利用 RVV 的
vsetvl灵活向量长度特性 -
可实现自动向量长度调优(VLEN 探测 + 运行时分发)
-
验证文档:记录测试方案,用于组委会验证参赛选手的优化成果
性能要求及正确性验证
- 相比于 memtier_benchmark 标量版本在验证平台的基线测试结果,性能需提升至少 30%
- 性能提升指标包括: GET/SET QPS、P99 延迟等
- 能正确运行自带的回归测试集(对比标量版本在验证平台的测试结果)
- 现有 Memcached 核心函数以及内存分配清零函数的 RVV 向量化占比 >=70%
注意事项
- 请确保遵循相关的开源协议和版权规范。
- 参赛者需要自行准备开发环境。
- 禁止直接搬运已有第三方 RVV 移植代码,须自主实现或明确标注引用来源。
- 若使用 AI 辅助编写代码,需在提交报告中说明使用方式及占比。
参考资料
| 资源 | 链接 |
|---|---|
| Memcached 源码 | https://github.com/memcached/memcached/releases/tag/1.6.42 |
| 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 |
| 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-S2604-memcached2. 提交方式
请通过 Pull Request(PR) 的方式将结果提交至上述仓库。
下文中所提及的「PR」均指针对该仓库创建的 Pull Request。
3. PR 中需包含的内容
创建 PR 时,必须提供用于复现移植及优化结果的全部必要内容,包括但不限于:
- 完整的源代码或二进制文件(* 详见第 5 条说明)
- 配置文件(若有)
- 依赖的库文件(若有)
- 补丁文件(若有)
- 其他对验证提交结果所必需的内容
4. 必须附带的说明文件
创建 PR 时,须同时附带一份说明文件,内容应包含用于验证优化成果的详细步骤与信息,包括但不限于:
- 验证平台说明:是否限定特定平台?若限定,请注明操作系统名称、版本及安装说明
- 依赖库说明:是否限定特定依赖库?若限定,请注明相关信息及安装说明
- 程序编译及安装步骤
- 程序运行步骤
- 程序运行结果
- 其他对验证提交结果所必需的信息
5. 关于源代码的特别说明(优化类赛题)
针对第 3 条中「完整的源代码或二进制文件」一项,补充说明如下:
- 若参赛者在比赛截止时间前仅提交了二进制文件用于结果验证,则必须在之后通过 PR 的方式补充提交完整的源代码,方可视为完成本赛题。
- 补充提交的完整源代码必须与先前提交的二进制文件 100% 对应(即由该源代码编译生成)。
- 比赛截止时间后提交的源代码,其验证结果不计入比赛成绩,组委会仅会核实其是否与对应的二进制文件一致。