sharkdp开源的hyperfine,28K Star,命令行基准测试就该这么做
文章目录
sharkdp开源的hyperfine,28K Star,命令行基准测试就该这么做
sharkdp 这个名字你应该不陌生,fd(替代 find)和 bat(替代 cat)都是他写的。最近他的另一个项目 hyperfine 在GitHub上拿了28,105个Star。这个工具解决的问题很直接:给命令行程序做基准测试,而且做得比 time 命令靠谱得多。

你还在用 time 测性能吗?
日常写脚本时常遇到这种场景:两种写法都能跑,但不知道哪个更快。于是你掏出 time 命令:
time sleep 0.3
跑了一次,输出 2.3 秒。再跑一次,2.7 秒。到底信哪个?单次运行的时间波动可能大到让比较失去意义:后台进程、CPU 调度、磁盘缓存,随便一个因素都能让两次结果差出一截。
hyperfine 的做法不一样。给它一个命令,它自动决定要跑多少轮(至少 10 轮,至少 3 秒),然后输出统计结果:
hyperfine 'sleep 0.3'
输出长这样:
Benchmark 1: sleep 0.3
Time (mean ± σ): 300.1 ms ± 0.2 ms
Range (min … max): 299.8 ms … 300.5 ms
平均值、标准差、极值范围,一次性全给你。对比两个命令的时候更直观:
hyperfine 'hexdump file' 'xxd file'
跑完之后直接看到谁用时更短、差距有没有统计意义。不再需要对着一两次 time 的输出拍脑袋。
三个让人愿意用的设计
预热和缓存清除。磁盘 I/O 密集的程序,第一次跑往往慢很多,后面因为系统缓存会快一大截。-w 参数可以指定预热轮数,--prepare 参数能在每轮计时前执行清除缓存的命令,确保你测到的是真实的冷启动耗时。
参数化扫描。想看看不同线程数对编译速度的影响?一条命令就能跑完:
hyperfine --prepare 'make clean' --parameter-scan num_threads 1 12 'make -j {num_threads}'
从 1 线程跑到 12 线程,自动生成对比结果。非数字参数也能用 -L 传入离散值列表,比如对比不同编译器:
hyperfine -L compiler gcc,clang '{compiler} -O2 main.cpp'
异常值自动剔除。你在跑基准测试的时候电脑突然被其他任务占了资源,导致某一次计时偏高。hyperfine 会自动检测并标记这种异常值,不让它拉偏最终结果。这是在实际工作环境里真正需要的功能,不是实验室里才用得到的特性。

结果直接导出成报告
测试跑完了,数据怎么整理?hyperfine 支持导出 Markdown 表格、CSV、JSON、AsciiDoc 四种格式。用 --export-markdown 生成的表格可以直接贴进技术文档或周报:
| Command | Mean [s] | Min [s] | Max [s] | Relative |
|---|---|---|---|---|
fd -HI '.*[0-9]\.jpg$' |
0.232 ± 0.002 | 0.230 | 0.236 | 1.00 |
find . -iname '*[0-9].jpg' |
1.427 ± 0.026 | 1.405 | 1.468 | 6.14 ± 0.13 |
JSON 输出还能配合项目自带的 Python 脚本,生成耗时分布直方图和多组对比的箱线图,对需要深入分析结果的场景比较有用。
安装不挑平台
hyperfine 覆盖了几乎所有主流系统和包管理器:
brew install hyperfine # macOS
apt install hyperfine # Ubuntu/Debian
pacman -S hyperfine # Arch
winget install hyperfine # Windows
cargo install --locked hyperfine # 通过 Cargo(跨平台)
Chocolatey、Scoop、conda、nix 也都支持,基本没有装不上的情况。
命名和定位
hyperfine 的名字来自铯 133 的超精细能级,国际单位制中"秒"的定义就是基于它。一个以时间测量标准来命名的基准测试工具,定位不需要解释。
日常工作中哪些场景需要它
三个最常见的用途:比较两个等价命令的性能差异、追踪项目在不同 commit 之间的性能变化(配合 Chronologer 或 Bencher 做 CI 对比)、验证优化后的代码到底提速了多少。
它不是那种功能罗列一堆但日常用不上的工具。每次你需要回答"A 和 B 到底哪个更快"的时候,它能给你一个有统计意义的答案,而不是一个靠感觉的判断。
如果你日常写 Shell 脚本、做运维、搞性能优化,可以装一个试试。轻量、专注、跨平台,没什么学习成本。
到底哪个更快"的时候,它能给你一个有统计意义的答案,而不是一个靠感觉的判断。
如果你日常写 Shell 脚本、做运维、搞性能优化,可以装一个试试。轻量、专注、跨平台,没什么学习成本。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)