#perf-event #linux #perf #bindings #call #direct #unsafe-bindings

perf-event-open-sys

为Linux的perf_event_open系统调用提供不安全、直接绑定的相关类型和常量

13个版本 (4个主要更新)

4.0.0 2022年11月7日
3.0.0 2022年7月4日
2.0.1 2022年5月31日
1.0.1 2020年8月21日
0.3.0 2019年12月21日

#640 in Unix API

Download history 35195/week @ 2024-03-14 33300/week @ 2024-03-21 32388/week @ 2024-03-28 32011/week @ 2024-04-04 31349/week @ 2024-04-11 33637/week @ 2024-04-18 31792/week @ 2024-04-25 30264/week @ 2024-05-02 28366/week @ 2024-05-09 27088/week @ 2024-05-16 26480/week @ 2024-05-23 24979/week @ 2024-05-30 27121/week @ 2024-06-06 27236/week @ 2024-06-13 27769/week @ 2024-06-20 21555/week @ 2024-06-27

每月下载量107,933
87个crate中使用(直接使用5个)

MIT/Apache

250KB
6.5K SLoC

为Linux的perf_event_open系统调用提供直接、不安全的Rust绑定

此crate导出Rust包装器,用于访问Linux系统调用性能监控计数器和跟踪设施。这包括

  • 处理器的性能监控寄存器
  • 用于上下文切换和页面错误的内核计数器
  • 内核跟踪点、kprobe和uprobes
  • 处理器的跟踪设施,如Intel的分支跟踪存储(BTS)
  • 硬件断点

此crate提供

  • Linux perf_event_open 系统调用的Rust包装器
  • 针对由 perf_event_open 返回的文件描述符的ioctls的Rust包装器
  • perf_event_open 相关头文件的绑定,由 bindgen 自动生成

所有函数都是对底层调用的直接、不安全的包装器。它们在原始指针和原始文件描述符上操作。

有关基本功能的安全API,请参阅perf-event crate。

在其他平台使用perf类型

尽管Windows和Mac没有perf_event_open系统调用,但perf_event_open_sys库仍然可以在这些平台上构建:在bindings模块中的类型定义对需要解析Linux或Android系统生成的性能相关数据的代码很有用。系统调用和ioctl包装函数不可用。

更新系统调用绑定

bindings模块定义了Linux perf_event_open系统调用及其相关ioctl使用的Rust等价类型和常量。这些是通过从内核的C头文件自动生成的,使用bindgen。接口和底层功能都非常复杂,并且以稳定的速度添加新功能。要更新生成的绑定

  • 运行与此README.md文件位于同一目录中的regenerate.sh脚本。这会运行bindgen并将输出拼接入bindings模块的源代码中,保留文档。

  • 修复src/lib.rs中的注释,明确说明你从哪个内核头文件生成了绑定。

  • 更新crate的主要版本。新的内核头文件版本可能向结构体添加字段,这会导致破坏性更改。(如模块文档中所述,正确编写的用户crate不应受到影响,但似乎没有必要冒cargo update破坏构建的风险。当用户需要从绑定中获取新功能时,他们可以更新请求的crate的主要版本号。)

依赖项