Update latest project and innovation report PDFs
CoRPC 面向高并发、小消息较多的微服务通信场景,通过编译期消息布局生成、P1/PF 混合数据路径和页面级批量发布,降低 RPC 消息组织与逐请求控制开销。系统提供页面生命周期管理、generation 校验、Lease 回收及 QoS 控制,并包含 Twitter Trace、Hotel Reservation、Online Boutique 和 Open Match 等测试场景。
src/
docs/
tests/
src/tests/
demo/
presentation/
仓库保留源码、必要文档、测试脚本、应用输入数据、预期输出及选定的轨迹样本。构建目录、编译产物、实验结果、运行日志、结果压缩包和机器专用临时文件不纳入版本控制。测试与实验运行后生成的结果保留在运行机器本地。
运行环境为 Linux,基础功能可在 Ubuntu 22.04 或 WSL2 中使用 POSIX 共享内存验证。CXL 硬件实验需要实际共享内存设备、正确的映射与访问权限,并按平台确认 NUMA 或 DAX 接入方式。
构建需要 C++17 编译器、CMake/CTest 3.20+、Make、Protobuf 编译器及 C++ 开发库、gRPC C++ 开发库、grpc_cpp_plugin、OpenSSL 开发库、Python 3.10+ 及 Python protobuf 包。脚本还使用 Bash、timeout、stdbuf、sha256sum、ss 等 Linux 工具。nlohmann/json 3.10.5 头文件随仓库提供于 src/third_party/;Python protobuf 不随仓库提供,需安装 python3-protobuf,供代码生成插件使用,不能代替 Protobuf/gRPC 的 C++ 开发库。
grpc_cpp_plugin
timeout
stdbuf
sha256sum
ss
src/third_party/
python3-protobuf
Ubuntu 22.04 的依赖安装示例:
sudo apt-get update sudo apt-get install -y build-essential cmake pkg-config \ protobuf-compiler libprotobuf-dev protobuf-compiler-grpc \ libgrpc++-dev libssl-dev python3 python3-protobuf coreutils iproute2 procps util-linux
解压原始 Twitter .zst 数据时额外安装 zstd;NUMA 绑定实验额外需要 numactl。其他 Linux 发行版需使用对应的软件包名称。
.zst
zstd
numactl
安装后先执行 python3 -c 'from google.protobuf.compiler import plugin_pb2; print("PYTHON_PROTOBUF=PASS")' 和 bash src/scripts/01_check_environment.sh source。详细安装、版本记录、离线准备及复现边界见 可复现依赖说明。原 CXL 实验环境与本地 WSL 验证环境分别列出,不要求两者性能数字相同。
python3 -c 'from google.protobuf.compiler import plugin_pb2; print("PYTHON_PROTOBUF=PASS")'
bash src/scripts/01_check_environment.sh source
以下命令从仓库根目录开始,在 Linux / WSL2 的 Bash 中执行:
cd src JOBS=4 bash scripts/02_build_project.sh
该脚本以 Release 模式构建主项目及 Hotel Reservation、Online Boutique 的 gRPC 基线,主项目默认 Slot 大小为 256 字节。构建目录在本机生成,不随源码提交。
安装依赖后,从仓库根目录先准备一次(编译各配置并测试),再运行现场演示:
bash demo/run-demo.sh --prepare bash demo/run-demo.sh
现场演示包括 KV RPC、07 的五项 Twitter 实验和 Slot/Flush 对比、既有 08 的 QoS 功能及四组负载对照、09 的三个应用实验。Twitter 默认每配置 50,000 条、统一 2×60 个调用线程、50 μs Flush,预热一轮后轮换顺序测量三轮;QoS 和应用每次测量 3 秒,应用使用 4 个调用线程。运行时直接显示实验表格;完整数据集和应用并发配置可用 --all-configs,包含构建的原有流程检查可用 --check-all。日志和结果写入 src/result/demo_workflows/,默认不打包;添加 --archive 时归档至 src/release/,均不上传仓库。2026 年 10 月 2 日旧版在本机 WSL 的默认参数演示得到 S3/S0 吞吐比 4.13;该数字是历史记录,不代表本次代码更新后的性能。2026 年 10 月 5 日更新后,重新准备构建、缩短参数演示及默认规模演示均通过,最终输出 DEMO_STATUS=PASS。本机结果不能代替正式 CXL 性能实验。快速运行参数及其他选项详见 demo/README.md。
--all-configs
--check-all
src/result/demo_workflows/
--archive
src/release/
DEMO_STATUS=PASS
demo/README.md
该流程用于验证全部实验能否运行,短时结果不能代替正式性能实验。仅查看执行计划可使用 bash demo/run-demo.sh --plan。
bash demo/run-demo.sh --plan
从仓库根目录运行正确性测试:
bash tests/run-tests.sh
测试覆盖代码生成、消息布局、共享内存映射、Ring、页面轮转、并发封页、大对象及 QoS。该入口运行 CTest 并在测试失败时返回非零退出码,详见 tests/README.md。
tests/README.md
Twitter 基准冒烟测试及完整实验从 src/ 运行:
cd src bash scripts/05_run_smoke_benchmark.sh # 完整实验会额外构建不同 Slot 配置并运行多组负载: bash scripts/07_run_twitter_experiments.sh all
实验参数由对应脚本和环境变量控制;结果生成到 src/result/,不上传仓库。其他应用的运行脚本位于 src/benchmarks/ 各应用子目录。性能结论应对应实际硬件、操作系统、运行参数和重复次数。
src/result/
src/benchmarks/
新增的 QoS 专项实验从 src/ 运行,均提供 smoke 和 formal 模式:
smoke
formal
cd src bash scripts/08d_run_bottleneck_experiment.sh smoke # 瓶颈定位与扩页决策 bash scripts/08e_run_dynamics_experiment.sh smoke # 负载变化与页面配额适应 bash scripts/08c_run_admission_matrix.sh smoke # S0–S3 准入消融矩阵
正式实验将 smoke 改为 formal,并按目标机器调整脚本说明中的并发、时长及容量参数。结果分别保存在 src/result/qos_bottleneck_sessions/、qos_dynamics_sessions/ 和 qos_performance_sessions/。POSIX 共享内存下运行成功只能验证流程,不能代替 CXL 硬件性能结果。 默认现场 Demo 为控制时长,仍运行既有 QoS 关闭/开启对照;08c、08d、08e 是独立的专项实验入口,不包含在默认 Demo 中。
src/result/qos_bottleneck_sessions/
qos_dynamics_sessions/
qos_performance_sessions/
Twitter 样本来自官方公开的匿名缓存访问轨迹 twitter/cache-trace,对应 Juncheng Yang、Yao Yue、Rashmi Vinayak 的 OSDI 2020 论文 A large scale analysis of hundreds of in-memory cache clusters at Twitter。上游提供原始轨迹下载入口、七列 CSV 格式及 CC-BY-4.0 授权说明;本项目将选定样本转换为 tracebin 并生成受控混合负载,保留来源署名和转换说明。
本项目提供以下预处理输入,合计约 38.15 MiB;它们是测试数据集,不是实验结果:
src/datasets/twitter-cache/processed/
cluster18.first1m.tracebin
cluster37.first100k.tracebin
controlled/mix_large25.first50k.tracebin
controlled/mix_large75.first50k.tracebin
controlled/mix_large99.first50k.tracebin
现有预处理文件的 SHA-256 见 src/datasets/twitter-cache/SHA256SUMS。可从仓库根目录校验:
src/datasets/twitter-cache/SHA256SUMS
cd src/datasets/twitter-cache sha256sum -c SHA256SUMS
如果某次仓库发布因容量限制未包含 .tracebin 文件,可从上游下载 cluster18 和 cluster37 的原始 CSV / .zst 轨迹,再从仓库根目录执行下列转换命令。/path/to/ 应替换为实际下载位置:
.tracebin
/path/to/
cd src python3 benchmarks/twitter_trace/scripts/prepare_trace.py \ /path/to/cluster18.0.zst \ datasets/twitter-cache/processed/cluster18.first1m.tracebin \ --max-requests 1000000 python3 benchmarks/twitter_trace/scripts/prepare_trace.py \ /path/to/cluster37.0.zst \ datasets/twitter-cache/processed/cluster37.first100k.tracebin \ --max-requests 100000 python3 benchmarks/twitter_trace/scripts/generate_controlled_mixes.py
prepare_trace.py 按输入顺序转换有效请求,生成带 32 字节文件头及固定 32 字节记录的二进制轨迹。上述原始文件名仅为上游分片命名示例;原始分片和记录顺序不同会产生不同样本。复现当前样本版本请使用随仓库提供且通过 SHA-256 校验的文件。
prepare_trace.py
三组 mix_large 为团队由 cluster18、cluster37 样本构造的负载,大对象目标比例分别为 25%、75%、99%,每组 50,000 条,生成脚本固定随机种子为 20260728。脚本会在本地同时生成构造说明和统计结果。
mix_large
20260728
应用基准所需的小型输入数据位于 src/benchmarks/hotel_reservation/data/、src/benchmarks/online_boutique/data/ 等目录,功能验证需要的预期输出也随源码保留。
src/benchmarks/hotel_reservation/data/
src/benchmarks/online_boutique/data/
项目源码采用木兰宽松许可证第二版(Mulan PSL v2),见 src/LICENSE。第三方组件及数据遵循各自许可证与授权条件。随仓库分发的第三方头文件、接口与数据,以及系统安装的外部库,分别列于 第三方来源与使用范围;文件快照校验见 src/third_party/SHA256SUMS,不计入团队原创核心算法。
src/LICENSE
src/third_party/SHA256SUMS
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
CoRPC:基于 CXL 共享内存的页面聚合 RPC
CoRPC 面向高并发、小消息较多的微服务通信场景,通过编译期消息布局生成、P1/PF 混合数据路径和页面级批量发布,降低 RPC 消息组织与逐请求控制开销。系统提供页面生命周期管理、generation 校验、Lease 回收及 QoS 控制,并包含 Twitter Trace、Hotel Reservation、Online Boutique 和 Open Match 等测试场景。
目录
src/docs/tests/src/tests/demo/presentation/仓库保留源码、必要文档、测试脚本、应用输入数据、预期输出及选定的轨迹样本。构建目录、编译产物、实验结果、运行日志、结果压缩包和机器专用临时文件不纳入版本控制。测试与实验运行后生成的结果保留在运行机器本地。
系统环境与依赖
运行环境为 Linux,基础功能可在 Ubuntu 22.04 或 WSL2 中使用 POSIX 共享内存验证。CXL 硬件实验需要实际共享内存设备、正确的映射与访问权限,并按平台确认 NUMA 或 DAX 接入方式。
构建需要 C++17 编译器、CMake/CTest 3.20+、Make、Protobuf 编译器及 C++ 开发库、gRPC C++ 开发库、
grpc_cpp_plugin、OpenSSL 开发库、Python 3.10+ 及 Python protobuf 包。脚本还使用 Bash、timeout、stdbuf、sha256sum、ss等 Linux 工具。nlohmann/json 3.10.5 头文件随仓库提供于src/third_party/;Python protobuf 不随仓库提供,需安装python3-protobuf,供代码生成插件使用,不能代替 Protobuf/gRPC 的 C++ 开发库。Ubuntu 22.04 的依赖安装示例:
解压原始 Twitter
.zst数据时额外安装zstd;NUMA 绑定实验额外需要numactl。其他 Linux 发行版需使用对应的软件包名称。安装后先执行
python3 -c 'from google.protobuf.compiler import plugin_pb2; print("PYTHON_PROTOBUF=PASS")'和bash src/scripts/01_check_environment.sh source。详细安装、版本记录、离线准备及复现边界见 可复现依赖说明。原 CXL 实验环境与本地 WSL 验证环境分别列出,不要求两者性能数字相同。构建
以下命令从仓库根目录开始,在 Linux / WSL2 的 Bash 中执行:
该脚本以 Release 模式构建主项目及 Hotel Reservation、Online Boutique 的 gRPC 基线,主项目默认 Slot 大小为 256 字节。构建目录在本机生成,不随源码提交。
完整实验流程演示
安装依赖后,从仓库根目录先准备一次(编译各配置并测试),再运行现场演示:
现场演示包括 KV RPC、07 的五项 Twitter 实验和 Slot/Flush 对比、既有 08 的 QoS 功能及四组负载对照、09 的三个应用实验。Twitter 默认每配置 50,000 条、统一 2×60 个调用线程、50 μs Flush,预热一轮后轮换顺序测量三轮;QoS 和应用每次测量 3 秒,应用使用 4 个调用线程。运行时直接显示实验表格;完整数据集和应用并发配置可用
--all-configs,包含构建的原有流程检查可用--check-all。日志和结果写入src/result/demo_workflows/,默认不打包;添加--archive时归档至src/release/,均不上传仓库。2026 年 10 月 2 日旧版在本机 WSL 的默认参数演示得到 S3/S0 吞吐比 4.13;该数字是历史记录,不代表本次代码更新后的性能。2026 年 10 月 5 日更新后,重新准备构建、缩短参数演示及默认规模演示均通过,最终输出DEMO_STATUS=PASS。本机结果不能代替正式 CXL 性能实验。快速运行参数及其他选项详见demo/README.md。该流程用于验证全部实验能否运行,短时结果不能代替正式性能实验。仅查看执行计划可使用
bash demo/run-demo.sh --plan。测试与性能复现
从仓库根目录运行正确性测试:
测试覆盖代码生成、消息布局、共享内存映射、Ring、页面轮转、并发封页、大对象及 QoS。该入口运行 CTest 并在测试失败时返回非零退出码,详见
tests/README.md。Twitter 基准冒烟测试及完整实验从
src/运行:实验参数由对应脚本和环境变量控制;结果生成到
src/result/,不上传仓库。其他应用的运行脚本位于src/benchmarks/各应用子目录。性能结论应对应实际硬件、操作系统、运行参数和重复次数。新增的 QoS 专项实验从
src/运行,均提供smoke和formal模式:正式实验将
smoke改为formal,并按目标机器调整脚本说明中的并发、时长及容量参数。结果分别保存在src/result/qos_bottleneck_sessions/、qos_dynamics_sessions/和qos_performance_sessions/。POSIX 共享内存下运行成功只能验证流程,不能代替 CXL 硬件性能结果。 默认现场 Demo 为控制时长,仍运行既有 QoS 关闭/开启对照;08c、08d、08e 是独立的专项实验入口,不包含在默认 Demo 中。数据集来源与重新生成
Twitter 样本来自官方公开的匿名缓存访问轨迹 twitter/cache-trace,对应 Juncheng Yang、Yao Yue、Rashmi Vinayak 的 OSDI 2020 论文 A large scale analysis of hundreds of in-memory cache clusters at Twitter。上游提供原始轨迹下载入口、七列 CSV 格式及 CC-BY-4.0 授权说明;本项目将选定样本转换为 tracebin 并生成受控混合负载,保留来源署名和转换说明。
本项目提供以下预处理输入,合计约 38.15 MiB;它们是测试数据集,不是实验结果:
src/datasets/twitter-cache/processed/)cluster18.first1m.tracebincluster37.first100k.tracebincontrolled/mix_large25.first50k.tracebincontrolled/mix_large75.first50k.tracebincontrolled/mix_large99.first50k.tracebin现有预处理文件的 SHA-256 见
src/datasets/twitter-cache/SHA256SUMS。可从仓库根目录校验:如果某次仓库发布因容量限制未包含
.tracebin文件,可从上游下载 cluster18 和 cluster37 的原始 CSV /.zst轨迹,再从仓库根目录执行下列转换命令。/path/to/应替换为实际下载位置:prepare_trace.py按输入顺序转换有效请求,生成带 32 字节文件头及固定 32 字节记录的二进制轨迹。上述原始文件名仅为上游分片命名示例;原始分片和记录顺序不同会产生不同样本。复现当前样本版本请使用随仓库提供且通过 SHA-256 校验的文件。三组
mix_large为团队由 cluster18、cluster37 样本构造的负载,大对象目标比例分别为 25%、75%、99%,每组 50,000 条,生成脚本固定随机种子为20260728。脚本会在本地同时生成构造说明和统计结果。应用基准所需的小型输入数据位于
src/benchmarks/hotel_reservation/data/、src/benchmarks/online_boutique/data/等目录,功能验证需要的预期输出也随源码保留。许可证
项目源码采用木兰宽松许可证第二版(Mulan PSL v2),见
src/LICENSE。第三方组件及数据遵循各自许可证与授权条件。随仓库分发的第三方头文件、接口与数据,以及系统安装的外部库,分别列于 第三方来源与使用范围;文件快照校验见src/third_party/SHA256SUMS,不计入团队原创核心算法。