5 个版本
0.4.2 | 2020 年 3 月 11 日 |
---|---|
0.4.1 | 2020 年 3 月 11 日 |
0.4.0 | 2020 年 3 月 9 日 |
0.3.1 | 2020 年 2 月 25 日 |
0.3.0 | 2020 年 2 月 25 日 |
#1601 在 命令行实用工具 中
每月 27 次下载
15KB
376 行
PerfTacho
PerfTacho 是一个小应用程序,用于计算可执行文件的性能统计信息。
可执行文件可以是任何二进制文件或 shell 脚本。PerfTacho 测量总执行时间,还可以捕获可执行文件的执行时间输出。PerfTacho 可以多次运行可执行文件,并从记录的性能数据中计算统计数据。
用法
perftacho [-tachoOptions] <command> [params]
Available options:
-tachoRepeat=<n> repeats the execution n times and calculates statistics
-tachoShowDetails together with -tachoRepeat: show each individual duration
-tachoShowOutput displays the output of the executed command
-tachoASCII together with -tachoShowOutput: filter out non ASCII characters in output
-tachoTag=<tag> adds an informational tag to the output
-tachoRegEx[=<re>] capture durations from output (see documentation below)
示例
perftacho -tachoTag=MyTest -tachoRepeat=5 -tachoShowDetail curl https://www.google.com
perftacho -tachoShowOutput ls -l
计算统计信息
当使用 PerfTacho 在重复执行模式(-tachoRepeat=n)时,以下统计信息被计算
- avg: the arithmetic average of the execution time
- 95% conf. interval: the interval [avg-d, avg+d] for which there is a 95% probability that
the true avg is contained in
- min: minimum execution time
- max: maximum execution time
- std_dev: the standard deviation of the execution time
- n_recommended: the recommended number of repetitions to get a confidence interval
smaller than 5% of the avg value, i.e. [5%-avg, avg+5%]
一些数学背景:目标是计算“真实”的平均执行时间。什么是真实的平均执行时间,为什么是“真实”?试着用以下样本可执行文件进行实验:用 5 次重复(-tachoRepeat=5)运行 PerfTacho。它将计算 5 次执行的平均执行时间。现在再重复做一次。你会看到,每次实验计算出的平均执行时间或多或少是相似的,但并不完全相同。对于给定样本的执行,计算出的统计信息只是对“真实”值的估计。计算出的平均值的变异取决于个别测量的变异。它们的变异通过标准偏差 std_dev 表示。标准偏差小意味着您只需要很少的测量就可以计算出平均执行时间的合理近似值。反之,高值意味着您需要更多的测量。95% 的置信区间表示一个范围,您有 95% 的信心认为“真实”的平均执行时间值包含在这个范围内。如果您测量的数据有很强的变异,范围将相当宽。为了缩小这个范围,您需要增加测量的数量(-tachoRepeat)。n_recommended 估计您可能需要多少次测量才能得到平均值的 +/- 5% 置信区间。
请查阅 https://en.wikipedia.org/wiki/Confidence_interval 获取更多信息
典型用例
评估可执行文件及其算法的性能
软件开发者希望评估一个包含多个算法的可执行文件的性能。通常,开发者想要测量总执行时间和各个算法的执行时间,以便追踪耗时的地方。为此,开发者只需要在算法的执行周围添加执行时间日志,并将测量的执行时间写入stdout。
示例(Java)
long startTime = System.currentTimeMillis();
runMyAlgorithm();
long duration = System.currentTimeMillis() - startTime;
System.out.printf("Duration MyAlgorithm [%d ms]", duration);
可执行文件应生成以下输出
Duration MyAlgorithm [321 ms]
如果需要测量多个算法,只需相应地添加输出即可,即
Algo1 [321 ms] ... some other output ... Algo2 [456 ms]
PerfTacho通过正则表达式解析可执行文件的输出,并捕获性能数据。使用当前默认的正则表达式
"\[(\-?\d+[\.,]?\d*)\s?(s|ms|ns)\]"
它匹配以下输出示例
[123.0 ms] [123.0ms] [123 s] [123,45 s] [12345ns]
以下命令运行可执行文件多次,并从记录的性能数据中计算统计数据
perftacho -tachoRepeat=5 -tachoShowDetails -tachoRegEx MyProgram
输出可能看起来像这样
Tacho : duration in ms
1012.00 102.00 100.02 119.00
1014.00 116.00 100.01 107.00
1014.00 114.00 100.02 115.00
1013.00 105.00 100.01 103.00
1014.00 112.00 100.02 105.00
Tacho : avg: 1013.40ms / 95% conf. interval 0.78 / min: 1012ms / max: 1014ms / stddev 0.89 ms / n_recommended 1
Tacho : avg: 109.80ms / 95% conf. interval 5.27 / min: 102ms / max: 116ms / stddev 6.02 ms / n_recommended 5
Tacho : avg: 100.01ms / 95% conf. interval 0.00 / min: 100.009ms / max: 100.018ms / stddev 0.00 ms / n_recommended 1
Tacho : avg: 109.80ms / 95% conf. interval 6.02 / min: 103ms / max: 119ms / stddev 6.87 ms / n_recommended 6
在此示例中,可执行文件"MyProgramm"运行了5次(-tachoRepeat=5选项)。PerfTacho从输出中捕获了3项性能数据。根据此数据生成上述表格(并显示,-tachoShowDetails选项)。
第一列显示总执行时间,最后3列显示从输出中捕获的执行时间数据。所有数据都转换为毫秒。对于每一列,都会计算并显示下面的统计行。
安装
Perftacho是一个自包含的二进制文件,没有任何依赖。你有以下选项
从GitHub源代码构建和安装二进制文件
您需要安装Rust和Cargo。请参阅https://doc.rust-lang.net.cn/cargo/getting-started/installation.html
Get the sources:
git clone https://github.com/qrider71/tacho.git
cd tacho
cargo build --release
cd target/release
Copy the perftacho binary to your binary folder (wgich should be in your path),
e.g. on Linux:
sudo cp perftacho /usr/local/bin/
从crates获取和构建最新版本
您需要安装Rust和Cargo。请参阅https://doc.rust-lang.net.cn/cargo/getting-started/installation.html
cargo install perftacho
Cargo将编译后的二进制文件安装到您的bin文件夹
Mac OSX
您可以从源代码安装,如上所述,或从GitHub下载二进制文件:https://github.com/qrider71/tacho/releases
您应该选择文件perftacho-osx-x.y.z并将其复制到您的bin文件夹(应在您的PATH中)
或者,您可以使用homebrew(https://brew.sh.cn/)安装
brew tab qrider71/perftacho
brew install perftacho
Linux
您可以从源代码安装,如上所述,或从GitHub下载二进制文件:https://github.com/qrider71/tacho/releases
您应该选择文件perftacho-linux-x.y.z并将其复制到您的bin文件夹(应在您的PATH中)
Windows
您可以从源代码安装,如上所述,或从GitHub下载二进制文件:https://github.com/qrider71/tacho/releases
您应该选择文件perftacho-windows-x.y.z.exe并将其复制到您的bin文件夹(应在您的PATH中)
路线图
我计划以下路线图。如果您有任何评论或对有用功能的想法,请与我联系
V.1.0
版本1.0提供所有命令行工具功能,用于测量单个可执行文件的性能
- 简单的运行时间测量(已实现)
- 多运行统计分析(已实现)
- 使用正则表达式从可执行文件的输出中抓取性能数据(已实现)
V.2.0
版本2.0提供了比较多个可执行文件性能的功能。它可以用于对不同实现进行基准测试。执行计划可以指定在配置文件中。
- 基于yaml的配置文件(yaml)的性能测试计划,用于多个可执行文件
- 以不同格式导出结果
V.3.0
版本3.0提供了运行性能测试的多线程选项。重点是测量多线程访问和压力测试条件下的性能
- 运行性能测试的多线程选项
依赖关系
~2.3–3.5MB
~59K SLoC