summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authorzy <[email protected]>2023-12-27 03:47:50 -0500
committerzy <[email protected]>2023-12-27 03:47:50 -0500
commit02481d5c87bda5748393a7d92b24ccbcf306f958 (patch)
tree0baa01bf88e1fd8115ca1d3d2abfaf0acd305d2b /README.md
parenta6b19ff015ad70be7321543346bf7b40eed5e416 (diff)
update readmeHEADmaster
Diffstat (limited to 'README.md')
-rw-r--r--README.md32
1 files changed, 24 insertions, 8 deletions
diff --git a/README.md b/README.md
index f82dbf1..d7a2944 100644
--- a/README.md
+++ b/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
``` \ No newline at end of file