1 个不稳定版本
0.1.3 | 2020年4月8日 |
---|
#228 in 性能分析
22KB
161 行
coz-rs
Rust 对 coz
因果分析器 的支持
使用方法
首先,按照 coz
中的说明安装 coz
命令。
接下来,coz
是一个分析器,为了获得最佳结果,通常需要对你的代码进行源代码级别的修改。为此,首先将以下内容添加到你的 Cargo.toml
[dependencies]
coz = "0.1"
然后,你想要添加吞吐量或延迟跟踪点。更多相关信息可以在上游找到。如果你希望某些操作执行得更频繁,你可以添加
fn main() {
loop {
// ...
// For example you wish this `loop` executed more iterations
coz::progress!(); // equivalent of `COZ_PROGRESS`
}
}
请注意,coz::progress!("name")
与 COZ_PROGRESS_NAMED
等价。
如果你想要分析操作的延迟,可以使用
// Boy I wish this function executed more quickly...
fn foo() {
coz::begin!("foo");
// ...
coz::end!("foo");
}
在为你的代码添加了追踪后,还需要确保编译时带有 DWARF 调试信息。为此,你需要再次配置 Cargo.toml
[profile.release]
debug = 1
接下来,您将使用 cargo build --release
命令构建您的应用程序,然后最后您可以使用 coz run --- ./target/release/$your_binary
运行它。
注意事项
迄今为止,已知以下注意事项以生成收集信息的报告
-
Rust 程序默认情况下在运行
coz
时会发生段错误,与 plasma-umass/coz#110 相关的问题。Rust 程序设置一个sigaltstack
来运行段错误处理程序,以打印 "你的栈已用完",但这个备用栈太小,无法运行coz
安装的SIGPROF
处理程序。为了处理这个问题,这个包提供了一个coz::thread_init()
函数,该函数将 Rust 默认安装的sigaltstack
的大小增加到足够运行coz
的程度。如果您看到段错误或损坏的报告,您可能需要手动调用coz::thread_init()
,而不是等待这个包自动为您调用它。 -
调试信息对于从
coz
获取报告至关重要。请确保您的程序是用至少行表信息编译的(debug = 1
),以确保您在使用coz
时获得最佳体验。 -
目前,
coz
仅适用于 Linux,尽管这个包应在所有平台上编译,但它仅在 Linux 上实际起作用。
示例
您可以在本存储库的 examples/toy.rs
中找到一个示例玩具程序,我们可以使用 coz
来执行它
$ cargo build --release
$ coz run --- ./target/release/examples/toy
...
[profiler.cpp:75] Starting profiler thread
$
这将生成当前目录中的 profile.coz
,如果您绘制它,应该看起来像这样
请注意,我还在学习如何运行最佳的应用程序以及如何向 coz
提出最佳问题,以及在哪里放置延迟/吞吐量点。如果您有想法或好的示例,请随时添加它们!
依赖关系
~90KB