1 个不稳定版本

0.1.3 2020年4月8日

#228 in 性能分析

自定义许可

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 来运行段错误处理程序,以打印 "你的栈已用完",但这个备用栈太小,无法运行 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,如果您绘制它,应该看起来像这样

plot of toy.rs

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

依赖关系

~90KB