A linux Pressure Stall Information (PSI) file descriptor monitor library for Rust.
use presutaoru::{PsiFdBuilder, PsiEntry, StallType, PsiMonitor};
use std::time::Duration;
let psi_fd = PsiFdBuilder::default()
.entry(presutaoru::PsiEntry::Cpu)
.stall_type(presutaoru::StallType::Some)
.stall_amount(Duration::from_micros(500))
.time_window(Duration::from_secs(1))
.build()
.unwrap();//! [dependencies]
//! presutaoru = { version = "0.1", features = ["monitor"] }
let mut monitor = PsiMonitor::new();
monitor.add_fd(psi_fd);When using std::thread:
// same as above
//! [dependencies]
//! presutaoru = { version = "0.1", features = ["monitor", "thread"] }
let mut thread = monitor.into_thread().unwrap();
thread.start().unwrap();
while let Ok(r) = thread.recv() {
match r {
Event::Ready(id) => println!("psi event triggerd on: {:?}", id),
Event::Failure(e) => eprintln!("{}", e.to_string()),
}
}Or register the file desc to tokio's reactor:
// same as above
//! [dependencies]
//! presutaoru = { version = "0.1", features = ["monitor", "tokio"] }
use presutaoru::tokio::PsiTokioReactor;
let mut job = monitor.into_tokio_reactor().unwrap();
job.start().unwrap();
while let Ok(r) = job.recv().await {
match r {
Event::Ready(id) => println!("psi event triggerd on: {:?}", id),
Event::Failure(e) => eprintln!("{}", e.to_string()),
}
}All file descriptors will be closed when the monitor or its thread / job are dropped.
// ...
drop(monitor); // all fds are closed here
// ...
// in the thread example
drop(thread); // all fds are closed here
// ...
// in the tokio example
drop(jobs); // all fds are closed heremonitor: Enable PSI event monitoring functionality.thread: Enable monitoring using std::thread.tokio: Enable monitoring using tokio's reactor.
All features are disabled by default.
thread and tokio features require monitor feature to be enabled.
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.