fix(syscall-stat): stop skipping syscall key 0 during stats traversal and no top mode - #119
yuKing123-king wants to merge 1 commit into
Conversation
3b8787c to
2d9bbe7
Compare
f411ec9 to
e379b4d
Compare
PR Reviewer Guide 🔍(Review updated until commit 5dabdbb)Here are some key observations to aid the review process:
|
… and no top mode Signed-off-by: Wang Yu <wangyu6@uniontech.com>
e379b4d to
5dabdbb
Compare
已更改 |
|
Persistent review updated to latest commit 5dabdbb |
|
你好,这是对 libdkapture#119 fix(syscall-stat): stop skipping syscall key 0 during stats 的评审。 本轮为 DKapture 两仓(libdkapture / dkapture-bpf)全部以 fix 开头 open PR 的批量评审,共 17 个;汇总表如下,本 PR 加粗。逐项详评见分隔线下方。
本 PR 评审详情总体结论: 两项修复均成立。key 0 语义核实:include/syscall-tbl.h:8 为 __SYSCALL(0, read),0..453 编号连续无空洞(实测无 GAP),syscall 0 是有效键;旧代码 observe/syscall-stat.cpp:291 以 key=0 调 get_next_key 从键 1 起遍历,键 0(read)统计永远读不到;新代码先以 NULL 取首键(observe/syscall-stat.cpp:294),libbpf 语义正确。“t”选项在基线已注册于 lopts(:80)但 parse_args 无 case,落入 default 使 -t 直接 Usage+exit(-1),新增 case 't'(:187-188)补齐 top 模式。中期 commit 的 lret/ret 循环终止 bug(bot 评论 5264347748)在最终 commit 已修复:四条路径(:299-303、:305-309、:311-316、:319-320)均更新 ret。 主要问题:
次要建议:
亮点: 顺带给 bpf_map_lookup_elem 加返回值检查(:298-303),避免基线未初始化 info 被使用。 commit message: 符合规范(conventional commits + scope + DCO),仅措辞与拆分见上。 已有讨论: 无人工评论;bot 曾报 Loop Termination Bug,最终 diff 已不存在,视为已解决。 |
修复了两个测试过程中发现的 Bug
Bug 1: 修复系统调用号 0 (read) 统计丢失问题
key初始化为 0,且使用bpf_map_get_next_key查找下一个 key。第一个 key 就是 0,get_next_key会跳过它直接找下一个,后续使用nxt_key作为真正第一个开始查找的key,导致系统调用号为0的readsyscall 永远不被统计。Bug 2: 修复
--top/-t动态刷新功能无效问题parse_args参数解析函数中遗漏了对-t和--top选项的处理。parse_args中添加了对应的 case 分支,使终端能正确识别并开启动态刷新模式。