开源工具学习记录之流程梳理
近期对腾讯的的开源项目: nettrace(网络故障分析工具) ,进行源码学习。
开源仓库:Nettrace开源仓库
开源工具实现注释:nettrace学习记录
Nettrace 源码分析
nettrace数据分析模块主要涉及到以下几个文件中的源码:
nettrace.ctrace.c,trace.hanalysis.c,analysis.htrace_group.c

1. 数据采集模块
详细分析:Nettrace数据采集方法研究
1.1 main()入口函数
在nettrace.c的main()函数中,实现了从初始化跟踪数组, 到准备跟踪环境,再到加载并附加bpf程序, 最终通过trace_poll函数启动网络数据监听与数据处理;

int main(int argc, char *argv[])
{
/*1.初始化跟踪组*/
init_trace_group();
/*2.参数解析*/
do_parse_args(argc, argv);
/*3.跟踪点有效性标记*/
if (trace_prepare())
goto err;
/*4.加载并附加eBPF程序*/
if (trace_bpf_load_and_attach()) {
pr_err("failed to load bpf\n");
goto err;
}
signal(SIGTERM, do_exit);
signal(SIGINT, do_exit);
pr_info("begin trace...\n");
/*5.启动网络追踪功能*/
trace_poll(trace_ctx);
do_exit(0);
return 0;
err:
return -1;
}
1.1.1初始化跟踪组
在项目编译过程中,会通过gen_trace.py脚本去解析trace.yaml文件,生成trace_group.c与kprobe_trace.h文件,前者定义了所有的挂载点以及跟踪点链表, 并组建成了跟踪点树, 后者对所有的挂载点定义了其索引;
nettrace.c ----------------- nettrace
trace.c |
xxxxx |
|
|
trace_group.c |
╱ |
trace.yaml -- gen_trace.py |
╲ |
kprobe_trace.h |
╲ |
kprobe.o → kprobe.skel.h
╱
kprobe.c
在trace_group.c文件中依靠init_trace_group()函数初始化了跟踪组,将项目所涉及的所有跟踪点构建成树的形式;
trace_group_t root_group = {
.name = "all",
.desc = "trace the whole kernel network stack",
.children = LIST_HEAD_INIT(root_group.children),
.traces = LIST_HEAD_INIT(root_group.traces),
.list = LIST_HEAD_INIT(root_group.list),
};
trace_group_t group_link = {
.name = "link",
.desc = "link layer (L2) of the network stack",
.children = LIST_HEAD_INIT(group_link.children),
.traces = LIST_HEAD_INIT(group_link.traces),
.list = LIST_HEAD_INIT(group_link.list),
};
trace_t trace_dev_gro_receive = {
.desc = "",
.type = TRACE_FUNCTION,
.analyzer = &ANALYZER(default),
.is_backup = false,
.probe = false,
.name = "dev_gro_receive",
.skb = 2,
.custom = false,
.def = true,
.index = INDEX_dev_gro_receive,
.prog = "__trace_dev_gro_receive",
.parent = &group_link_in,
.rules = LIST_HEAD_INIT(trace_dev_gro_receive.rules),
};
trace_list_t trace_dev_gro_receive_list = {
.trace = &trace_dev_gro_receive,
.list = LIST_HEAD_INIT(trace_dev_gro_receive_list.list)
};
rule_t rule_trace_dev_gro_receive_0 = {
.level

最低0.47元/天 解锁文章
1519

被折叠的 条评论
为什么被折叠?



