OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【Perf调测】

基本概念

Perf为性能分析工具,依赖PMU(Performance Monitoring Unit)对采样事件进行计数和上下文采集,统计出热点分布(hot spot)和热路径(hot path)。

运行机制

基于事件采样原理,以性能事件为基础,当事件发生时,相应的事件计数器溢出发生中断,在中断处理函数中记录事件信息,包括当前的pc、当前运行的任务ID以及调用栈等信息。

Perf提供2种工作模式,计数模式和采样模式。

计数模式仅统计事件发生的次数和耗时,采样模式会收集上下文数据到环形buffer中,需要IDE进行数据解析生成热点函数与热点路径。

接口说明

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

表1 Perf模块接口说明

功能分类 接口描述
开启/停止Perf采样 LOS_PerfInit : 初始化Perf
LOS_PerfStart:开启采样
LOS_PerfStop:停止采样
配置Perf采样事件 LOS_PerfConfig:配置采样事件的类型、周期等
读取采样数据 LOS_PerfDataRead:读取采样数据到指定地址
注册采样数据缓冲区的钩子函数 LOS_PerfNotifyHookReg:注册缓冲区水线到达的处理钩子
LOS_PerfFlushHookReg:注册缓冲区刷cache的钩子
  1. Perf采样事件的结构体为PerfConfigAttr,详细字段含义及取值详见  kernel\include\los_perf.h 。

  2. 采样数据缓冲区为环形buffer,buffer中读过的区域可以覆盖写,未被读过的区域不能被覆盖写。

  3. 缓冲区有限,用户可通过注册水线到达的钩子进行buffer溢出提醒或buffer读操作。默认水线值为buffer总大小的1/2。 示例如下:

    VOID Example_PerfNotifyHook(VOID)
    {
        CHAR buf[LOSCFG_PERF_BUFFER_SIZE] = {0};
        UINT32 len;
        PRINT_DEBUG("perf buffer reach the waterline!\n");
        len = LOS_PerfDataRead(buf, LOSCFG_PERF_BUFFER_SIZE);
        OsPrintBuff(buf, len); /* print data */
    }
    LOS_PerfNotifyHookReg(Example_PerfNotifyHook);
    c
  1. 若perf采样的buffer涉及到CPU跨cache,则用户可通过注册刷cache的钩子,进行cache同步。 示例如下:
    VOID Example_PerfFlushHook(VOID *addr, UINT32 size)
    {
        OsCacheFlush(addr, size); /* platform interface */
    }
    LOS_PerfNotifyHookReg(Example_PerfFlushHook);
    c

刷cache接口视具体的平台自行配置。

开发指导

内核态开发流程

开启Perf调测的典型流程如下:

  1. 配置Perf模块相关宏。 配置Perf控制宏LOSCFG_KERNEL_PERF,默认关,在kernel/liteos_a目录下执行 make update_config命令配置"Kernel->Enable Perf Feature"中打开:
配置项 menuconfig选项
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值