如何从命令行对Linux命令和程序进行基准测试

时间:2020-03-21 11:48:04  来源:igfitidea点击:

“ 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>