pub struct BpfEvent {
pub record_id: Option<RecordId>,
pub ty: Type,
pub id: u32,
pub tag: [u8; 8],
pub flags: u16,
}
Expand description
BPF event.
§Examples
Running this example may require root privileges.
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::mpsc::channel;
use std::thread;
use perf_event_open::config::{Cpu, Opts, Proc, WakeUpOn};
use perf_event_open::count::Counter;
use perf_event_open::event::sw::Software;
static WAIT: AtomicBool = AtomicBool::new(true);
let (tid_tx, tid_rx) = channel();
thread::spawn(move || {
tid_tx.send(unsafe { libc::gettid() }).unwrap();
while WAIT.load(Ordering::Relaxed) {
std::hint::spin_loop();
}
// Load a BPF program to trigger a `BpfEvent` record.
aya::Ebpf::load_file("HelloWorld.bpf.o").unwrap();
});
let event = Software::Dummy;
let target = (Proc(tid_rx.recv().unwrap() as _), Cpu::ALL);
let mut opts = Opts::default();
opts.wake_up.on = WakeUpOn::Bytes(1);
opts.extra_record.bpf_event = true;
let counter = Counter::new(event, target, opts).unwrap();
let sampler = counter.sampler(5).unwrap();
counter.enable().unwrap();
WAIT.store(false, Ordering::Relaxed);
let mut iter = sampler.iter().into_async().unwrap();
while let Some(it) = iter.next().await {
println!("{:-?}", it);
}
Since linux-5.1
: https://github.com/torvalds/linux/commit/6ee52e2a3fe4ea35520720736e6791df1fb67106
Fields§
§record_id: Option<RecordId>
Record IDs.
ty: Type
BPF event type.
id: u32
BPF program ID.
tag: [u8; 8]
BPF program tag.
flags: u16
Flags.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for BpfEvent
impl RefUnwindSafe for BpfEvent
impl Send for BpfEvent
impl Sync for BpfEvent
impl Unpin for BpfEvent
impl UnwindSafe for BpfEvent
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more