我有一个LTTNg跟踪,我正在使用babeltrace解析它。因此,我想知道是否可以在不迭代它们的情况下计数跟踪(或流)中的所有事件。我可以使用publilc中的哪些函数来完成这个任务?
发布于 2017-03-10 22:13:39
CTF的本质使得无法在恒定时间内计算给定数据包的事件记录。包的上下文可以包括一个事件记录计数字段,但是它没有被指定,所以一般的工具不会使用它。
因此,计算事件的唯一方法是迭代事件记录,不幸的是。最简单的方法是计算text工具的babeltrace(1)格式打印的行数:
babeltrace /path/to/ctf/trace/directory | wc --lines只要每个打印的事件记录都有一行,就可以这样做,除非事件记录包含具有换行符的字符串字段(当前不在文本输出中转义)。
您也可以考虑丢弃事件记录。它们不会被babeltrace(1)打印到标准输出,但是当检测到标准错误时,工具会打印一条包含计数的消息。
使用当前的babeltrace(1)工具无法只打印属于给定数据流的数据包的事件记录。如果您需要这样做,我建议您删除所有数据流文件,但需要事件记录计数的数据流文件除外,然后再次运行上面的命令。
还可以考虑Babeltrace绑定,例如(未测试):
import babeltrace
def count_ctf_event_records(path):
trace_collection = babeltrace.TraceCollection()
trace_collection.add_trace(path, 'ctf')
return sum(1 for event in trace_collection.events)
if __name__ == '__main__':
import sys
print(count_ctf_event_records(sys.argv[1]))保存为count.py,您可以尝试如下:
python3 count.py /path/to/ctf/trace/directory使用Python绑定计算特定数据流的事件记录是留给读者的练习。
说了这些之后,我不知道Python方法是否比babeltrace(1)绑定方法更快。
https://stackoverflow.com/questions/42721331
复制相似问题