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

fix some bugs && commit 流程图

# RustPerf
`rustperf`是一个基于rCore-Tutorial的、类似top的性能监测工具。它的大致原理如下图:
![](F:\Desktop\program\OS\rustperf\流程图.png)
# 主程序
负责主要功能的用户态监控程序在`user/src/bin/top.rs`,由它编译出的`top`程序会执行同一目录下的`monitor`程序. `monitor`程序会通过3号文件标识符读取(读取的操作从`os/src/fs/proc.rs`开始)内核中的信息。
# 魔改
如果想在您的rCore-Tutorial上运行这个监控程序,除了添加`top.rs`,`monitor.rs``os/src/fs/proc.rs`外,您还需要修改内核中的其他部分。具体如下(use等依赖可能不全):
## os/Cargo.toml和user/Cargo.toml
```
[dependencies]
# ...
serde_json = { version = "1.0", default-features = false, features = ["alloc"] }
serde = { version = "1.0",default-features = false, features = ["derive"] }
```
## os/src/task.rs
## os/src/manager.rs
## os/src/processor.rs
<<<<<<< HEAD
# RustPerf
`rustperf`是一个基于rCore-Tutorial的、类似top的性能监测工具。它的大致原理如下图:
<img src="流程图.png" alt="流程图.png" style="zoom:60%;" />
# 主程序
负责主要功能的用户态监控程序在`user/src/bin/top.rs`,由它编译出的`top`程序会执行同一目录下的`monitor`程序. `monitor`程序会通过3号文件标识符读取(读取的操作从`os/src/fs/proc.rs`开始)内核中的信息。
# 魔改
如果想在您的rCore-Tutorial上运行这个监控程序,除了添加`top.rs`,`monitor.rs``os/src/fs/proc.rs`外,您还需要修改内核中的其他部分。具体如下(use等依赖可能不全):
## os/Cargo.toml和user/Cargo.toml
```
[dependencies]
# ...
serde_json = { version = "1.0", default-features = false, features = ["alloc"] }
serde = { version = "1.0",default-features = false, features = ["derive"] }
```
## os/src/task.rs
## os/src/manager.rs
## os/src/processor.rs
=======
# RustPerf
`rustperf`是一个基于rCore-Tutorial的、类似top的性能监测工具。它的大致原理如下图:
![rustperf图示](./rustperf.jpg)
# 主程序
负责主要功能的用户态监控程序在`user/src/bin/top.rs`,由它编译出的`top`程序会执行同一目录下的`monitor`程序. `monitor`程序会通过3号文件标识符读取(读取的操作从`os/src/fs/proc.rs`开始)内核中的信息。
# 魔改
如果想在您的rCore-Tutorial上运行这个监控程序,除了添加`top.rs`,`monitor.rs``os/src/fs/proc.rs`外,您还需要修改内核中的其他部分。具体如下(use等依赖可能不全):
## os/Cargo.toml和user/Cargo.toml
```
[dependencies]
# ...
serde_json = { version = "1.0", default-features = false, features = ["alloc"] }
serde = { version = "1.0",default-features = false, features = ["derive"] }
```
## os/src/task.rs
## os/src/manager.rs
## os/src/processor.rs
>>>>>>> 60373bbac37ce2b8b21ce5c7d69a17753b7a17f2
......@@ -90,6 +90,7 @@ pub fn main() {
if proc_stat[i].status == TaskStatus::Zombie {
continue;
}
<<<<<<< HEAD
//println!("{} ", proc_stat[i].name);
print!(
......@@ -169,12 +170,29 @@ pub fn main() {
print!("\n{:<82}", "");
}
if sycall_cnt.syscall_getpid.0 != 0 {
=======
println!("\x1b[2J");
println!("-----------------------------------------------------------------------------------------------------------------------");
println!(" rCore-Tutorial-v3 Resource Monitor Time: {} s", time_sec);
println!("-----------------------------------------------------------------------------------------------------------------------\n");
let proc_stat: Vec<ProcInfoDirect> = from_str(&temp).unwrap();
println!("Process | pid | ppid | status | heap | mem | cpu time | syscall | times | duration ");
println!("-----------------------------------------------------------------------------------------------------------------------\n");
for i in 0..proc_stat.len() {
if proc_stat[i].status == TaskStatus::Zombie {
continue;
}
//println!("{} ", proc_stat[i].name);
>>>>>>> 60373bbac37ce2b8b21ce5c7d69a17753b7a17f2
print!(
"{:<18}{:^4} {}ms",
"SYSCALL_GETPID", sycall_cnt.syscall_getpid.0, sycall_cnt.syscall_getpid.1
);
print!("\n{:<82}", "");
}
<<<<<<< HEAD
if sycall_cnt.syscall_fork.0 != 0 {
print!(
"{:<18}{:^4} {}ms",
......@@ -202,6 +220,12 @@ pub fn main() {
//println!("{} ", proc_stat[i].total_size);
//println!("{} ", proc_stat[i].cpu_time);
=======
println!("-----------------------------------------------------------------------------------------------------------------------");
//println!("{} ", proc_stat[i].total_size);
//println!("{} ", proc_stat[i].cpu_time);
>>>>>>> 60373bbac37ce2b8b21ce5c7d69a17753b7a17f2
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册