#benchmark #trace #tracing #observability #monitor

app app-benchmark

一次性应用程序的性能基准测试 - 在 GNU Time 应用程序之上运行。(使用 app-tracer 对服务器、流式处理等长时间运行的过程进行基准测试)。

3 个版本 (破坏性更新)

0.3.0 2022年9月22日
0.2.0 2022年9月17日
0.1.0 2022年9月16日

#55 in #observability

MIT/Apache

73KB
392

基准测试

基准测试数据收集器 - 将应用程序作为子进程运行,收集统计数据(时间、CPU 使用率、内存使用率)并生成基准测试报告。

注意:对于监控长时间运行的过程,如服务器/流式处理应用程序,请参阅 https://github.com/yarenty/app_tracer

高级思想

  • 运行应用程序多次

  • 收集所有感兴趣的数据

    • 时间
    • CPU
    • 内存
  • 处理输出并提供结果作为

    • csv/excel
    • 图表

将输出保存到本地数据库/文件中,以便检查应用程序下一个版本的降级/加速。

方法论

对于每次基准测试运行

  • 运行多次(默认 10 次)
  • 移除异常值
  • 平均输出结果

methodology

构建

cargo build -r --bin benchmark 

用法

benchmark 0.1.0
Benchmarking data collector.

USAGE:
    benchmark [OPTIONS] <APPLICATION>

ARGS:
    <APPLICATION>    Application path (just name if it is in the same directory)

OPTIONS:
    -h, --help           Print help information
    -l, --log <LOG>      Set custom log level: info, debug, trace [default: info]
    -r, --runs <RUNS>    Number of runs to be executed [default: 10]
    -V, --version        Print version information

示例输出

09:33:24.899 (t: main) INFO - benchmark - Application to be benchmark is: /opt/workspace/ballista/target/release/examples/example_processing
09:33:24.899 (t: main) INFO - benchmark - Number of runs: 10
09:33:24.902 (t: main) INFO - benchmark - Collecting data::example_processing
09:33:24.902 (t: main) INFO - benchmark::bench::analysis - Run 0 of 10
09:33:24.947 (t: main) INFO - benchmark::bench::analysis - Run 1 of 10
09:33:24.983 (t: main) INFO - benchmark::bench::analysis - Run 2 of 10
09:33:25.016 (t: main) INFO - benchmark::bench::analysis - Run 3 of 10
09:33:25.049 (t: main) INFO - benchmark::bench::analysis - Run 4 of 10
09:33:25.087 (t: main) INFO - benchmark::bench::analysis - Run 5 of 10
09:33:25.132 (t: main) INFO - benchmark::bench::analysis - Run 6 of 10
09:33:25.188 (t: main) INFO - benchmark::bench::analysis - Run 7 of 10
09:33:25.238 (t: main) INFO - benchmark::bench::analysis - Run 8 of 10
09:33:25.288 (t: main) INFO - benchmark::bench::analysis - Run 9 of 10
09:33:25.338 (t: main) INFO - benchmark - Processing outputs
0.04,130,18752,
0.03,140,18664,
0.03,156,18856,
0.03,153,18868,
0.04,152,18884,
0.04,140,18904,
0.05,136,19404,
0.05,145,19220,
0.05,137,18780,
0.05,138,18788,
09:33:25.339 (t: main) INFO - benchmark::bench::collector - SUMMARY:
09:33:25.339 (t: main) INFO - benchmark::bench::collector - Time [ms]:: min: 30, max: 50, avg: 41 ms
09:33:25.339 (t: main) INFO - benchmark::bench::collector - CPU [%]:: min: 130, max: 156, avg: 142.7 %
09:33:25.339 (t: main) INFO - benchmark::bench::collector - Memory [kB]:: min: 18664, max: 19404, avg: 18912 kB

Process finished with exit code 0


基准测试应用程序的当前目录下还创建了一个名为 "bench_" 的输出目录,例如:bench_example_processing,其中包含

输出 csv 文件

Time,Cpu,Mem
0.04,130,18752
0.03,140,18664
0.03,156,18856
0.03,153,18868
0.04,152,18884
0.04,140,18904
0.05,136,19404
0.05,145,19220
0.05,137,18780
0.05,138,18788

和输出图表

总结报告: summary_report.txt

测试

cargo build --example test_app -r   

cargo run --bin benchmark -- /opt/workspace/app_banchmark/target/release/examples/test_app   

cargo run --bin benchmark -- "/opt/workspace/app_banchmark/target/release/examples/test_app -additionl -app -params"  

待办事项

  • 增量运行 - 使用日期/时间在输出目录中
  • 本地数据库/或文件结构以查看随着时间的推移和应用程序趋势的变化
  • 将依赖从 GNU time 移出至 sysinfo

依赖项

~13–24MB
~320K SLoC