presutaoru

Crates.iopresutaoru
lib.rspresutaoru
version0.1.0-alpha.2
created_at2025-12-01 11:10:32.808472+00
updated_at2025-12-02 15:28:12.479903+00
descriptionA linux Pressure Stall Information (PSI) file descriptor wrapper / monitor library for Rust.
homepage
repositoryhttps://github.com/chise0713/presutaoru
max_upload_size
id1959644
size43,627
チセ (chise0713)

documentation

README

presutaoru (ぷれすたおる)

A linux Pressure Stall Information (PSI) file descriptor monitor library for Rust.

Example

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();

Addionally, to monitor PSI events, enable the monitor feature.

//! [dependencies]
//! presutaoru = { version = "0.1", features = ["monitor"] }
let mut monitor = PsiMonitor::new();
monitor.add_fd(psi_fd);

Running the monitor

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 here

Features

  • monitor: 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.

License

This project is licensed under either of

at your option.

Commit count: 0

cargo fmt