尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
如何在本地用 CodSpeed 复现 RustPython 的 CI 基准测试?
如何在本地用 CodSpeed 复现 RustPython 的 CI 基准测试【免费下载链接】RustPythonA Python Interpreter written in Rust项目地址: https://gitcode.com/GitHub_Trending/ru/RustPythonRustPython 的基准测试位于benches/目录在每一次 pull request 上都会由 CodSpeed 运行其测量方式是 CPU simulationCPU 模拟而不是墙钟时间。想在本地得到与 CI 同类的测量结果而不是普通的cargo bench计时需要安装 CodSpeed 的工具链并按 CI 的方式驱动基准。这篇文章给出本地复现的完整路径安装哪些组件、执行哪两条命令、CodSpeed 模式下基准行为与本地模式有何不同以及如何核对测量环境的一致性。准备Rust 工具链与 CodSpeed 组件RustPython 的工具链由 rust-toolchain.toml 固定为channel stable本地复现时请使用 stable 工具链。除此之外需要额外安装两个组件cargo-codspeed提供cargo codspeed子命令的 Cargo 工具CodSpeed CLI提供codspeed run命令的独立命令行工具。安装完成前可以先确认基准侧的依赖状态在 Cargo.toml 中criterion已被别名为codspeed-criterion-compatworkspace 依赖声明为criterion { package codspeed-criterion-compat, version 5.0.1, features [html_reports] }。这意味着普通的cargo bench无需任何改动兼容层只会在 CodSpeed runner 驱动基准时接管。macOS 上需要先配置.cargo/config在 macOS 上跑基准前需要在.cargo/config文件中加入以下链接参数见 benches/README.md[target.x86_64-apple-darwin] rustflags [ -C, link-arg-undefined, -C, link-argdynamic_lookup, ]其他平台无需此步骤。执行本地 CodSpeed 基准在仓库根目录依次执行cargo codspeed build -p rustpython -p rustpython-sre_engine codspeed run --mode simulation -- cargo codspeed run -p rustpython -p rustpython-sre_engine第一条命令构建参与测量的两个包rustpython与rustpython-sre_engine第二条以--mode simulation模式运行基准与 CI 中 CodSpeed 的测量方式一致。如何确认基准确实跑在 CodSpeed 兼容层下在 CodSpeed 驱动时有两个与本地模式可区分的可见行为均来自 benches/README.mdCPython 对比基准被跳过。这些基准用于本地将 RustPython 与 CPython 对比而 CodSpeed 跟踪的是 RustPython 自身的演进运行它们会使本就缓慢的 instrumented run 时间翻倍因此 CI 与本地 CodSpeed 模式下都不运行使用ITERATIONS的微基准只跑单个取值。普通模式下引用了ITERATIONS的微基准会以 100 到 1,000 之间的五个值各运行一次而 criterion 基准 id 不包含迭代次数五个规模会报告在同一个名字下所以 CodSpeed 模式只取单个值。如果你的运行中看到了 CPython 对比结果说明兼容层没有接管执行方式有问题。可选分支需要 CPython 对比时退出 CodSpeed 模式CodSpeed 模式会跳过 CPython 对比基准。如果本次目的正是对比 CPython改用仓库自带的普通基准入口即可并可指定要对比的 Python 版本benches/README.md 给出的示例PYTHON_SYS_EXECUTABLEpython3.13 cargo bench普通cargo bench完成后结果报告位于target/criterion/report/index.html。也可以用名字匹配只跑子集例如cargo bench sorted只运行名称匹配的基准。这两条路径的测量方式是墙钟时间与 CodSpeed 的模拟计数不可直接混比不要放在同一条对比链里。用环境脚本核对测量机器的一致性CodSpeed 的模拟测量不随机器快慢变化但会随“机器让进程执行什么”而变glibc 按 CPU flags 通过 IFUNC 选择memcpy、memset与字符串例程的指令流rustc 版本变化会产生不同代码链接的 CPython 版本也会影响结果。为此仓库提供了 scripts/codspeed-environment.py用于记录一台机器的基准环境并判断另一台机器是否与之一致。它的 docstring 明确给出的用法是codspeed-environment.py --record build/codspeed-environment.json codspeed-environment.py --record CURRENT --reference REFERENCE --github-output在本地可以这样用脚本为 Python 3 脚本--github-output仅在有GITHUB_OUTPUT环境变量的 CI 中才有意义本地核对时不需要python3 scripts/codspeed-environment.py --record build/codspeed-environment.json python3 scripts/codspeed-environment.py --reference build/codspeed-environment.json第一步把当前机器的环境写成 JSON并在终端打印各字段文档示例输出字段随你的机器不同而不同Benchmark environment: os 发行版与版本 arch 机器架构 ... digest 16 位十六进制摘要第二步读取 JSON 并与当前机器逐项比较。脚本的判定输出有两种均摘自脚本源码中的实际打印语句一致时打印This machine matches the reference (digest).不一致时打印This machine is not the one the reference was taken on (旧digest - 新digest):并逐行列出发生变化的字段如cpu_flags: 减少的flags - 新增的flags。比较覆盖的字段为os、arch、cpu_vendor_id、cpu_brand、cpu_cores、total_memory_gb、cpu_flags、rustc、libc、python基准旁边被测的 Python 解释器。注意脚本无论是否匹配都以 0 退出判定结论在match输出中由调用方决定不一致的代价。CI 的规则是main分支定义环境基准任何在其他 ref 上的运行只有在与 main 的记录一致时才进行测量否则跳过而不是上传——因为跨环境的上传会被发布成分支的“性能回退”。当 CodSpeed 报告出现 different runtime environments detected 时说明两次运行不在同一类机器上报告中的数字不构成两次代码树的对比此时应先用上面的脚本核对双方环境的差异字段。局限与边界本地 CodSpeed 运行与 CI 一样是模拟计数结果不随你的机器快慢变化但依赖 CPU flags、工具链和链接的 CPython 版本环境脚本的 CPU 探测目前区分 Linux读/proc/cpuinfo与 Darwin走sysctl在 docstring 和实现中只覆盖这两类平台微基准文件放在microbenchmarks/普通基准文件放在benches/benchmarks/新增文件会自动被纳入每个文件分别测“解析为 AST 的时间”与“执行时间”。如果你要新增基准规则见 benches/README.md 的 “Adding a benchmark” 与 “Adding a micro benchmark” 两节微基准用# ---分隔 setup 与待测代码两段。【免费下载链接】RustPythonA Python Interpreter written in Rust项目地址: https://gitcode.com/GitHub_Trending/ru/RustPython创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

ESP32 Arduino Matter 可调光灯端点 MatterDimmableLight 完整开发指南

ESP32 Arduino Matter 可调光灯端点 MatterDimmableLight 完整开发指南

ESP32 Arduino Matter 可调光灯端点 MatterDimmableLight 完整开发指南 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 本篇技术指南围绕 ESP32 Arduino Core(…

📅 2026/9/13 19:20:06
Skills for Codex 无障碍语音朗读(Accessibility Read)生成指南:默认参数、指令模板与 CLI 落地实践

Skills for Codex 无障碍语音朗读(Accessibility Read)生成指南:默认参数、指令模板与 CLI 落地实践

Skills for Codex 无障碍语音朗读(Accessibility Read)生成指南:默认参数、指令模板与 CLI 落地实践 【免费下载链接】skills Skills Catalog for Codex 项目地址: https://gitcode.com/GitHub_Trending/skills4/skills 导读 本文围绕…

📅 2026/9/13 19:15:06
Codex PDF Skill 实战指南:基于 Poppler 渲染校验与 reportlab/pdfplumber/pypdf 的 PDF 生成与审阅工作流

Codex PDF Skill 实战指南:基于 Poppler 渲染校验与 reportlab/pdfplumber/pypdf 的 PDF 生成与审阅工作流

Codex PDF Skill 实战指南:基于 Poppler 渲染校验与 reportlab/pdfplumber/pypdf 的 PDF 生成与审阅工作流 【免费下载链接】skills Skills Catalog for Codex 项目地址: https://gitcode.com/GitHub_Trending/skills4/skills 本篇指南完整解析 GitHub 推荐项…

📅 2026/9/13 19:15:06
MORE NEWS

更多资讯

📰

Archon 工作流节点级 MCP 服务器接入指南:为 DAG 节点按需挂载外部工具

Archon 工作流节点级 MCP 服务器接入指南:为 DAG 节点按需挂载外部工具 【免费下载链接】Archon The first open-source harness builder for AI coding. Make AI coding deterministic and repeatable. 项目地址: https://gitcode.com/GitHub_Trending/archon3/A…

📰

Jenkins 如何设置代理的 of executors 并发数,并用 0 临时下线代理?

Jenkins 如何设置代理的 # of executors 并发数,并用 0 临时下线代理? 【免费下载链接】jenkins Jenkins automation server 项目地址: https://gitcode.com/GitHub_Trending/je/jenkins 在 Jenkins 的 Master/Agent 部署中,每个节点&…

📰

Label Studio Enterprise 2.36.1 版本解析:SCIM 组同步部分失败上报修复与自定义界面迁移列自动检测修复

Label Studio Enterprise 2.36.1 版本解析:SCIM 组同步部分失败上报修复与自定义界面迁移列自动检测修复 【免费下载链接】label-studio Label Studio is a multi-type data labeling and annotation tool with standardized output format 项目地址: https://git…

📰

Office多久能用上?LKY Office Tools自动下载、安装、激活完整路线

Office多久能用上?LKY Office Tools自动下载、安装、激活完整路线 【免费下载链接】LKY_OfficeTools 一键自动化 下载、安装、激活 Office 的利器。 项目地址: https://gitcode.com/GitHub_Trending/lk/LKY_OfficeTools LKY Office Tools是一款面向 Windows …

📰

KubeSphere 4.x 容器平台深度解析:LuBan 微内核架构、多集群管理与 Helm 快速部署实战

KubeSphere 4.x 容器平台深度解析:LuBan 微内核架构、多集群管理与 Helm 快速部署实战 【免费下载链接】kubesphere The container platform tailored for Kubernetes multi-cloud, datacenter, and edge management ⎈ 🖥 ☁️ 项目地址: https://git…

📰

SpringBoot贷款系统快速搭建:从初始化到容器化交付

简介:本资源是一套基于SpringBoot的微服务架构贷款申请系统完整源码,面向计算机专业本科生及Java后端初学者,适用于毕业设计、课程设计与期末大作业等实践场景。系统采用典型微服务拆分模式,包含loan-application-service、credit…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬