使用以下命令记录了一些统计数据:
perf record -a -F 20 -o perf.data -e major-faults sleep 1800
得到了 perf.data
文件,大小约为1GB,其中包含355个样本和7592个事件计数:
# Total Lost Samples: 0
#
# Samples: 355 of event 'major-faults'
# Event count (approx.): 7592
为什么有些样本占用了很多空间?是否有工具可以查看perf.data文件中包含的内容?使用以下命令:
perf report -i perf.data -D
,我在perf.data文件中找到了这些事件:(截取了每个事件的十六进制转储)0 0 0x63a0 [0x30]: PERF_RECORD_COMM: gmain:1000/1010
0x63d0 [0x38]: event: 7
0 0 0x63d0 [0x38]: PERF_RECORD_FORK(1004:1004):(1:1)
0x6408 [0x30]: event: 3
0 0 0x6408 [0x30]: PERF_RECORD_COMM: cron:1004/1004
0x6438 [0x70]: event: 10
0 0 0x6438 [0x70]: PERF_RECORD_MMAP2 1004/1004: [0x5586d93d0000(0xb000) @ 0 fd:01 3285696 93896821003936]: r-xp /usr/sbin/cron
但我没有要求perf使用-e
选项记录这些事件。如何避免记录这些事件?
perf script
。它会转储文件中记录的每个事件。还支持-D
选项以添加十六进制转储:perf script -D
。您使用-a
选项要求perf进行系统范围的记录,并且为了能够解码任何程序中的事件,它必须在每个CPU上记录每个程序启动和执行段mmaping的所有1800秒。不知道如何避免使用选项在perf中记录这些事件(perf默认使用perf_event_open系统调用参数请求操作系统进行记录)。您应该检查像bpf(http://www.brendangregg.com/ebpf.html)或lttng这样的跟踪工具。 - osgx