Update README.md
CXL-RPC 是面向共享内存通信场景的 RPC 运行时原型,将共享内存(SHM)与 TCP 接入统一调用接口。应用可以在同一套业务处理逻辑下使用小消息 Inline、大对象 Buffer、固定 TCP、AUTO 准入选路及请求级 STRIPE 分流;运行时负责异步完成、超时处理和共享缓冲区回收。
本提交为 V2 Final RC1,共享内存 ABI 1.3。在初赛功能基础上,决赛版本增加了多 Lane 请求处理与完成发布、独立进程会话管理、RocksDB/官方 YCSB 应用接入,并补充本机和真实 CXL 后端的分阶段验证。最终提交源码已于 2026-10-07 完成 openEuler 双 Guest 重建、全量功能复验及新增动态检查;本次补验使用文件 ivshmem,历史真实 CXL 实验仍按原批次引用。核心工程可独立编译,包内另附用于本机演示的预编译程序及应用依赖。
下列命令使用 Bash,从本提交根目录执行,即同时含有 src/、tests/、demo/ 的目录。无需将项目安装到系统;构建和新日志放在提交目录外。
共享内存通信要求两端能访问同一共享区域;本项目不提供任意两台普通主机之间的共享内存互联。当前定位为研究与比赛原型。
协议和实现细节见源码技术文档,创新贡献及已有工作对照见项目创新说明。
YCSB 与传统 RPC 对照补测的材料入口:
预编译程序已验证于 Ubuntu 24.04.4 LTS、Intel i5-10500(6 核 12 线程)。包内使用隔离的 Temurin JDK 17.0.18+8、JNI 库与 RocksDB 程序;动态库依赖见 runtime-dependencies.txt。
核心默认构建不下载 RocksDB/Java 依赖。本机流程不需要 CXL 设备、Guest 镜像、SSH 或管理员权限。其他发行版优先从源码构建。最终提交源码已在两个 openEuler 24.03 LTS-SP3 Guest 内分别重建并通过全量功能回归;应用依赖在 openEuler 中原生构建,不能直接假定随附 Ubuntu 应用库与其他发行版兼容。
先检查随附源码与程序是否完整:
python3 -B demo/run.py check
当前预期为 CHECK PASS MANIFEST.sha256 files=659。这只校验文件完整性,不代表运行环境已经通过检查。
再运行核心功能及 RocksDB/YCSB 演示:
cxlrpc_demo_dir=$(mktemp -d /tmp/cxlrpc-live.XXXXXX) python3 -B demo/run.py live --output "$cxlrpc_demo_dir/session"
入口负责启动和结束子程序,无需手动启动服务端。7 个核心阶段覆盖多路径 KV、选路回放、受控健康与资源压力、迟到响应回收、发布后禁止重放及会话隔离。应用阶段在 SHM、TCP 下分别执行 load1000 和 run2000,共 4 个会话;READ 启用逐次值校验和 JNI 检查。
成功输出应包含:
FINAL_DEMO PASS core=7 application_sessions=4 DEMO_ENTRY PASS action=live ...
… 表示随运行变化的耗时字段。入口日志位于 $cxlrpc_demo_dir/session/console.log,分阶段原始日志和汇总位于其 run/ 子目录。回放、人工注入和策略预览在演示中标明;不能将其当作真实设备故障检测或性能测量。
查看归档优化结果:
python3 -B demo/run.py results
此命令先校验测试材料,再显示既有实验的统计表和未达标项,不产生新的性能数据。
在同一终端依次执行:
cxlrpc_build_dir=$(mktemp -d /tmp/cxlrpc-review-build.XXXXXX) cmake -S src/cxlrpc-v2-final-rc1 -B "$cxlrpc_build_dir" -DCMAKE_BUILD_TYPE=Release cmake --build "$cxlrpc_build_dir" -j2 ctest --test-dir "$cxlrpc_build_dir" --output-on-failure "$cxlrpc_build_dir/kv_rpc_demo"
当前默认配置包含 70 项 CTest,预期全部通过。KV 演示末尾应包含:
kv_rpc_demo: PASS paths=inline,buffer,tcp,auto,stripe shm_tcp_equal=1 release_acks=4 chunks=0
使用刚构建的程序运行 7 阶段核心演示:
cxlrpc_core_dir=$(mktemp -d /tmp/cxlrpc-core.XXXXXX) python3 -B demo/run.py core --build "$cxlrpc_build_dir" --output "$cxlrpc_core_dir/session"
预期包含 FINAL_DEMO CORE_PASS application=SKIPPED 和 DEMO_ENTRY PASS action=core。该流程不运行 RocksDB/YCSB,不能替代上一节的完整应用验证。
仅在需要修改应用或重建依赖时使用。先将整个源码工程(包括隐藏目录)复制到独立工作区,再在副本中按应用构建与运行执行:
bash scripts/build_opt3_rocksdb.sh bash scripts/build_opt3_ycsb.sh ctest --test-dir build-ycsb --output-on-failure
这三条命令的工作目录是源码副本根目录。脚本可能下载依赖,Maven 缓存未完整随包提供;它们会写入 .deps/ 与 build-ycsb/,不应在冻结提交副本中直接执行。原有 CMake 缓存含路径,运行上述固定脚本前,先将副本中已有的 build-ycsb/ 和 .deps/rocksdb-build/ 移到副本外备份,使脚本创建新构建目录。项目构建无需执行系统级安装命令。10月7日补验另在临时 openEuler Guest 中原生重编译 RocksDB 10.10.1,并重建项目 C++/JNI 与 Java binding;实际构建参数和依赖范围见补验报告。
cxlrpc_smoke_dir=$(mktemp -d /tmp/cxlrpc-smoke.XXXXXX) python3 -B demo/run.py smoke --output "$cxlrpc_smoke_dir/session"
预期包含 FINAL_COMPARE PASS accounting_points= 9 和 DEMO_ENTRY PASS action=smoke。该测试运行随附程序,检查 SHM/TCP/AUTO 的调用计数与回收;短烟测不验收正式性能。若需使用第 6 节新构建的核心程序,可增加 –build “$cxlrpc_build_dir”。
cxlrpc_recalc_dir=$(mktemp -d /tmp/cxlrpc-evidence.XXXXXX) python3 -B tests/recompute.py --output "$cxlrpc_recalc_dir/result"
预期输出 RECOMPUTE PASS。脚本从原始日志重算当前三模式、历史多 Lane、应用和热点消融等共 180 个点,并核对计数、窗口及汇总。PASS 表示解析与统计一致;原实验中的尾延迟、重复性和采集扰动失败仍保留。
需要重新测量时,按复现方法执行固定 27 点矩阵,使用新的输出目录,避免同时编译或运行其他高负载任务。该文档给出负载、预热、请求数及三轮顺序;不要将烟测数据混入正式结果。本次 README 定稿没有重跑正式矩阵或真实 CXL 实验。
已有结果应按以下边界阅读:
本次使用最终提交源码,核对 142 个源码文件身份一致,未修改提交源码。新增结果与历史性能矩阵分开记录:
两个 Guest 使用专用 256 MiB 文件支持的 ivshmem,本次未重新验收真实 CXL 硬件。本机 ASan/UBSan 因依赖的无 RTTI 配置未启用 vptr 子检查,openEuler 构建保留该检查;两者的 RocksDB 库均未做 ASan/UBSan 插桩。TSan 通过运行仅对测试进程禁用 ASLR。长时稳定性仍待进一步验证。
完整环境、检查边界、失败尝试和原始日志见复验报告、验收核对及补验证据目录。这些功能与动态检查不产生新的性能提升数据,也不改变历史重复性未通过项。
(cd src/cxlrpc-v2-final-rc1 && sha256sum -c MANIFEST.sha256) (cd tests && sha256sum -c EVIDENCE.sha256) (cd demo && sha256sum -c MANIFEST.sha256)
三份清单分别覆盖原有源码与随附程序、原有测试材料(含 tests/最终版本复验/)、演示材料。新增 YCSB/gRPC 补测材料使用独立清单,在项目根目录执行:
tests/最终版本复验/
sha256sum -c tests/grpc-comparison/SUPPLEMENT.sha256
该清单覆盖当前 README、更新后的 PPT,以及 tests/grpc-comparison/、src/grpc-baseline/ 中的全部补充材料(清单自身除外)。历史根目录 MANIFEST.sha256 保留原样,其中 README 和 PPT 的旧哈希已不再匹配当前文件,不能用于当前整包验收;其余原有文件仍按历史清单追踪。tests/EVIDENCE.sha256 不包含新增补测材料;tests/SUBMISSION.sha256 也是早期历史清单,不用于当前整包验收。
tests/grpc-comparison/
src/grpc-baseline/
MANIFEST.sha256
tests/EVIDENCE.sha256
tests/SUBMISSION.sha256
当前 PPT 第 24、25 页分别展示吞吐与 P99 对照。四组配置为 gRPC、项目 TCP、SHM 单 Lane 和 SHM 四 Lane,共用 YCSB、JNI 与 RocksDB 业务逻辑;测量环境为本机 POSIX 共享内存/TCP loopback,固定 4 个客户端线程与 4 个业务 Worker。
三类负载下,SHM1 吞吐中位数较 gRPC 高 16.12%~34.97%,READ P99 同时增加 67.08%~94.04%;SHM4 吞吐均低于 gRPC。36 个测点执行与计数检查通过,9/12 组重复性达标。正式窗口为 6.57~23.68 秒,属于短测,与原多 Lane 实验及真实 CXL 批次分别归档。
补测的归档数据已离线重算,逐轮数据、汇总统计、相对 gRPC 变化三个 CSV 与原图所用数据一致;补丁应用后的 134 个测量源码文件与归档指纹一致。材料整理未重跑性能实验。配置、原始日志、失败项及复现方法见补测说明和独立基线入口。基线在独立工程副本中应用,不改变原主工程和演示入口。
各次演示输出目录必须是提交目录外尚不存在的新目录。示例先用 mktemp 创建父目录,再由入口创建 session/ 或 result/,不要提前创建最终输出目录,也不要覆盖归档证据。
若命令返回非零,保留 console.log 和阶段日志,从首个失败项检查二进制兼容性、端口占用、共享内存空间及配置。固定端口测试和演示按顺序运行;清理前核实日志记录的进程与共享内存对象归属,避免影响其他任务。中断或部分阶段成功不算完整验收通过。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
CXL-RPC:面向共享内存的多路径 RPC 系统
CXL-RPC 是面向共享内存通信场景的 RPC 运行时原型,将共享内存(SHM)与 TCP 接入统一调用接口。应用可以在同一套业务处理逻辑下使用小消息 Inline、大对象 Buffer、固定 TCP、AUTO 准入选路及请求级 STRIPE 分流;运行时负责异步完成、超时处理和共享缓冲区回收。
本提交为 V2 Final RC1,共享内存 ABI 1.3。在初赛功能基础上,决赛版本增加了多 Lane 请求处理与完成发布、独立进程会话管理、RocksDB/官方 YCSB 应用接入,并补充本机和真实 CXL 后端的分阶段验证。最终提交源码已于 2026-10-07 完成 openEuler 双 Guest 重建、全量功能复验及新增动态检查;本次补验使用文件 ivshmem,历史真实 CXL 实验仍按原批次引用。核心工程可独立编译,包内另附用于本机演示的预编译程序及应用依赖。
下列命令使用 Bash,从本提交根目录执行,即同时含有 src/、tests/、demo/ 的目录。无需将项目安装到系统;构建和新日志放在提交目录外。
1. 应用场景
共享内存通信要求两端能访问同一共享区域;本项目不提供任意两台普通主机之间的共享内存互联。当前定位为研究与比赛原型。
2. 主要功能
协议和实现细节见源码技术文档,创新贡献及已有工作对照见项目创新说明。
3. 材料导航
工程、演示与测试
YCSB 与传统 RPC 对照补测的材料入口:
决赛文档与附件
4. 系统环境与依赖
预编译程序已验证于 Ubuntu 24.04.4 LTS、Intel i5-10500(6 核 12 线程)。包内使用隔离的 Temurin JDK 17.0.18+8、JNI 库与 RocksDB 程序;动态库依赖见 runtime-dependencies.txt。
核心默认构建不下载 RocksDB/Java 依赖。本机流程不需要 CXL 设备、Guest 镜像、SSH 或管理员权限。其他发行版优先从源码构建。最终提交源码已在两个 openEuler 24.03 LTS-SP3 Guest 内分别重建并通过全量功能回归;应用依赖在 openEuler 中原生构建,不能直接假定随附 Ubuntu 应用库与其他发行版兼容。
5. 快速运行完整演示
先检查随附源码与程序是否完整:
当前预期为 CHECK PASS MANIFEST.sha256 files=659。这只校验文件完整性,不代表运行环境已经通过检查。
再运行核心功能及 RocksDB/YCSB 演示:
入口负责启动和结束子程序,无需手动启动服务端。7 个核心阶段覆盖多路径 KV、选路回放、受控健康与资源压力、迟到响应回收、发布后禁止重放及会话隔离。应用阶段在 SHM、TCP 下分别执行 load1000 和 run2000,共 4 个会话;READ 启用逐次值校验和 JNI 检查。
成功输出应包含:
… 表示随运行变化的耗时字段。入口日志位于 $cxlrpc_demo_dir/session/console.log,分阶段原始日志和汇总位于其 run/ 子目录。回放、人工注入和策略预览在演示中标明;不能将其当作真实设备故障检测或性能测量。
查看归档优化结果:
此命令先校验测试材料,再显示既有实验的统计表和未达标项,不产生新的性能数据。
6. 从源码构建与核心测试
在同一终端依次执行:
当前默认配置包含 70 项 CTest,预期全部通过。KV 演示末尾应包含:
使用刚构建的程序运行 7 阶段核心演示:
预期包含 FINAL_DEMO CORE_PASS application=SKIPPED 和 DEMO_ENTRY PASS action=core。该流程不运行 RocksDB/YCSB,不能替代上一节的完整应用验证。
可选:重新构建应用
仅在需要修改应用或重建依赖时使用。先将整个源码工程(包括隐藏目录)复制到独立工作区,再在副本中按应用构建与运行执行:
这三条命令的工作目录是源码副本根目录。脚本可能下载依赖,Maven 缓存未完整随包提供;它们会写入 .deps/ 与 build-ycsb/,不应在冻结提交副本中直接执行。原有 CMake 缓存含路径,运行上述固定脚本前,先将副本中已有的 build-ycsb/ 和 .deps/rocksdb-build/ 移到副本外备份,使脚本创建新构建目录。项目构建无需执行系统级安装命令。10月7日补验另在临时 openEuler Guest 中原生重编译 RocksDB 10.10.1,并重建项目 C++/JNI 与 Java binding;实际构建参数和依赖范围见补验报告。
7. 测试方法与结果解读
7.1 三模式烟测
预期包含 FINAL_COMPARE PASS accounting_points= 9 和 DEMO_ENTRY PASS action=smoke。该测试运行随附程序,检查 SHM/TCP/AUTO 的调用计数与回收;短烟测不验收正式性能。若需使用第 6 节新构建的核心程序,可增加 –build “$cxlrpc_build_dir”。
7.2 既有数据离线复算
预期输出 RECOMPUTE PASS。脚本从原始日志重算当前三模式、历史多 Lane、应用和热点消融等共 180 个点,并核对计数、窗口及汇总。PASS 表示解析与统计一致;原实验中的尾延迟、重复性和采集扰动失败仍保留。
7.3 正式性能复测
需要重新测量时,按复现方法执行固定 27 点矩阵,使用新的输出目录,避免同时编译或运行其他高负载任务。该文档给出负载、预热、请求数及三轮顺序;不要将烟测数据混入正式结果。本次 README 定稿没有重跑正式矩阵或真实 CXL 实验。
已有结果应按以下边界阅读:
7.4 最终提交源码补验(2026-10-07)
本次使用最终提交源码,核对 142 个源码文件身份一致,未修改提交源码。新增结果与历史性能矩阵分开记录:
两个 Guest 使用专用 256 MiB 文件支持的 ivshmem,本次未重新验收真实 CXL 硬件。本机 ASan/UBSan 因依赖的无 RTTI 配置未启用 vptr 子检查,openEuler 构建保留该检查;两者的 RocksDB 库均未做 ASan/UBSan 插桩。TSan 通过运行仅对测试进程禁用 ASLR。长时稳定性仍待进一步验证。
完整环境、检查边界、失败尝试和原始日志见复验报告、验收核对及补验证据目录。这些功能与动态检查不产生新的性能提升数据,也不改变历史重复性未通过项。
7.5 完整性与版本身份
三份清单分别覆盖原有源码与随附程序、原有测试材料(含
tests/最终版本复验/)、演示材料。新增 YCSB/gRPC 补测材料使用独立清单,在项目根目录执行:该清单覆盖当前 README、更新后的 PPT,以及
tests/grpc-comparison/、src/grpc-baseline/中的全部补充材料(清单自身除外)。历史根目录MANIFEST.sha256保留原样,其中 README 和 PPT 的旧哈希已不再匹配当前文件,不能用于当前整包验收;其余原有文件仍按历史清单追踪。tests/EVIDENCE.sha256不包含新增补测材料;tests/SUBMISSION.sha256也是早期历史清单,不用于当前整包验收。7.6 YCSB 与传统 RPC 对照补测
当前 PPT 第 24、25 页分别展示吞吐与 P99 对照。四组配置为 gRPC、项目 TCP、SHM 单 Lane 和 SHM 四 Lane,共用 YCSB、JNI 与 RocksDB 业务逻辑;测量环境为本机 POSIX 共享内存/TCP loopback,固定 4 个客户端线程与 4 个业务 Worker。
三类负载下,SHM1 吞吐中位数较 gRPC 高 16.12%~34.97%,READ P99 同时增加 67.08%~94.04%;SHM4 吞吐均低于 gRPC。36 个测点执行与计数检查通过,9/12 组重复性达标。正式窗口为 6.57~23.68 秒,属于短测,与原多 Lane 实验及真实 CXL 批次分别归档。
补测的归档数据已离线重算,逐轮数据、汇总统计、相对 gRPC 变化三个 CSV 与原图所用数据一致;补丁应用后的 134 个测量源码文件与归档指纹一致。材料整理未重跑性能实验。配置、原始日志、失败项及复现方法见补测说明和独立基线入口。基线在独立工程副本中应用,不改变原主工程和演示入口。
8. 已知限制
9. 运行失败时
各次演示输出目录必须是提交目录外尚不存在的新目录。示例先用 mktemp 创建父目录,再由入口创建 session/ 或 result/,不要提前创建最终输出目录,也不要覆盖归档证据。
若命令返回非零,保留 console.log 和阶段日志,从首个失败项检查二进制兼容性、端口占用、共享内存空间及配置。固定端口测试和演示按顺序运行;清理前核实日志记录的进程与共享内存对象归属,避免影响其他任务。中断或部分阶段成功不算完整验收通过。