TraceCompass为什么同时能解析LTTng和Perf的cft Log

问题的引出和现在的上下文时空

就要准备生成metadata 为我的程序。
一旦开动,就很难转向了。
所以,开始之前,有许多问题在困扰着我,其中一个是为什么LTTng的meta与perf的meta定义并不同,
lttng是compass的亲兄弟,而不是perf.
所以,开始之前,我需要将这件事搞清楚。

问题的引出

被lttng和perf抓取的cft信息,都能被 trace compass解析。

TraceCompass

LTTng的图形

下图是Lttng
Lttng在tracecompass### Perf 的图形
下图是Perf
Perf在TraceCompass说明:可以看到,二者都能正常工作。

再来看Meta

二者的Meta define

LTTng meta

here is lttng metadata defination of sched_switch

event {
	name = "sched_switch";
	id = 1290;
	stream_id = 0;
	fields := struct {
		integer { size = 8; align = 8; signed = 1; encoding = UTF8; base = 10; } _prev_comm[16];
		integer { size = 32; align = 8; signed = 1; encoding = none; base = 10; } _prev_tid;
		integer { size = 32; align = 8; signed = 1; encoding = none; base = 10; } _prev_prio;
		integer { size = 64; align = 8; signed = 1; encoding = none; base = 10; } _prev_state;
		integer { size = 8; align = 8; signed = 1; encoding = UTF8; base = 10; } _next_comm[16];
		integer { size = 32; align = 8; signed = 1; encoding = none; base = 10; } _next_tid;
		integer { size = 32; align = 8; signed = 1; encoding = none; base = 10; } _next_prio;
	};
};

Perf meta

here is perf’s metadata of sched_switch

event {
	id = 3;
	name = "sched:sched_switch";
	stream_id = 0;
	fields := struct {
		integer { size = 64; align = 1; signed = false; encoding = none; base = hexadecimal; byte_order = le; } perf_ip;
		integer { size = 32; align = 1; signed = true; encoding = none; base = decimal; byte_order = le; } perf_tid;
		integer { size = 32; align = 1; signed = true; encoding = none; base = decimal; byte_order = le; } perf_pid;
		integer { size = 64; align = 1; signed = false; encoding = none; base = decimal; byte_order = le; } perf_id;
		integer { size = 64; align = 1; signed = false; encoding = none; base = decimal; byte_order = le; } perf_period;
		integer { size = 64; align = 1; signed = false; encoding = none; base = decimal; byte_order = le; } perf_data_src;
		integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = le; } perf_callchain_size;
		integer { size = 64; align = 1; signed = false; encoding = none; base = hexadecimal; byte_order = le; } perf_callchain[perf_callchain_size];
		integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = le; } common_type;
		integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = le; } common_flags;
		integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = le; } common_preempt_count;
		integer { size = 32; align = 1; signed = true; encoding = none; base = decimal; byte_order = le; } common_pid;
		integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = le; } common_migrate_disable;
		integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = le; } common_padding;
		string { encoding = UTF8; } prev_comm;
		integer { size = 32; align = 1; signed = true; encoding = none; base = decimal; byte_order = le; } prev_pid;
		integer { size = 32; align = 1; signed = true; encoding = none; base = decimal; byte_order = le; } prev_prio;
		integer { size = 64; align = 1; signed = true; encoding = none; base = decimal; byte_order = le; } prev_state;
		string { encoding = UTF8; } next_comm;
		integer { size = 32; align = 1; signed = true; encoding = none; base = decimal; byte_order = le; } next_pid;
		integer { size = 32; align = 1; signed = true; encoding = none; base = decimal; byte_order = le; } next_prio;
	} align(8);
};

问题的进一步解释

注意上图的右角的可视化部分,即两种ctf文件,因为不同的meta都能绘制出图形。
所以,本文的标题的主语是TraceCompass,
而不是Perf或LTTng。
因为这些图形,是TraceCompass根据几个内嵌的事件,而实现的。
“sched:sched_switch”;
“sched:sched_waking”;
“sched:sched_process_exit”;
“sched:sched_process_fork”;
这些事件能被抓到,是因为kernel,提供了这些probe.
lttng的meta中这些内定的事件,为如下名字:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值