Hyperfine

hyperfine #

「 命令行基准测试工具 」

中文 | english


校对 ✅ #

翻译的原文 与日期 最新更新 更多
[commit] ⏰ 2018 9.28 ![last] 中文翻译

贡献 #

欢迎 👏 勘误/校对/更新贡献 😊 具体贡献请看

生活 #

If help, buy me coffee —— 营养跟不上了,给我来瓶营养快线吧! 💰


目录 #

hyperfine #

命令行基准测试工具 (灵感来自 bench) .

演示: fdfind 的 基准测试:

hyperfine

特征 #

  • 多次运行的统计分析.
  • 支持任意shell命令.
  • 关于基准进展和当前估计的持续反馈.
  • 可以在实际基准之前,预热执行.
  • 可以在每次定时运行之前,设置缓存清除命令.
  • 统计异常值检测.
  • 将结果导出为各种格式: CSV,JSON,Markdown.
  • 参数化基准.
  • 跨平台

用法 #

基本基准测试 #

要运行基准测试,您只需调用即可hyperfine <command>.... 参数可以是任何shell命令. 例如:

hyperfine 'sleep 0.3'

Hyperfine将自动确定要为每个命令执行的运行次数. 默认情况下,它将执行至少10个基准测试运行. 要更改此设置,您可以使用-m/--min-runs选项:

hyperfine --min-runs 5 'sleep 0.2' 'sleep 3.2'

注重 I/O 的程序 #

如果程序执行时间受磁盘 I/O 限制,则基准测试结果可能会受到冷还是热的磁盘缓存严重影响.

如果要在热缓存上运行基准测试,在实际基准测试之前可以使用-w/--warmup,执行一定数量的程序执行的选项(预热预热):

hyperfine --warmup 3 'grep -R TODO *'

相反,如果要运行冷缓存的基准测试,可以使用这个-p/--prepare选项, 在每次计时运行之前,运行特定命令. 例如,要清除Linux上的硬盘缓存,可以运行

sync; echo 3 | sudo tee /proc/sys/vm/drop_caches

要在 Hyperfine 中使用此特定命令,请sudo -v暂时获得sudo权限,然后调用:

hyperfine --prepare 'sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' 'grep -R TODO *'

参数化基准 #

如果你想在一个参数变化的情况下运行基准测试 (比如线程数) ,你可以使用-P/--parameter-scan选项:

hyperfine --prepare 'make clean' --parameter-scan num_threads 1 12 'make -j {num_threads}'

导出结果 #

Hyperfine有多种导出基准测试结果的选项: CSV,JSON,Markdown (参见--help文字详情)。 例如,要将结果导出到Markdown,您可以使用--export-markdown,那将创建这样的表格:

Command Mean [ms] Min…Max [ms]
find . -iregex '.*[0-9]\.jpg$' 506.0 ± 8.1 495.4…518.6
find . -iname '*[0-9].jpg' 304.9 ± 3.1 299.8…309.3
fd -HI '.*[0-9]\.jpg$' 66.2 ± 5.8 62.5…86.3

安装 #

macOS #

Hyperfine可以通过 brew安装:

brew install hyperfine

Ubuntu #

下载相应的.deb包,在 releases页面并通过dpkg安装它:

wget https://github.com/sharkdp/hyperfine/releases/download/v1.3.0/hyperfine_1.3.0_amd64.deb
sudo dpkg -i hyperfine_1.3.0_amd64.deb

Arch Linux #

在Arch Linux,可以通过 AUR安装hyperfine:

yaourt -S hyperfine

Void Linux #

Hyperfine可以通过xbps安装:

xbps-install -S hyperfine

Cargo (Linux,macOS,Windows) #

Hyperfine可以通过 cargo安装:

cargo install hyperfine

确保使用Rust 1.24或更高版本.

二进制文件 (Linux,macOS,Windows) #

releases页面中下载相应的打包文件.

名称的由来 #

名字hyperfine是根据 铯133 的 hyperfine 能级选择的,铯133的这一能级的频率 定义了我们的基本时间单位-1秒钟

译:(课外知识)李永乐老师, 一秒究竟有多长 youtube | bilibili