资讯动态

如何看懂Kache基准测试报告:Firefox、LLVM与SurrealDB真实项目测量方法拆解

发布时间:2026/10/15 17:50:54 来源:尧图企业网站定制
【免费下载链接】kacheZero-copy, content-addressed Rust build cache for Rust, C/C and more. No copies, no wasted disk项目地址https://gitcode.com/gh_mirrors/kache2/kache点击查看免费下载Kache 是一个面向 Rust 与 C/C 的零拷贝、内容寻址构建缓存工具它按内容地址缓存编译器产物没有拷贝也不浪费磁盘。当你第一次打开一份 Kache 基准测试报告看到一排冷/热构建时间、change判定和置信区间时它到底在测量什么这篇文章以 Firefox、LLVM 和 SurrealDB 三个真实项目的测量方法为例带你完整看懂 Kache 基准测试报告的每一行数字。为什么 Kache 用真实项目做构建缓存基准Kache 的基准测试不跑人造微基准而是克隆真实仓库、完整构建再比较有缓存与无缓存/不同版本的差异。当前纳入测量的大型项目各有分工项目语言构成接入 Kache 的方式测什么FirefoxRust C/C 混合./mach buildRUSTC_WRAPPER--with-compiler-wrapper混合工作负载的跨检出缓存共享LLVM几乎纯 C/CCMake 的CMAKE_C(_XX)_COMPILER_LAUNCHER数千个单文件 C 编译的压力测试SurrealDB纯 Rust Cargo 工作区仅RUSTC_WRAPPER大型依赖图的 Rust 缓存命中率每个项目对应一个 scenario 配置文件全部放在 scenarios/ 目录下scenarios/bench-firefox/scenario.tomlscenarios/bench-llvm/scenario.tomlscenarios/bench-surrealdb/scenario.toml格式说明scenarios/README.md场景文件格式很直观[source]声明克隆哪个仓库的哪个 tagbuild写构建命令[[file]]可以在每次构建前注入或打补丁例如 Firefox 要写入mozconfig、LLVM 要指定 CMake 参数[checks.assert.warm]则是必须达标的硬性门禁。四种构建阶段cold、warm_same_tree、warm 与 pull报告里的每一行都对应一个阶段phase。理解这四个词就读懂了一半报告定义见 docs/benchmarks.mdx阶段构建前缓存状态构建目录cold空空warm_same_tree由 cold 填充的快照原检出、清空构建产物warm同一份 cold 快照不同路径的检出同一提交pull在提交 A 上填充同一检出移动到提交 B其中warm阶段最能体现 Kache 的价值同一份代码放在不同绝对路径下重建缓存键必须路径无关才能命中。这就是为什么三个场景里都设置了KACHE_BASE_DIR——它让 Kache 把检出根目录下的路径在缓存键里改写成稳定标记两个克隆的键才能对齐。报告里有什么samples、summary 与判定一次基准运行会产出这些文件短套件保留在输出目录单次运行保留在tmp/bench/scenario/归档到runs/samples.json原始测量、源/工具版本、实验臂顺序summary.json统计结论报告就是从这里渲染的perf-gate.md人类可读的判定摘要metrics.otlp.json遥测指标logs/每个样本的构建日志与引擎报告渲染逻辑在 scripts/bench/report.pyPR 评论开头只放一张Kache base 对 head的表其余工具mbx、sccache的数据折叠在下面只作参照、不参与判定。几个阅读要点时间是中位数median多样本时会附上范围min–max正向变化 变慢负向变化是改进竞争contention部分额外报告编译次数、重复键编译数、等待时间以及磁盘占用硬链接只计一次未命中miss与直通passthrough数量上升会独立于耗时直接判失败——一个没走缓存的快构建不算性能结果。三个真实项目的测量方法拆解FirefoxRust C/C 混合大项目Firefox 场景是混合工作负载的代表。它的scenario.toml里做了三件关键事见 scenarios/bench-firefox/scenario.toml注入 mozconfig用--with-compiler-wrapper{kache}让每个 C/C 的-c步骤经过 Kache同时RUSTC_WRAPPER接管 rustc固定构建标识MOZ_BUILD_DATE固定 buildid避免两个克隆因构建时间不同而产生字节差异、白白丢失缓存命中路径归一化KACHE_BASE_DIRTOPSRCDIR加上KACHE_PATH_ONLY_ENV_VARS把约 18 个 NSS 相关 crate 里的绝对路径折叠成稳定键这是跨克隆命中的核心。硬性门禁checks 配置warm 阶段键稳定性 ≥ 50%、直通率 ≤ 40%、编译错误 0。LLVM纯 C/C 的缓存压力测试LLVM 是几乎纯 C/C 的 CMake 构建与 Firefox 形成对照见 scenarios/bench-llvm/scenario.toml通过CMAKE_C_COMPILER_LAUNCHER{kache}/CMAKE_CXX_COMPILER_LAUNCHER{kache}让每个翻译单元都走缓存Release构建、关断言、不带-g只构建LLVM_TARGETS_TO_BUILDX86把构建控制在数十分钟量级LLVM_APPEND_VC_REVOFF防止 git 修订号被烧进源码导致跨克隆键漂移它特别考验 TableGen 生成的树外头文件绝对路径-I的归一化能力——这是 Kache 缓存键处理的经典难点。SurrealDB大型纯 Rust 工作区SurrealDB 只走RUSTC_WRAPPER缓存surreal服务端二进制依赖图里的所有 Rust crate见 scenarios/bench-surrealdb/scenario.tomlcargo fetch放在计时之外prepare阶段网络下载不污染缓存计时启用KACHE_INPUT_PREDICTIONS1并以sampled方式抽样校验测量输入集预测在真实依赖图上省了多少时间注释里还诚实地记录了尚未修复的残留比如rquickjs-sys的归档成员名含绝对路径哈希导致 warm 命中率按编译时间加权只有约 47%——这类未命中归因正是基准报告最有信息量的部分。报告背后的统计方法随机块与精确检验Kache 的判定不是快了就过。统计核心在 scripts/bench/inference.py每个 cold 种子随机记录 base/head 的执行顺序偶数种子用平衡 AB/BA奇数种子独立分配warm 重复构成一个统计块比较的是几何平均的配对变化用精确双侧随机化检验permutation test对照零变化没有自动百分比容差三项目 PR 套件预声明 18 个比较用Bonferroni 校正控制误报。理解一句话原则就够了不显著不等于性能等价样本不足时报告应诚实地写INCONCLUSIVE。本地复现 Kache 基准测试常用命令完整列表见 docs/benchmarks.mdx入口在 Justfilejust bench # 列出全部 Kache 场景 just bench firefox # 跑 Firefox 场景 just bench-short hk # 三工具对比每臂 6 个 warm 样本 just bench-pr # 只跑 Kache 一侧的 hk eza just perf-gate-local # HEAD 对 merge base给出门禁判定在安静的机器上运行CI 的总耗时会明显长于构建本身工具安装、编译 Kache、重复测量都计入墙钟。短套件的输出目录里同样包含samples.json、summary.json、perf-gate.md与逐样本logs/和 CI 报告同源。判定速查表判定含义NO DETECTED REGRESSION预声明比较族内未检出变慢INCONCLUSIVE证据不足样本少、区间无界、遗留数据FAILwarm 未命中/直通上升或检出耗时回归INVALID MEASUREMENT阶段缺失、零恢复、缓存错误或非法判定——本次数据不可用DESCRIPTIVE无对照臂仅作描述性记录竞品mbx、sccache的数据永远只作背景参照不会因为别人更快而失败一个 PR但 Kache 自身的未命中与直通上升会独立失败——这是读报告时最需要记住的一条。延伸阅读基准测量总览docs/benchmarks.mdx场景编写指南scenarios/README.md报告渲染scripts/bench/report.py统计实现scripts/bench/inference.py竞争测量脚本scripts/bench-contention.py赞分享【免费下载链接】kacheZero-copy, content-addressed Rust build cache for Rust, C/C and more. No copies, no wasted disk项目地址https://gitcode.com/gh_mirrors/kache2/kache点击查看免费下载相关推荐CANN/asc-devkit DeepNorm归一化样例DeepNorm Example Overview This example uses the DeepNorm high level API provided人工智能深度学习算子库CANNAscendRustOwl性能测试报告基准测试与实际项目对比RustOwl性能测试报告基准测试与实际项目对比 你是否在开发Rust项目时遇到过所有权和生命周期分析工具运行缓慢的问题本文通过RustOwl的基准测试数据开发工具静态分析调试器实测Alacritty如何碾压90%终端2025性能基准测试报告实测Alacritty如何碾压90%终端2025性能基准测试报告 你是否曾经历过终端卡顿到无法忍受的时刻当你在处理大量日志输出、运行复杂命令或使用tmux桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑