// SPDX-License-Identifier: MPL-2.0 //! This module offers `/proc/loadavg` file support, which tells the user space //! about the cpu load average for the last 1, 5, and 15 minutes. //! //! Reference: use alloc::format; use crate::{ fs::{ procfs::template::{FileOps, ProcFileBuilder}, utils::Inode, }, prelude::*, process::posix_thread, sched::{self, loadavg::get_loadavg}, }; /// Represents the inode at `/proc/loadavg`. pub struct LoadAvgFileOps; impl LoadAvgFileOps { pub fn new_inode(parent: Weak) -> Arc { ProcFileBuilder::new(Self).parent(parent).build().unwrap() } } impl FileOps for LoadAvgFileOps { fn data(&self) -> Result> { let avg = get_loadavg(); let (nr_queued, nr_running) = sched::nr_queued_and_running(); let output = format!( "{:.2} {:.2} {:.2} {}/{} {}\n", avg[0], avg[1], avg[2], nr_running, nr_queued, posix_thread::last_tid(), ); Ok(output.into_bytes()) } }