update readme

This commit is contained in:
zy
2023-12-27 03:47:50 -05:00
parent a6b19ff015
commit 02481d5c87

View File

@@ -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 同理.
@@ -282,8 +303,3 @@ variable monitor 添加/删除
((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
```