hyperfine #
「 命令行基准测试工具 」
校对 ✅ #
翻译的原文 | 与日期 | 最新更新 | 更多 |
---|---|---|---|
[commit] | ⏰ 2018 9.28 | ![last] | 中文翻译 |
贡献 #
欢迎 👏 勘误/校对/更新贡献 😊 具体贡献请看
生活 #
If help, buy me coffee —— 营养跟不上了,给我来瓶营养快线吧! 💰
目录 #
hyperfine #
命令行基准测试工具 (灵感来自 bench) .
特征 #
- 多次运行的统计分析.
- 支持任意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秒钟