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性能分析 中排名

Download history 4497/week @ 2024-03-14 4598/week @ 2024-03-21 4769/week @ 2024-03-28 4204/week @ 2024-04-04 4765/week @ 2024-04-11 4109/week @ 2024-04-18 5187/week @ 2024-04-25 5508/week @ 2024-05-02 3164/week @ 2024-05-09 3453/week @ 2024-05-16 3138/week @ 2024-05-23 2882/week @ 2024-05-30 1401/week @ 2024-06-06 2771/week @ 2024-06-13 3143/week @ 2024-06-20 4478/week @ 2024-06-27

12,198 每月下载量
6 库中使用(5 个直接使用)

自定义许可

22KB
161

coz-rs

Rust 对 coz 因果分析性能分析器 的支持

Documentation

用法

首先,按照 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,如果您绘制它,应该看起来像这样

plot of toy.rs

请注意,我仍在学习如何在 coz 上运行的最佳应用程序以及提出最佳问题的最佳方式,以及在哪里放置延迟/吞吐量点。如果您有任何想法或很好的示例,请随时添加它们!

依赖关系

~90KB