summaryrefslogtreecommitdiff
path: root/perf-event/examples/insns-for-pid.rs
diff options
context:
space:
mode:
authorDennis Kobert <dennis@kobert.dev>2025-03-08 21:06:20 +0100
committerDennis Kobert <dennis@kobert.dev>2025-03-08 21:07:27 +0100
commitb4eae244826a0fb8907ef50c8ef9a38da40b719d (patch)
treeb57014575b3dfc38c5f25115357253d037b3189c /perf-event/examples/insns-for-pid.rs
parent06dd6966ad27f0c52c56092dd2f45a06541e5c6c (diff)
Vendor perf event
Diffstat (limited to 'perf-event/examples/insns-for-pid.rs')
-rw-r--r--perf-event/examples/insns-for-pid.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/perf-event/examples/insns-for-pid.rs b/perf-event/examples/insns-for-pid.rs
new file mode 100644
index 0000000..3fc73ae
--- /dev/null
+++ b/perf-event/examples/insns-for-pid.rs
@@ -0,0 +1,27 @@
+use libc::pid_t;
+use perf_event::events::Hardware;
+use perf_event::Builder;
+use std::thread::sleep;
+use std::time::Duration;
+
+fn main() -> std::io::Result<()> {
+ let pid: pid_t = std::env::args()
+ .nth(1)
+ .expect("Usage: insns-for-pid PID")
+ .parse()
+ .expect("Usage: insns-for-pid PID");
+
+ let mut insns = Builder::new()
+ .observe_pid(pid)
+ .kind(Hardware::BRANCH_INSTRUCTIONS)
+ .build()?;
+
+ // Count instructions in PID for five seconds.
+ insns.enable()?;
+ sleep(Duration::from_secs(5));
+ insns.disable()?;
+
+ println!("instructions in last five seconds: {}", insns.read()?);
+
+ Ok(())
+}