4 个版本
0.1.3 | 2020 年 5 月 5 日 |
---|---|
0.1.2 | 2019 年 9 月 24 日 |
0.1.1 | 2019 年 9 月 18 日 |
0.1.0 | 2019 年 9 月 18 日 |
#58 在 性能分析 中排名
12,198 每月下载量
在 6 个 库中使用(5 个直接使用)
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
以运行段错误处理器并打印 "you ran out of stack",但这个备用堆栈太小,无法运行coz
安装的SIGPROF
处理器。为了处理这个问题,这个 crate 提供了一个coz::thread_init()
函数,该函数将 Rust 默认安装的sigaltstack
的大小增加到足够运行coz
。如果您看到段错误或损坏的报告,您可能希望手动调用coz::thread_init()
而不是等待这个 crate 自动为您调用它。 -
调试信息对于从
coz
获取报告至关重要。请确保您的程序至少以行表信息(debug = 1
)编译,以确保您在使用coz
时获得最佳体验。 -
目前
coz
仅适用于 Linux,尽管这个 crate 应该可以在所有平台上编译,但它实际上只在 Linux 上运行。
示例
您可以在本存储库中的 examples/toy.rs
找到一个示例玩具程序,我们可以使用 coz
来执行它。
$ cargo build --release
$ coz run --- ./target/release/examples/toy
...
[profiler.cpp:75] Starting profiler thread
$
这将在当前目录中生成 profile.coz
,如果您绘制它,应该看起来像这样
请注意,我仍在学习如何在 coz
上运行的最佳应用程序以及提出最佳问题的最佳方式,以及在哪里放置延迟/吞吐量点。如果您有任何想法或很好的示例,请随时添加它们!
依赖关系
~90KB