Trace

基本概念

Trace是内核提供的一个跟踪模块关键流程的功能框架,各个模块根据机制需要,可以在关键位置通过Trace进行相关信息记录,再通过文件或者其他方式导出,对数据进行分析。

Trace的记录要求:

  1. 需要尽快的完成信息记录,对系统时序的影响降低到最小;
  2. 需要尽可能的用小的空间存储大的数据量,减少内存消耗。

运行机制

在内核启动初期完成Trace功能的初始化,并且在支持Trace功能的模块进行初始化时,完成模块相应的Trace类型及回调函数的注册,触发Trace记录的trace point的具体位置可由各模块自行决定。

当系统触发到一个trace point时,Trace模块会对输入信息进行封装,添加Trace帧头信息,包含Trace类型、运行的cpuid、运行的任务id、运行的相对时间戳以及运行的进程id;再将trace frame记录到预先申请好的循环buffer中。

如果循环buffer记录的frame过多则可能出现翻转,会覆盖之前的记录,故保持记录的信息始终是最新的信息。Trace循环buffer的数据可以通过文件dump等形式导出进行详细分析,导出信息已按照时间戳信息完成排序。

使用指导

  1. 配置Trace控制宏LOSCFG_KERNEL_TRACE,默认关,通过在menuconfig内核配置"Kernel->Enable Trace Feature"中打开。
  2. 内核启动完成Trace初始化,对应接口OsTraceInit。
  3. 统一在los_trace_frame.h定义模块内traceframe结构体,并在los_trace_frame.c中实现模块Trace回调函数的实现。
  4. 需要跟踪的模块在初始化或者更早阶段完成Trace注册,对应接口LOS_TraceReg。
  5. 在需要开始跟踪的位置打开Trace开关进行记录,结束的位置关闭Trace开关停止记录。
  6. 通过LOS_Trace2File接口导出到文件。
  7. 根据帧头及帧体数据结构,对数据进行二次分析。

接口说明

OpenHarmony LiteOS-A内核的Trace框架提供下面几种功能,接口详细信息可以查看API参考。

表 1 Trace接口说明

功能分类

接口名称

描述

打桩记录

LOS_Trace

Trace信息记录打桩

注册解注册

LOS_TraceReg

Trace类型注册

LOS_TraceUnreg

Trace类型解注册

开关

LOS_TraceTypeSwitch

Trace分类开关

LOS_TraceSwitch

Trace总开关

数据导出

LOS_TraceBufDataGet

Trace数据获取到堆缓存(缓存空间内部申请,使用完需显式释放)

LOS_Trace2File

Trace数据存储到文件系统(依赖文件系统)

说明:

  • frame buffer是个循环buffer,如果记录过长时间会覆盖旧的信息,该buffer的大小可以在los_config.h中LOS_TRACE_BUFFER_SIZE宏配置,默认配置512KiB。
  • 尽管Trace已经尽快的完成了组装及记录,但是仍旧会对系统整体性能产生不可避免的影响。
  • Trace支持多个模块的Trace同时记录,根据需要开关各个模块的Trace,有助于降低数据分析量。
  • 当前内核的task、memory、liteipc模块支持Trace记录功能。