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