提交 d052933c 编写于 作者: hm12299's avatar hm12299

add true cpu utility

上级 6af71821
use lazy_static::*;
use core::cell::RefCell;
use core::{borrow::BorrowMut, cell::RefCell};
pub struct CpuStat{
inner: RefCell<CpuStatInner>,
}
struct CpuStatInner{
time_stamp: usize,
sample_duration: usize,
sample_busy_duration: usize,
sample_busy_want: usize,
busy_start: usize,
is_input: bool,
}
impl CpuStat{
pub fn new() -> Self{
Self{
inner: RefCell::new(CpuStatInner{
time_stamp: 0,
sample_duration: 0,
sample_busy_duration: 0,
sample_busy_want: 0,
busy_start: 0,
is_input: false,
}),
}
}
......@@ -26,15 +34,44 @@ lazy_static! {
pub static ref CPUSTAT: CpuStat = CpuStat::new();
}
pub fn set_sample_busy_duration(num: usize){
CPUSTAT.inner.borrow_mut().sample_busy_duration = num;
pub fn set_busy_start(num: usize){
let mut inner = CPUSTAT.inner.borrow_mut();
inner.busy_start = num;
inner.is_input = true;
//println!("set");
}
pub fn is_input() -> bool{
CPUSTAT.inner.borrow().is_input
}
pub fn set_sample_duration(num: usize){
CPUSTAT.inner.borrow_mut().sample_duration = num;
let mut inner = CPUSTAT.inner.borrow_mut();
inner.sample_duration = num;
inner.sample_busy_want = inner.sample_busy_duration;
inner.sample_busy_duration = 0;
}
pub fn set_sample_busy_duration(num: usize){
//println!("add");
let mut inner = CPUSTAT.inner.borrow_mut();
inner.is_input = false;
inner.sample_busy_duration += num - inner.busy_start;
//println!("delta: {}", inner.sample_busy_duration);
//println!("sample_busy_duration:{}",inner.sample_duration);
}
pub fn get_cpu_info() -> (usize, usize){
let inner = CPUSTAT.inner.borrow_mut();
(inner.sample_duration, inner.sample_busy_duration)
(inner.sample_duration, inner.sample_busy_want)
}
pub fn set_time_stamp(num: usize){
let mut inner = CPUSTAT.inner.borrow_mut();
inner.time_stamp = num;
}
pub fn get_time_stamp() -> usize{
let mut inner = CPUSTAT.inner.borrow_mut();
inner.time_stamp
}
\ No newline at end of file
......@@ -7,8 +7,7 @@ use lazy_static::*;
use super::{fetch_task, TaskStatus};
use super::__switch;
use crate::trap::TrapContext;
use super::cpu::{set_sample_duration, set_sample_busy_duration};
use crate::timer::r_cycle;
use super::cpu::{get_time_stamp, is_input, set_sample_busy_duration, set_busy_start, set_sample_duration, set_time_stamp};
pub struct Processor {
inner: RefCell<ProcessorInner>,
......@@ -37,11 +36,11 @@ impl Processor {
pub fn run(&self) {
//println!("run");
let mut all: usize = 0;
let mut busy_time:usize = 0;
let mut timestamp = get_time();
let mut busy_time: usize = 0;
set_time_stamp(get_time());
//println!("run_rime {}", get_time());
loop {
if let Some(task) = fetch_task() {
let busy_start = r_cycle();
let idle_task_cx_ptr2 = self.get_idle_task_cx_ptr2();
// acquire
let mut task_inner = task.acquire_inner_lock();
......@@ -57,27 +56,27 @@ impl Processor {
//let mut task_inner = self.inner.borrow().current.unwrap().acquire_inner_lock();
//let inner_lock = self.inner.borrow_mut().current.as_ref().unwrap().acquire_inner_lock();
//let _ = inner_lock.stamp();
let busy_start = get_time();
set_busy_start(get_time());
//let busy_start = get_time();
//println!("run switch time start");
unsafe {
__switch(
idle_task_cx_ptr2,
next_task_cx_ptr2,
);
}
busy_time += get_time() - busy_start;
// println!("run switch time end");
//println!("busy_time: {}", busy_time);
//println!("out");
//task_inner.cpu_time += get_time_ms() - start_time;
}
let now = get_time();
all += now - timestamp;
timestamp = now;
if all / 12500 > 100{
//println!("1");
set_sample_duration(all);
set_sample_busy_duration(busy_time);
all = 0;
busy_time = 0;
let now = get_time();
all += now - get_time_stamp();
set_time_stamp(now);
if all > 1250000{
set_sample_duration(all);
all = 0;
}
}
}
......@@ -118,10 +117,14 @@ pub fn current_trap_cx() -> &'static mut TrapContext {
pub fn schedule(switched_task_cx_ptr2: *const usize) {
let idle_task_cx_ptr2 = PROCESSOR.get_idle_task_cx_ptr2();
//println!("idle switch start");
set_sample_busy_duration(get_time());
unsafe {
__switch(
switched_task_cx_ptr2,
idle_task_cx_ptr2,
);
}
//print!("");
//println!("idle switch end");
}
......@@ -4,6 +4,7 @@
{"message":"unused import: `get_time`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/syscall/process.rs","byte_start":192,"byte_end":200,"line_start":10,"line_end":10,"column_start":20,"column_end":28,"is_primary":true,"text":[{"text":"use crate::timer::{get_time, get_time_ms};","highlight_start":20,"highlight_end":28}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_imports)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove the unused import","code":null,"level":"help","spans":[{"file_name":"src/syscall/process.rs","byte_start":192,"byte_end":202,"line_start":10,"line_end":10,"column_start":20,"column_end":30,"is_primary":true,"text":[{"text":"use crate::timer::{get_time, get_time_ms};","highlight_start":20,"highlight_end":30}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `get_time`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/syscall/process.rs:10:20\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m10\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0muse crate::timer::{get_time, get_time_ms};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_imports)]` on by default\u001b[0m\n\n"}
{"message":"unused import: `ToString`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/task/task.rs","byte_start":389,"byte_end":397,"line_start":16,"line_end":16,"column_start":29,"column_end":37,"is_primary":true,"text":[{"text":"use alloc::string::{String, ToString};","highlight_start":29,"highlight_end":37}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the unused import","code":null,"level":"help","spans":[{"file_name":"src/task/task.rs","byte_start":387,"byte_end":397,"line_start":16,"line_end":16,"column_start":27,"column_end":37,"is_primary":true,"text":[{"text":"use alloc::string::{String, ToString};","highlight_start":27,"highlight_end":37}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `ToString`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/task/task.rs:16:29\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m16\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0muse alloc::string::{String, ToString};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\n"}
{"message":"unused import: `k210_hal::cache::Uncache`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/task/processor.rs","byte_start":98,"byte_end":122,"line_start":4,"line_end":4,"column_start":5,"column_end":29,"is_primary":true,"text":[{"text":"use k210_hal::cache::Uncache;","highlight_start":5,"highlight_end":29}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the whole `use` item","code":null,"level":"help","spans":[{"file_name":"src/task/processor.rs","byte_start":94,"byte_end":123,"line_start":4,"line_end":4,"column_start":1,"column_end":30,"is_primary":true,"text":[{"text":"use k210_hal::cache::Uncache;","highlight_start":1,"highlight_end":30}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `k210_hal::cache::Uncache`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/task/processor.rs:4:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m4\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0muse k210_hal::cache::Uncache;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"message":"unused import: `is_input`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/task/processor.rs","byte_start":290,"byte_end":298,"line_start":10,"line_end":10,"column_start":34,"column_end":42,"is_primary":true,"text":[{"text":"use super::cpu::{get_time_stamp, is_input, set_sample_busy_duration, set_busy_start, set_sample_duration, set_time_stamp};","highlight_start":34,"highlight_end":42}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the unused import","code":null,"level":"help","spans":[{"file_name":"src/task/processor.rs","byte_start":288,"byte_end":298,"line_start":10,"line_end":10,"column_start":32,"column_end":42,"is_primary":true,"text":[{"text":"use super::cpu::{get_time_stamp, is_input, set_sample_busy_duration, set_busy_start, set_sample_duration, set_time_stamp};","highlight_start":32,"highlight_end":42}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `is_input`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/task/processor.rs:10:34\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m10\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0muse super::cpu::{get_time_stamp, is_input, set_sample_busy_duration, set_busy_start, set_sample_duration, set_time_stamp};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\n"}
{"message":"unused import: `ToString`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/fs/proc.rs","byte_start":79,"byte_end":87,"line_start":3,"line_end":3,"column_start":29,"column_end":37,"is_primary":true,"text":[{"text":"use alloc::string::{String, ToString};","highlight_start":29,"highlight_end":37}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the unused import","code":null,"level":"help","spans":[{"file_name":"src/fs/proc.rs","byte_start":77,"byte_end":87,"line_start":3,"line_end":3,"column_start":27,"column_end":37,"is_primary":true,"text":[{"text":"use alloc::string::{String, ToString};","highlight_start":27,"highlight_end":37}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `ToString`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/fs/proc.rs:3:29\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m3\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0muse alloc::string::{String, ToString};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\n"}
{"message":"unused import: `Deserialize`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/fs/proc.rs","byte_start":231,"byte_end":242,"line_start":10,"line_end":10,"column_start":23,"column_end":34,"is_primary":true,"text":[{"text":"use super::{Serialize,Deserialize};","highlight_start":23,"highlight_end":34}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the unused import","code":null,"level":"help","spans":[{"file_name":"src/fs/proc.rs","byte_start":230,"byte_end":242,"line_start":10,"line_end":10,"column_start":22,"column_end":34,"is_primary":true,"text":[{"text":"use super::{Serialize,Deserialize};","highlight_start":22,"highlight_end":34}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `Deserialize`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/fs/proc.rs:10:23\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m10\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0muse super::{Serialize,Deserialize};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^\u001b[0m\n\n"}
{"message":"unused imports: `sync::Arc`, `vec::Vec`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/fs/cpu.rs","byte_start":29,"byte_end":38,"line_start":2,"line_end":2,"column_start":13,"column_end":22,"is_primary":true,"text":[{"text":"use alloc::{sync::Arc, vec::Vec};","highlight_start":13,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/fs/cpu.rs","byte_start":40,"byte_end":48,"line_start":2,"line_end":2,"column_start":24,"column_end":32,"is_primary":true,"text":[{"text":"use alloc::{sync::Arc, vec::Vec};","highlight_start":24,"highlight_end":32}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the whole `use` item","code":null,"level":"help","spans":[{"file_name":"src/fs/cpu.rs","byte_start":17,"byte_end":50,"line_start":2,"line_end":2,"column_start":1,"column_end":34,"is_primary":true,"text":[{"text":"use alloc::{sync::Arc, vec::Vec};","highlight_start":1,"highlight_end":34}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused imports: `sync::Arc`, `vec::Vec`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/fs/cpu.rs:2:13\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m2\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0muse alloc::{sync::Arc, vec::Vec};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\n"}
......@@ -12,6 +13,7 @@
{"message":"unused import: `spin::Mutex`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/fs/cpu.rs","byte_start":158,"byte_end":169,"line_start":6,"line_end":6,"column_start":5,"column_end":16,"is_primary":true,"text":[{"text":"use spin::Mutex;","highlight_start":5,"highlight_end":16}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the whole `use` item","code":null,"level":"help","spans":[{"file_name":"src/fs/cpu.rs","byte_start":154,"byte_end":170,"line_start":6,"line_end":6,"column_start":1,"column_end":17,"is_primary":true,"text":[{"text":"use spin::Mutex;","highlight_start":1,"highlight_end":17}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `spin::Mutex`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/fs/cpu.rs:6:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m6\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0muse spin::Mutex;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^\u001b[0m\n\n"}
{"message":"unused import: `super::TaskStatus`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/fs/cpu.rs","byte_start":211,"byte_end":228,"line_start":10,"line_end":10,"column_start":5,"column_end":22,"is_primary":true,"text":[{"text":"use super::TaskStatus;","highlight_start":5,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the whole `use` item","code":null,"level":"help","spans":[{"file_name":"src/fs/cpu.rs","byte_start":207,"byte_end":229,"line_start":10,"line_end":10,"column_start":1,"column_end":23,"is_primary":true,"text":[{"text":"use super::TaskStatus;","highlight_start":1,"highlight_end":23}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `super::TaskStatus`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/fs/cpu.rs:10:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m10\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0muse super::TaskStatus;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"message":"unused import: `Deserialize`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/fs/cpu.rs","byte_start":252,"byte_end":263,"line_start":11,"line_end":11,"column_start":23,"column_end":34,"is_primary":true,"text":[{"text":"use super::{Serialize,Deserialize};","highlight_start":23,"highlight_end":34}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the unused import","code":null,"level":"help","spans":[{"file_name":"src/fs/cpu.rs","byte_start":251,"byte_end":263,"line_start":11,"line_end":11,"column_start":22,"column_end":34,"is_primary":true,"text":[{"text":"use super::{Serialize,Deserialize};","highlight_start":22,"highlight_end":34}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `Deserialize`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/fs/cpu.rs:11:23\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m11\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0muse super::{Serialize,Deserialize};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^\u001b[0m\n\n"}
{"message":"aborting due to 3 previous errors; 11 warnings emitted","code":null,"level":"error","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: aborting due to 3 previous errors; 11 warnings emitted\u001b[0m\n\n"}
{"message":"unused import: `borrow::BorrowMut`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/task/cpu.rs","byte_start":31,"byte_end":48,"line_start":2,"line_end":2,"column_start":12,"column_end":29,"is_primary":true,"text":[{"text":"use core::{borrow::BorrowMut, cell::RefCell};","highlight_start":12,"highlight_end":29}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `borrow::BorrowMut`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/task/cpu.rs:2:12\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m2\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0muse core::{borrow::BorrowMut, cell::RefCell};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"message":"aborting due to 3 previous errors; 13 warnings emitted","code":null,"level":"error","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: aborting due to 3 previous errors; 13 warnings emitted\u001b[0m\n\n"}
{"message":"Some errors have detailed explanations: E0432, E0433.","code":null,"level":"failure-note","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1mSome errors have detailed explanations: E0432, E0433.\u001b[0m\n"}
{"message":"For more information about an error, try `rustc --explain E0432`.","code":null,"level":"failure-note","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1mFor more information about an error, try `rustc --explain E0432`.\u001b[0m\n"}
......@@ -9,11 +9,9 @@ extern crate serde_json;
use alloc::string::{String, ToString};
use alloc::vec::Vec;
use core::str::from_utf8;
use core::time;
use serde::Deserialize;
use serde_json::from_str;
use user_lib::*;
use user_lib::console::getchar;
const PROC_INFO: usize = 3;
const CPU_INFO:usize = 4;
......@@ -75,22 +73,19 @@ pub fn main() {
// let start_time = get_time();
let sart_time = get_time();
while true {
//let proc_stat : [ProcStat; 20];
sleep(1000);
loop {
sleep(500);
let mut proc_info_buf: [u8; 3500] = [WHITE_SPACE; 3500];
let mut cpu_info_buf:[u8; 50] = [WHITE_SPACE; 50];
let sart_read_time = get_time();
//let c = getchar();
/*if c == 113{
exit(0);
}*/
read(PROC_INFO, &mut proc_info_buf);
read(CPU_INFO,&mut cpu_info_buf);
let time_end = get_time();
let time_sec = (time_end - sart_time) / 1000;
let time_end_sec = time_end - sart_read_time;
//println!("{}",from_utf8(&buf).unwrap().to_string());
let temp_proc_info = from_utf8(&proc_info_buf).unwrap().trim();
let temp_cpu_info = from_utf8(&cpu_info_buf).unwrap().trim();
if time_sec > 40{
......@@ -100,19 +95,20 @@ pub fn main() {
let proc_stat: Vec<ProcInfoDirect> = from_str(&temp_proc_info).unwrap();
let cpu_stat: (usize,usize) = from_str(&temp_cpu_info).unwrap();
let cpu_per = cpu_stat.1*100/cpu_stat.0;
// let cpu_stat = ((100*from_str(&temp_cpu_info).unwrap().1)/(from_str(&temp_cpu_info).unwrap().0));
pool.push(format_to_string_ln!("-------------------------------------------------------------------------------------------------------------------------"));
pool.push(format_to_string_ln!(" rCore-Tutorial-v3 Resource Monitor CPU: {}% Time: {} s Read Time: {}ms",cpu_per, time_sec, time_end_sec));
pool.push(format_to_string_ln!(" rCore-Tutorial-v3 Resource Monitor Time: {} s Read Time: {}ms", time_sec, time_end_sec));
pool.push(format_to_string_ln!("-------------------------------------------------------------------------------------------------------------------------"));
pool.push(format_to_string_ln!("Core"));
pool.push(format_to_string!("["));
for i in 0..cpu_per{
for _ in 0..cpu_per{
pool.push(format_to_string!("|"));
}
for i in cpu_per..100{
for _ in cpu_per..100{
pool.push(format_to_string!(" "));
}
pool.push(format_to_string_ln!("] {}%", cpu_per));
//pool.push(format_to_string_ln!("{} {}", cpu_stat.0, cpu_stat.1));
pool.push(format_to_string_ln!("-------------------------------------------------------------------------------------------------------------------------"));
pool.push(format_to_string_ln!("Process | pid | ppid | status | heap | mem | cpu time | syscall | times | duration "));
pool.push(format_to_string_ln!("-------------------------------------------------------------------------------------------------------------------------"));
......@@ -120,7 +116,6 @@ pub fn main() {
if proc_stat[i].status == TaskStatus::Zombie {
continue;
}
//println!("{} ", proc_stat[i].name);
pool.push(format_to_string!(
"{:<15}{:<10}{:<10}",
proc_stat[i].name, proc_stat[i].pid, proc_stat[i].ppid
......@@ -220,7 +215,7 @@ pub fn main() {
}
pool.push(format_to_string_ln!(""));
}
//pool.push(format_to_string!("-----------------------------------------------------------------------------------------------------------------------"));
pool.push(format_to_string_ln!("-----------------------------------------------------------------------------------------------------------------------"));
//println!("{} ", proc_stat[i].total_size);
//println!("{} ", proc_stat[i].cpu_time);
let whole = pool.join("");
......
......@@ -12,7 +12,7 @@ use user_lib::{exec, exit, fork, get_time, getpid, open, sleep, OpenFlags};
#[no_mangle]
pub fn main() {
let mut pid: isize = 0;
let runtime = [30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2];
let runtime = [30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0];
let mut child_id: usize = 0;
for i in 0..6 {
pid = fork();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册