Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
hm12299
RustPerf
提交
d09c5341
R
RustPerf
项目概览
hm12299
/
RustPerf
通知
4
Star
1
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
RustPerf
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
d09c5341
编写于
8月 17, 2021
作者:
hm12299
浏览文件
操作
浏览文件
下载
差异文件
fix some bugs && commit 流程图
上级
452ce881
60373bba
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
85 addition
and
30 deletion
+85
-30
README.md
README.md
+61
-30
os/target/riscv64gc-unknown-none-elf/debug/incremental/os-9qg6uwvbmflg/s-g1fgywxbtn-a2xxsj.lock
...ebug/incremental/os-9qg6uwvbmflg/s-g1fgywxbtn-a2xxsj.lock
+0
-0
os/target/riscv64gc-unknown-none-elf/debug/incremental/os-ys6jixaj8r4l/s-g1fgywwzf6-edqi3b.lock
...ebug/incremental/os-ys6jixaj8r4l/s-g1fgywwzf6-edqi3b.lock
+0
-0
user/src/bin/monitor.rs
user/src/bin/monitor.rs
+24
-0
未找到文件。
README.md
浏览文件 @
d09c5341
# 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
os/target/riscv64gc-unknown-none-elf/debug/incremental/os-9qg6uwvbmflg/s-g1fgywxbtn-a2xxsj.lock
0 → 100755
浏览文件 @
d09c5341
os/target/riscv64gc-unknown-none-elf/debug/incremental/os-ys6jixaj8r4l/s-g1fgywwzf6-edqi3b.lock
0 → 100755
浏览文件 @
d09c5341
user/src/bin/monitor.rs
浏览文件 @
d09c5341
...
...
@@ -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);
>>>>>>>
60373
bbac37ce2b8b21ce5c7d69a17753b7a17f2
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);
>>>>>>>
60373
bbac37ce2b8b21ce5c7d69a17753b7a17f2
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录