如何从命令行对Linux命令和程序进行基准测试
“ Bench”和“ Hyperfine”的实用程序用于在类Unix系统上对Linux命令和程序进行基准测试。
1.基准工具Bench
“ Bench”实用程序使用Haskell的条件库对一个或者多个给定的命令/程序进行基准测试,并以易于理解的格式显示输出统计信息。
当我们需要根据基准测试结果比较相似的程序时,此工具会很有用。
我们还可以将结果导出为HTML格式或者CSV或者模板输出。
安装Bench Utility
Bench实用程序可以通过三种方法安装。
1.使用Linuxbrew
我们可以使用Linuxbrew软件包管理器安装Bench实用工具。
安装Linuxbrew后,运行以下命令以安装Bench:
$brew install bench
2.使用Haskell的堆栈工具
首先,安装Haskell。
然后,运行以下命令以安装Bench。
$stack setup
$stack install bench
“堆栈”将把工作台安装到~/.local/bin或者类似的文件中。
使用基准工具之前,请确保安装目录在可执行搜索路径上。
即使我们忘记了,也会提醒我们执行此操作。
3.使用Nix软件包管理器
安装Bench的另一种方法是使用Nix软件包管理器。
如以下链接所示安装Nix。
- Nix –适用于Linux和Unix的强大软件包管理器
安装Nix之后,请使用以下命令安装Bench工具:
$nix-env -i bench
使用Benchmark基准化Linux命令和程序
现在是开始对程序进行基准测试的时候了。
例如,让我向我们展示“ ls -al”命令的基准测试结果。
$bench 'ls -al'
输出示例:
当将标志/选项与命令/方法一起使用时,必须将其引号引起来。
同样,我们可以对系统中安装的所有程序进行基准测试。
以下命令显示了“ htop”和“ ptop”程序的基准测试结果。
$bench htop
$bench ptop
Bench工具也可以一次对多个程序进行基准测试。
这是ls,htop,ptop程序的基准测试结果。
$bench ls htop ptop
输出示例:
我们还可以将基准测试结果导出为如下所示HTML。
$bench htop --output example.html
要将结果导出为CSV,只需运行:
$bench htop --csv FILE
查看帮助部分:
$bench --help
2.超精细基准测试工具
Hyperfine是另一个命令行基准测试工具,其灵感来自我们上面刚刚讨论的“基准”工具。
它是免费的,开源的,跨平台的基准测试程序,并使用Rust编程语言编写。
与下面列出的Bench工具相比,它几乎没有其他功能。
- 多次运行的统计分析。
- 支持任意的shell命令。
- 关于基准进度和当前估算的不断反馈。
- 在实际基准测试之前执行预热运行。
- 可以在每个定时运行之前设置缓存清除命令。
- 统计异常值检测。
- 将基准测试结果导出为各种格式,例如CSV,JSON,Markdown。
- 参数化基准。
安装Hyperfine
我们可以使用以下任何一种方法安装Hyperfine。
1.使用Linuxbrew
$brew install hyperfine
2.使用Rust
确保已按照以下链接中的说明安装了Rust。
- 在Linux中安装Rust编程语言
安装Rust后,运行以下命令以通过Cargo安装Hyperfine:
$cargo install hyperfine
3.使用AUR帮助程序
Hyperfine在AUR中可用。
因此,我们可以使用任何帮助程序(例如YaY)将其安装在基于Arch的系统上,如下所示。
$yay -S hyperfine
4.下载并安装二进制文件
Hyperfine可用于基于Debian的系统的二进制文件中。
从发布页面下载最新的.deb二进制文件,然后使用“ dpkg”软件包管理器进行安装。
在撰写本教程时,最新版本为1.4.0。
$wget https://github.com/sharkdp/hyperfine/releases/download/v1.4.0/hyperfine_1.4.0_amd64.deb
$sudo dpkg -i hyperfine_1.4.0_amd64.deb
$sudo apt install -f
使用Hyperfine基准化Linux命令和程序
要使用Hyperfine运行基准测试,只需将其与程序/命令一起运行,如下所示。
$hyperfine 'ls -al'
对多个命令/程序进行基准测试:
$hyperfine htop ptop
正如我们在输出末尾看到的那样,Hyperfine提到“ htop的运行速度比ptop快1.96倍”,因此我们可以立即得出结论,htop的性能优于Ptop。
这将快速确定基准测试多个程序时哪个程序的性能更好。
不过,我们在Bench实用工具中没有得到此详细输出。
Hyperfine将自动确定每个命令要执行的运行次数。
默认情况下,它将至少执行10次基准测试。
如果要设置最小运行次数(例如5次运行),请使用“ -m” /“-min-runs”选项,如下所示:
$hyperfine --min-runs 5 htop ptop
或者,
$hyperfine -m 5 htop ptop
类似地,要执行每个命令的最大运行次数,该命令将是:
$hyperfine --max-runs 5 htop ptop
或者,
$hyperfine -M 5 htop ptop
我们甚至可以使用以下命令为每个命令执行准确的运行次数:
$hyperfine -r 5 htop ptop
如我们所知,如果程序执行时间受到磁盘I/O的限制,则基准测试结果可能会受到磁盘缓存及其冷或者热的严重影响。
幸运的是,Hyperfine可以选择在执行实际基准测试之前执行一定数量的程序执行。
要在实际基准测试之前执行NUM个预热运行(例如3),请使用“ -w” /“-warmup”选项,如下所示:
$hyperfine --warmup 3 htop
就像Bench实用程序一样,Hyperfine还允许我们将基准测试结果导出到给定的文件中。
我们可以将结果导出为CSV,JSON和Markdown格式。
例如,要以Markdown格式导出结果,请使用以下命令:
$hyperfine htop ptop --export-markdown <FILE-NAME>