目录

基于CXL共享内存的高性能跨节点 RPC 系统

ShmRPC 是一套基于共享内存的高性能跨节点进程间通信系统,通过共享内存重构 RPC 数据路径,在虚拟化环境下实现亚微秒级延迟和百万级 QPS 吞吐。


核心特性

  • 双路径传输:≤8 字节走 Inline 路径(0 次拷贝),>8 字节走 SharedBuffer 路径(1 次拷贝)
  • 编译期零序列化:数据结构编译期固定布局,彻底消除序列化与反序列化开销
  • 位图加轮询替代 Futex:零系统调用,一套逻辑兼容单机、跨 VM、CXL 三场景
  • 四状态无锁状态机:FREE → READY → PROCESSING → DONE,PROCESSING 防止多线程重复处理
  • 僵尸槽位回收:双阈值加 kill(pid,0) 检测,服务端兜底回收
  • 跨主机可移植:3 行代码从单机 /dev/shm 移植到跨 VM IVSHMEM
  • Web 实时监控:零开销读取共享内存统计,实时展示 QPS、延迟、路径分布

性能数据

测试项 QPS 平均延迟
纯整数负载 223 万 1.17 µs
混合负载 161 万 1.46 µs
大字符串(约 1KB) 118 万 2.39 µs
64 客户端高并发 115 万 49.53 µs
  • 8 客户端对 8 服务端线程公平对比下,ShmRPC 峰值吞吐(183 万 QPS)为 TCP(22 万 QPS)的 8.3 倍。
  • 单客户端极限场景下,ShmRPC 平均延迟(0.26 µs)为 TCP(73 µs)的 1/280。

快速开始

运行环境

本系统基于共享内存机制实现跨节点通信,已在以下环境中完成验证:

环境 说明
单机环境 VMware + openEuler 24.03 LTS(POSIX 共享内存 /dev/shm)
跨VM 环境 QEMU + IVSHMEM 共享内存设备(PCI BAR 映射)
编译器 g++ 9.0+(支持 C++17)
构建工具 CMake 3.10+
Python Python 3.8+(仅 Web 监控面板需要)

本系统已在 openEuler 24.03 LTS 和 Fedora 39 上完成测试,其他 Linux 发行版理论上兼容。

编译

git clone https://gitlink.org.cn/IAA3CqSP9m/jykjhlzxdgxnrxt.git
cd jykjhlzxdgxnrxt
mkdir build && cd build
cmake .. && make -j4

运行

终端 1 — 启动服务端

./server_demo

终端 2 — 运行客户端

./client_demo

终端 3 — 启动 Web 监控面板

python3 tools/dashboard.py

浏览器打开 http://localhost:5000

目录结构

jykjhlzxdgxnrxt/ # 仓库根目录 ├── benchmark/ # 性能测试程序 │ ├── benchmark.cpp # ShmRPC 性能基准测试(混合负载/纯整数/大字符串) │ └── tcp_benchmark.cpp # TCP 环回对比测试(用于性能对比) │ ├── examples/ # 示例程序 │ ├── client_demo.cpp # 客户端演示程序(调用所有 RPC 接口) │ ├── server_demo.cpp # 服务端演示程序(注册 add/mul 等函数) │ └── kv_client.cpp # KV 存储命令行工具(供 Web 监控调用) │ ├── include/ # 公共头文件 │ └── rpc_common.h # 共享内存布局、槽位结构、状态机、通信协议定义 │ ├── src/ # 核心源码 │ ├── rpc_client.cpp # 客户端核心实现(连接、请求发送、结果等待) │ ├── rpc_client.h # 客户端接口声明 │ ├── rpc_server.cpp # 服务端核心实现(初始化、槽位处理、僵尸回收) │ └── rpc_server.h # 服务端接口声明 │ ├── tools/ # 辅助工具 │ └── dashboard.py # Web 实时监控面板(Flask + Chart.js) │ ├── CMakeLists.txt # CMake 编译配置文件 ├── README.md # 项目说明文档 └── 作品原创承诺书.docx # 参赛承诺书


开发历程

本项目采用迭代增量模型进行开发,各版关键本核心演进节点如下:

关键版本 核心更新
v2.0 完成基础共享内存槽位设计与 CAS 无锁抢占机制,实现基础 RPC 框架原型
v3.0 引入 Futex 阻塞唤醒机制,服务端支持内核态休眠等待
v4.0 工程化重构:拆分头文件与源文件,引入函数注册表,支持业务函数动态注册
v5.0 支持字符串参数传递与独立数据区,打破仅支持整数的限制
v6.0 引入 Inline/SharedBuffer 双路径传输,新增数组与结构体类型支持
v9.0 新增 Web 实时监控面板与 KV 存储业务示例,形成完整工程闭环
v11.0 服务端从 Futex 阻塞改为自适应轮询(pause→yield→usleep),位图预留
v13.0 客户端完全移除 Futex,实现纯用户态轮询同步,位图完全启用
v15.0 新增原子累加功能,完善僵尸槽位回收机制,引入多线程位图轮询
v16.0 完成 IVSHMEM 跨虚拟机移植验证,传输层路径切换仅需 3 行代码
v17.0 统一代码注释风格,完善 README 文档

各版本均对应本地开发过程中的迭代快照,当前提交的 v17.0 版本整合了上述所有演进成果。

关于
271.6 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号