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 会自动检测并标记这种异常值,不让它拉偏最终结果。这是在实际工作环境里真正需要的功能,不是实验室里才用得到的特性。

README区域截图

结果直接导出成报告

测试跑完了,数据怎么整理?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 脚本、做运维、搞性能优化,可以装一个试试。轻量、专注、跨平台,没什么学习成本。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐