update readme
This commit is contained in:
32
README.md
32
README.md
@@ -10,6 +10,7 @@ changelog
|
||||
12.1 一个编译问题,添加说明.
|
||||
12.5 编译问题补充
|
||||
12.21 跟进更新,重新部分内容
|
||||
12.27 测试工具更新
|
||||
```
|
||||
|
||||
## 说明
|
||||
@@ -246,7 +247,27 @@ usercase 文件夹下
|
||||
- `userstack.c`: 测试用户态堆栈输出
|
||||
- `hptest.c`: 测试 hugePage 挂载
|
||||
|
||||
## 其他
|
||||
根目录 Dockerfile 文件对应 容器内用户堆栈输出测试.
|
||||
|
||||
```shell
|
||||
docker build -t userstack-image .
|
||||
docker run --privileged --device=/d/variable_monitor -v /:/host -it userstack-image
|
||||
```
|
||||
|
||||
## Test Tools
|
||||
|
||||
用户空间命令行工具 `ucli` 提供了查看给定 pid / tgid 的 Task 信息的功能.
|
||||
|
||||
```shell
|
||||
# pid 获取结果为线程对应 Task 信息
|
||||
./build/ucli --pid=2048
|
||||
# tgid 获取结果为进程下所有线程对应 Task 信息
|
||||
./build/ucli --tgid=2048
|
||||
```
|
||||
|
||||
测试工具使用独立缓存区,不会影响 variant_monitor 的输出.
|
||||
|
||||
## 源码说明
|
||||
|
||||
程序分为两部分: 字符设备 和 用户空间接口, 两者通过 ioctl 通信.
|
||||
|
||||
@@ -257,7 +278,7 @@ usercase 文件夹下
|
||||
|
||||
定时器分组
|
||||
- hrTimer 数据结构定义在全局数组 `kernel_wtimer_list`.分配定时器时,会检查遍历 `kernel_wtimer_list` 比较定时器间隔,
|
||||
- 相同定时间隔的 watch 分配到同一组,对应同一个 hrTimer.
|
||||
- 属于 **同一个线程** 且 **相同定时间隔** 的 watch 分配到同一组,对应同一个 hrTimer.
|
||||
- 若一个定时器监控变量数量超过 `TIMER_MAX_WATCH_NUM` (32),则会创建一个新的 hrTimer.
|
||||
- hrTimer 的总数量(`kernel_wtimer_list` 数组长度)限制是 `MAX_TIMER_NUM`(128).
|
||||
|
||||
@@ -266,7 +287,7 @@ usercase 文件夹下
|
||||
- 一个模块内全局链表 `watch_local_memory_list` 存储每一个成功挂载的变量对应的 page 和 kt,执行字符设备的 close 操作时,遍历并卸载.
|
||||
|
||||
variable monitor 添加/删除
|
||||
- kernel_watch_arg 数据结构中有 pid 的成员变量,但添加变量监控时,不按照进程区分.
|
||||
- kernel_watch_arg 数据结构中有 pid 的成员变量,但添加变量监控 按照传入的 pid 区分.
|
||||
- 删除时遍历全部监控变量,比较 pid.
|
||||
- 删除造成的缺位,将最后的变量移动到空位, sentinel--; hrTimer 同理.
|
||||
|
||||
@@ -281,9 +302,4 @@ variable monitor 添加/删除
|
||||
#define __task_contributes_to_load(task) \
|
||||
((READ_ONCE(task->__state) & TASK_UNINTERRUPTIBLE) != 0 && (task->flags & PF_FROZEN) == 0 && \
|
||||
(READ_ONCE(task->__state) & TASK_NOLOAD) == 0)
|
||||
```
|
||||
|
||||
```
|
||||
docker build -t userstack-image .
|
||||
docker run --privileged --device=/d/variable_monitor -v /:/host -it userstack-image
|
||||
```
|
||||
Reference in New Issue
Block a user