TGTGInsighttelegram intelligenceLIVE / telegram public index
Post content
Post content
我有个不太健康的习惯, 就是相比阅读代码, 我更相信 trace 的结果. 给两个例子. 第一个是 dockerd, 如果你去看代码研究 docker 容器在什么时候生成 veth 的话, 你也许能找到它调用 CNM 的链路, 但是你很可能不会注意到, 这条链路的调用起点不是 dockerd 不是客户端, 而是 runc prehook 用一个命令行回调. 第二个是 tcp time wait 的状态转化, 如果你直接在 torvalds/linux 里搜 ag '\s+=\s+TCP_TIME_WAIT', 会得到如图的结果. 不知道啥是 minisock 不过第二个搜索结果看起来靠谱多了, 去深入研究了一会儿就心满意足地离开了评论区, 但是如果你用 ftrace(1) 或者 kprobe 追溯一下就会发现, 其实 localhost 的连接调用的基本是第一处代码. 四年多以前侯老师批评我 debug 就知道打断点偷懒, 但我还是觉得, 用 debugger / tracing tools 来探索未知世界, 是更有效率更不容易出错的现代做法. (侯老师永远是我老师, 非黑) (第二题的更现代解法是用 BPF_PROG_TYPE_SOCK_OPS 类型的 bpf 程序追踪 socket 状态变化, 这样连 kprobe 都不用找)