13次发布

0.4.8 2022年11月7日
0.4.7 2021年4月27日
0.4.6 2020年12月12日
0.4.5 2020年8月18日
0.4.2 2019年12月22日

#68 in Unix APIs

Download history 18417/week @ 2024-03-14 17557/week @ 2024-03-21 17157/week @ 2024-03-28 17666/week @ 2024-04-04 16706/week @ 2024-04-11 18245/week @ 2024-04-18 17415/week @ 2024-04-25 15494/week @ 2024-05-02 14424/week @ 2024-05-09 14211/week @ 2024-05-16 11328/week @ 2024-05-23 11143/week @ 2024-05-30 12510/week @ 2024-06-06 12593/week @ 2024-06-13 12793/week @ 2024-06-20 9182/week @ 2024-06-27

48,967 每月下载量
用于 55 个crate(7 个直接使用)

MIT/Apache

67KB
584 行代码(不包括注释)

perf-event: Linux性能监控的Rust接口

该库使用Linux perf_event_open API来访问性能监控的硬件和软件。使用 Builder 创建一个perf事件计数器,然后使用 enabledisable 启动和停止计数。调用 read 获取计数。

例如,这个例子计算了调用 println! 所使用的循环数。尝试调整向量的长度以查看循环计数的变化。

use perf_event::Builder;

fn main() -> std::io::Result<()> {
    let mut counter = Builder::new().build()?;

    let vec = (0..=51).collect::<Vec<_>>();

    counter.enable()?;
    println!("{:?}", vec);
    counter.disable()?;

    println!("{} instructions retired", counter.read()?);

    Ok(())
}

由于我们没有指定要计数的具体事件类型,Builder 默认为 PERF_COUNT_HW_INSTRUCTIONS 事件,其文档说明

已退出的指令。请注意,这些可能会受到各种问题的影响,最显著的是硬件中断计数。

examples 目录中包含了一些计算其他类型事件的程序。

另请参阅

perfcnt crate 提供了比该crate更广泛的Linux perf_event_open API的覆盖。

Markus Stange的 linux-perf-event-reader 支持事件。该crate目前只处理计数器。

not-perf 项目是用Rust重写的 perf,并包含大量处理Linux perf API的代码。

依赖项

约290KB