2 个版本
0.1.9 | 2022年2月10日 |
---|---|
0.1.8 | 2021年5月21日 |
#217 在 性能分析
55KB
717 行
sirun 🚨
sirun
(发音类似于“siren”)是一个用于获取进程在整个生命周期中基本性能测量值的工具。它从内核获取内存和计时信息,并允许将Statsd消息发送到udp://localhost:$SIRUN_STATSD_PORT
(端口号由sirun随机分配,但您也可以自行设置),这些信息将包含在输出度量值中。
此工具旨在用于运行时间较短的基准测试,而不是用于不与外部交互就死亡的长生命周期的进程。当然,您可以使用它来运行长生命周期的进程,但这并不是它的强项。
安装
通过 Cargo
cargo安装 sirun
从版本发布
为每个支持的平台提供了发布包。将二进制文件解压缩到某个位置并使用它。
从源代码
请确保您已安装rustup
,并使用它确保您已启用最新的稳定 Rust 工具链。
从本地仓库克隆
cargo安装 .
不本地克隆
通过 SSH
cargo安装 --gitssh://[email protected]:22/DataDog/sirun.git --分支main
或者通过 HTTPS
cargo安装 --githttps://github.com/DataDog/sirun.git --分支main
用法
请参阅文档。
创建一个包含以下属性的 JSON 或 YAML 文件
name
:这将包含在结果 JSON 中。run
:要运行和测试的命令。您可以像 shell 命令一样格式化此命令,但请注意,它将不会使用 shell 作为中间进程。请注意,子进程将通过内核进行测量,但它们仍然可以使用 Statsd。要在此进程内部将度量值发送到 Statsd,请将它们发送到udp://localhost:$SIRUN_STATSD_PORT
。setup
:在测试之前运行的命令。使用此命令确保服务的可用性或检索一些最后时刻的依赖项。它可以与run
的格式相同。它将在退出状态码为 0 之前以 1 秒的间隔重复运行。teardown
:在测试之后运行的命令。这与setup
的运行方式相同,只是在测试运行之后而不是之前。timeout
:如果提供,这是run
测试可以运行的最大时间,以秒为单位。如果超时,sirun
将无结果退出,终止测试。env
:一组环境变量,可用于run
和setup
程序。这应该是一个对象,其键是环境变量名称,其值是环境变量值。iterations
:运行run
测试的次数。每次迭代的结果将包含在最终的 JSON 中的iterations
数组中。默认值为 1。cachegrind
:如果设置为true
,将在正常运行测试之后使用 cachegrind 向结果 JSON 添加指令计数。它只会发生一次,并插入到顶层 JSON 中,不管iterations
如何。这需要在您的系统上安装valgrind
。variants
:一个数组或对象,其值是配置对象,其属性可以是上述任何属性。不建议在变体中包含name
。变体名称(如果variants
是一个对象)或索引(如果variants
是一个数组)将包含在最终的 JSON 中。
环境变量
GIT_COMMIT_HASH
:如果设置,将在结果中包含一个version
。SIRUN_NAME
:如果设置,将在结果中包含一个name
。这将覆盖在配置 JSON/YAML 中设置的任何name
属性。SIRUN_NO_STDIO
:如果设置,将抑制测试程序的输出。SIRUN_VARIANT
:选择要运行的测试变体。如果配置 JSON/YAML 中存在variants
属性,并且此变量未设置,则将运行 所有 变体,逐个运行,每个变体都有自己的输出 JSON 行。SIRUN_STATSD_PORT
:用于测试程序和 sirun 之间 Statsd 通信的 localhost 上的 UDP 端口。默认情况下,将分配一个随机端口。您应该从测试程序中读取此变量以确定要发送数据的端口。
示例
这是一个示例 JSON 文件。作为一个 setup
脚本的例子,它正在检查连接到 Google 的连通性。运行脚本 run
没做什么,但它确实通过 Statsd 发送了一个度量(名称为 udp.data
值为 50)。它在 4 秒后超时,我们不太可能达到这一点。
{
"setup": "curl -I http://www.google.com -o /dev/null",
"run": "bash -c \"echo udp.data:50\\|g > /dev/udp/127.0.0.1/$SIRUN_STATSD_PORT\"",
"timeout": 4
}
然后,您可以将此 JSON 文件传递给命令行上的 sirun
。请记住,您可以使用环境变量设置输出中的 git 提交哈希和测试名称。
SIRUN_NAME=test_some_stuff GIT_COMMIT_HASH=123abc sirun ./my_benchmark.json
这将输出类似以下的内容。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
{"version":"123abc","name":"test_some_stuff",iterations:[{"user.time":6389.0,"system.time":8737.0,"udp.data":50.0,"max.res.size":2240512.0}]}
摘要
如果您提供了--summarize
选项,sirun
将切换到总结模式。在总结模式下,它将从stdin
读取,期待从之前sirun运行中逐行输出的结果。然后它将按测试名称和变体进行聚合,并针对迭代提供总结统计。输出为格式化的JSON。
例如:
$ sirun foo-test.json >> results.ndjson
$ sirun bar-test.json >> results.ndjson
$ sirun baz-test.json >> results.ndjson
$ cat results.ndjson | sirun --summarize > summary.json
许可协议
根据您的选择,以下任一许可协议:
- Apache License,版本2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可协议(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
供您选择。
贡献
除非您明确表示,否则任何有意提交并由您包含在本作品中的贡献(如Apache-2.0许可中定义的),将按照上述方式双许可,而不附加任何额外条款或条件。
依赖关系
约10-20MB
约291K SLoC