专栏底层软件J6X VPS TRACE 工具介绍

J6X VPS TRACE 工具介绍

zsy2026-08-20
9
1

ftrace介绍

static ftrace

gcc -pg选项,将每个函数都将先调用__mcount,所有函数都共用同一个stub函数

dynamic ftrace

在函数前插入nop(什么都不做的指令)指令

在开启某一个函数trace时,将函数前面的nop指令改为跳转到stub函数的指令

ftrace_run_update_code()更改nop指令时,芯片层面实现同步机制(暂停其他核)避免由于并发导致问题,等待nop指令更新完成

初探ftrace

开启Ftrace前后变化

获取代码段

通过符号表得到代码段的虚拟地址 cat /proc/kallsyms

以vio_fps_calculate为例:

得到虚拟地址后,编写一个模块去读取对应的代码段

转指令码

此时得到的是二进制的代码段,使用python 将其整理为指令码

指令码转目标文件

反汇编目标文件

对比代码段前后变化

可以发现改变了两个指令

开启trace 后,将预埋的nop之指令改为跳转指令,跳转执行trace_evnet。

Linux源码

ftrace抓函数调用耗时

在同时打开Enable CONFIG_FUNCTION_TRACER和CONFIG_FUNCTION_GRAPH_TRACER。编译器会在每一个函数的入口插入一个ftrace_caller的函数

开启ftrace graph前后代码段的变化

trace-cmd start -l ion_import_dma_buf_with_shareid -p function_graph

nop指令替换为bl指令,跳转的地址 ffff800008970780 + 0xffffffffff6bddcc = ffff80000802e54c(ftrace_caller)

ftrace使用实战

Trace-cmd

修改缓冲区大小

查看可跟踪的事件和函数

跟踪特定PID

跟踪特定函数

trace_printk

对时序影响很小的打印函数,适合于定位加日志不复现的问题

VPS 定制化 trace 工具

增加了一些event

hobot-drivers/camsys/vpf/vio_trace.h

使用方法

运行测试用例前:
trace-cmd reset -b 10240
trace-cmd start -e vio_trace
出问题/需要获取数据后:
trace-cmd extract 此时会dump 数据下来
通过在驱动中创建trace event,分别记录通路上的每个IP,每帧开始处理(frame_start)和结束处理(frame_end)的时间戳信息和帧信息,可以实现帧率计算和延迟统计。

帧率统计

每个模块处理完成后会产生一个frame_done中断,此时会记录下一个event点,此时在时间轴上每一帧则对应一个个离散的点。按照时间进行resample(重采样),得到每秒的帧率数据序列,此种方法可以较为直观的反应帧率变化。

暂时无法在飞书文档外展示此内容

延迟统计

对于延迟会统计两个数据,第一个是硬件处理引入的耗时,这个数据一般与处理尺寸相关相对固定,这个耗时称为模块延迟(module latency);另外一个是从cim 接受到一行数据产生frame_start开始到当前模块frame_end的耗时,这个耗时包括sensor的出图完成+前级IP硬件处理耗时+软件耗时,这个延迟称为到某模块的通路延迟(flow latency)。

模块延迟

只需要将该模块trace的帧event中的fe时间戳 - fs时间戳即可得到硬件处理耗时,即为module latency

模块

模块延迟含义

备注

CIM

CIM FE - CIM FS

ISP

ISP FE - ISP FS

YNR

YNR FE - YNR FS

PYM

PYM FE - PYM FS

GDC

GDC FE - GDC FS

此处GDC FS 不代表中断,指得是配置寄存器triger硬件开始处理得时间

STITCH

STITCH FE - STITCH FS

此处stitch FS 不代表中断,指得是配置寄存器triger硬件开始处理得时间

通路延迟

在trace的event中会传递cim的fs时间戳(timestamp),因此只需将模块的fe event时间戳-timestamp,即可得到从第一行像素输入开始到当前的整个通路延迟。

如以到GDC的通路延迟为例,那么统计的通路延迟就包含如图所示的所有延迟。

image.png

模块

通路延迟含义

备注

CIM

CIM FE - CIM FS

等同于CIM的模块延迟

ISP

ISP FE - CIM FS

YNR

YNR FE - CIM FS

PYM

PYM FE - CIM FS

GDC

GDC FE- CIM FS

STITCH

STITCH FE - CIM FS

底层软件
社区征文前沿技术技术深度解析征程6
评论1
0/600
  • 7777777777777777
    Lv.1

    哈哈

    2026-08-22
    0
    0