Crates.io | perf-event-data |
lib.rs | perf-event-data |
version | 0.1.6 |
source | src |
created_at | 2023-05-14 22:35:56.001444 |
updated_at | 2024-05-21 08:22:50.372915 |
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 | 190,439 |
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.