17次发布
使用旧Rust 2015
0.2.2 | 2018年3月8日 |
---|---|
0.2.1-pre2 | 2018年4月19日 |
0.2.0 | 2017年7月10日 |
0.1.11 | 2017年1月2日 |
0.1.2 | 2015年11月25日 |
#193 在 性能分析 中
2,235 每月下载量
在 23 个crate中使用 (22 直接)
1MB
13K SLoC
FLAME
一个用于Rust的酷炫火焰图库
火焰图是查看性能分析信息的好方法。一眼就能看出程序在代码关键部分花费的时间,这可以帮助你了解哪些地方可能需要优化。
与像perf
这样的工具不同,后者会频繁地中断你的运行程序,并报告调用栈中的每个函数,FLAME允许你通过向自己的代码添加性能分析来选择你想要在图中看到的内容。
只需使用FLAME的任何API来注释你想获取计时信息的代码块的开始和结束,FLAME就会将这些计时信息分层组织。
文档
以下是如何使用FLAME的一些API的示例
extern crate flame;
use std::fs::File;
fn main() {
// Manual `start` and `end`
flame::start("read file");
let x = read_a_file();
flame::end("read file");
// Time the execution of a closure. (the result of the closure is returned)
let y = flame::span_of("database query", || query_database());
// Time the execution of a block by creating a guard.
let z = {
let _guard = flame::start_guard("cpu-heavy calculation");
cpu_heavy_operations_1();
// Notes can be used to annotate a particular instant in time.
flame::note("something interesting happened", None);
cpu_heavy_operations_2()
};
// Dump the report to disk
flame::dump_html(&mut File::create("flame-graph.html").unwrap()).unwrap();
// Or read and process the data yourself!
let spans = flame::spans();
println!("{} {} {}", x, y, z);
}
以下是dump_html
(来自不同项目)生成的火焰图的截图
llogiq 创建了 flamer,这是一个编译器插件,可以自动将FLAME分析插入到注释的函数中,允许你编写如下代码
#[flame]
fn this_function_is_profiled() {
...
}
所以,如果你正在使用Rust的nightly版本,试试它;flamer可能是使用FLAME最简单的方法!