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
```rust use perfeventdata::endian::Native; use perfeventdata::parse::{ParseConfig, Parser}; use perfeventdata::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.