选定区域
需要使用https://ui.perfetto.dev/打开trace信息的json文件。
获取选定区域的ts信息
start_ts = 6_758_429_328_000.000
end_ts = 6_758_429_344_000.000
使用代码获取kernel信息
trace_pro.py
importjsondeftruncate_trace(input_file,output_csv,start_ts,end_ts,delimiter:str=","):withopen(input_file,'r')asf:data=json.load(f)events=data['traceEvents']# 筛选时间范围内的完整事件filtered=[]foreinevents:ife.get('ph')!='X':continueargs=e.get('args',{})if'stream'notinargs:# 关键:只留含 stream 字段的事件continuets=e.get('ts',None)iftsisNoneorts<start_tsorts>end_ts:continuefiltered.append(e)# 按时间戳排序filtered.sort(key=lambdax:x['ts'])# 写入 CSVwithopen(output_csv,'w',newline='',encoding='utf-8-sig')asf:table_name=f"name{delimiter}dur{delimiter}start{delimiter}end{delimiter}"f"cat{delimiter}pid{delimiter}tid{delimiter}"#f.write(table_name + "\n")foreinfiltered:name=e.get('name','')start=e.get('ts',0)dur=e.get('dur',0)end=start+dur cat=e.get('cat','')pid=e.get('pid','')tid=e.get('tid','')row=f"{name}{delimiter}{dur}{delimiter}{start}{delimiter}{end}{delimiter}"f"{cat}{delimiter}{pid}{delimiter}{tid}{delimiter}"f.write(row+"\n")print(f"write rows{len(filtered)}")defprocess_new():start_ts=867_295_606_000.000end_ts=867_295_626_000.000input_file='in32768_bs256-1791724311.7331705-TP-0.trace.json'output_csv='kernels_1013_256_new.csv'truncate_trace(input_file,output_csv,start_ts,end_ts,delimiter=";")defprocess_old():start_ts=6_758_429_328_000.000end_ts=6_758_429_344_000.000input_file='in32768_bs128-1789726212.8056748-TP-0.trace.json'output_csv='kernels_1013_128_old.csv'truncate_trace(input_file,output_csv,start_ts,end_ts,delimiter=";")truncate_trace(input_file,output_csv,start_ts,end_ts,delimiter=";")if__name__=="__main__":process_old()使用excel打开处理后的csv文件
代码中使用分号(delimiter=“;”)作为分割符。
打开excel,数据,从文本/csv。