| Crates.io | perf-event-data |
| lib.rs | perf-event-data |
| version | 0.1.8 |
| created_at | 2023-05-14 22:35:56.001444+00 |
| updated_at | 2025-01-21 02:48:14.195303+00 |
| description | Types and traits for parsing records emitted by perf_event_open |
| homepage | |
| repository | https://github.com/Phantomical/perf-event-data.git |
| max_upload_size | |
| id | 864512 |
| size | 195,586 |
Parse data emitted by perf_event_open into usable rust structs.
Record type is an enum with every known record type.parse module has what you need to parse bytes into known records.Putting it all together, we get
use perf_event_data::endian::Native;
use perf_event_data::parse::{ParseConfig, Parser};
use perf_event_data::Record;
fn main() {
let data: &[u8] = &[
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
0x16, 0x4C, 0x01, 0x00, 0x17, 0x4C, 0x01, 0x00,
0x00, 0xA0, 0x48, 0x96, 0x4F, 0x7F, 0x00, 0x00,
0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xA0, 0x48, 0x96, 0x4F, 0x7F, 0x00, 0x00,
0x2F, 0x2F, 0x61, 0x6E, 0x6F, 0x6E, 0x00, 0x00,
];
let config = ParseConfig::<Native>::default();
let mut parser = Parser::new(data, config);
let record: Record = parser.parse().expect("failed to parse the record");
// ...
}
perf-event2 crate allows you to set up sampled perf event counters.
You will likely need this, or an equivalent crate, in order to get the event
data this crate parses.linux-perf-event-reader crate provides similar functionality to this
one.