1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//! Linux Pressure Stall Information (PSI) support for Rust.
//!
//! # About
//!
//! The Linux [Pressure Stall Information (PSI)] feature provides real-time
//! pressure information for CPU, IO and memory.
//! [psi] is a rust library for reading PSI and monitoring for pressure
//! thresholds on Linux 4.20+.
//!
//! # Example
//!
//! ```
//! use crate::psi::*;
//!
//! fn example() -> Result<()> {
//! let all: AllPsiStats = PsiKind::Memory.read_psi()?;
//! if all.some.avg10 > 0.1f32 {
//! // do something
//! }
//! let full: Psi = PsiKind::Memory.read_psi_line(PsiLine::Full)?;
//! if full.avg60 > 0.1f32 {
//! // do something else
//! }
//! Ok(())
//! }
//! ```
//!
//! # Monitor Example
//!
//! ```
//! use std::time::Duration;
//! use crate::psi::*;
//!
//! fn example() -> Result<()> {
//! let mut monitor = PsiMonitor::new()?;
//! let oom_id = monitor.add_trigger(
//! Trigger::new_builder()
//! .memory()
//! .full()
//! .stall(Duration::from_millis(100))
//! .window(Duration::from_millis(500))
//! .build(),
//! )?;
//!
//! loop {
//! let psi_event: PsiEvent = monitor.wait_single()?;
//! // react to psi_event
//! }
//! }
//! ```
//!
//! # TODO
//! * cgroup2 support
//!
//! [psi]: https://crates.io/crates/psi
//! [Pressure Stall Information (PSI)]: https://www.kernel.org/doc/html/latest/accounting/psi.html
pub use crate;
pub use ;
pub use ;
pub use Trigger;