啥都吃的豆芽 · 6月13日 · 黑龙江

Arm Coresight 介绍

简介

Coresight 是 ARM 架构上的一款嵌入式系统监控和调试工具,能够为系统管理员和开发人员提供便捷的系统监控和调试功能。该平台可以实时追踪和分析处理器上的活动,以深入了解潜在的性能瓶颈和问题。本文将介绍Coresight的概念、优势及其安装、配置、故障排除和调试等方面的内容,并探讨其未来发展方向和重要性。

Coresight 特点

  1. 收集流水线中所有的 branch 指令。
  2. 全量采集:大多数 trace 组件都是基于一定的采样频率采集,Coresight 可以全量采集。
  3. 可以结合 PMU 事件。

Coresight 架构

Coresight 架构较为复杂,包括数据采集、数据传输、采集时间通知、多核协同、物理/虚拟地址映射等功能。具体描述可见附录A。

安装和使用

购买倚天裸金属服务器

安装 Coresight 驱动

image.png
image.png

利用 perf-tools 直接使用 coresight 收集数据

采集命令:perf record -C 0 -m ,1G -e cs_etm//u ls

解析命令:perf script

coresight 设置采样频率

perf record -C 0 -m ,1G -e cs_etm/autofdo,preset=8/u ./app

preset 可以设置为 1-9,对应的采样频率为:

image.png

地址过滤

即使是最简单的跟踪场景,CoreSight tracers生成的跟踪数量也是惊人的。可以通过地址过滤来节省跟踪缓冲区空间并避免不相关的跟踪数据。

在CoreSight上实现了两种类型的地址过滤器-地址范围和开始/停止过滤器:

Start/Stop filters: 使用开始/停止过滤器,当指令指针等于开始地址时,生成跟踪。顺便说一句,当指示指针等于停止地址时,停止生成跟踪。在事件之间发生的任何事情都被跟踪:

perf record -e cs_etm/@tmc_etr0/k --filter 'start 0xffffff800856bc50,stop 0xffffff800856bcb0' --per-thread  uname

perf record -vvv -e cs_etm/@tmc_etr0/u --filter 'start 0x72c@/opt/lib/libcstest.so.1.0,    \
                                                     stop 0x40082c@/home/linaro/main'          \
                                                 --per-thread ./main

三、故障排除和调试

在使用Coresight时,可能会遇到一些常见问题,如数据丢失、不准确的分析结果等。为了解决这些问题,可以采取以下措施:检查Coresight设备和代码是否正确连接和编写,检查数据采集是否正常,检查分析结果是否准确,并查阅Coresight文档或联系技术支持。在调试时,还可以采用以下技巧和技巧:正确使用Coresight、分析Coresight数据以查找问题,并使用调试工具进行跟踪和调试。

四、未来方向

Coresight将继续发展,未来将支持更多的处理器和硬件平台,并增强分析功能,如深度学习和数据可视化。同时,将与其他开源和商业工具集成,以满足不断增长的需求。

五、结论

总的来说,Coresight是一款功能强大的嵌入式系统监控和分析工具,能够帮助开发人员和系统管理员更轻松地解决问题。通过正确的安装、配置、故障排除和调试,可以更好地利用Coresight的功能。未来,Coresight将继续发展,并与其他工具和技术集成,以应对日益增长的需求。

附录A

CoreSight架构指定了一组组件,用于实现支持调试和跟踪信息收集的特定SoC子系统。本节展示了基于CoreSight架构的CoreSight组件的一些示例实现。

硬件组成

image.png

硬件结构

Coresight 组件的组合方式可以参考 Linux Kernel 文档

 *****************************************************************
**************************** AMBA AXI  ****************************===||
 *****************************************************************    ||
       ^                    ^                            |            ||
       |                    |                            *            **
    0000000    :::::     0000000    :::::    :::::    @@@@@@@    ||||||||||||
    0 CPU 0<-->: C :     0 CPU 0<-->: C :    : C :    @ STM @    || System ||
 |->0000000    : T :  |->0000000    : T :    : T :<--->@@@@@     || Memory ||
 |  #######<-->: I :  |  #######<-->: I :    : I :      @@@<-|   ||||||||||||
 |  # ETM #    :::::  |  # PTM #    :::::    :::::       @   |
 |   #####      ^ ^   |   #####      ^ !      ^ !        .   |   |||||||||
 | |->###       | !   | |->###       | !      | !        .   |   || DAP ||
 | |   #        | !   | |   #        | !      | !        .   |   |||||||||
 | |   .        | !   | |   .        | !      | !        .   |      |  |
 | |   .        | !   | |   .        | !      | !        .   |      |  *
 | |   .        | !   | |   .        | !      | !        .   |      | SWD/
 | |   .        | !   | |   .        | !      | !        .   |      | JTAG
 *****************************************************************<-|
*************************** AMBA Debug APB ************************
 *****************************************************************
  |    .          !         .          !        !        .    |
  |    .          *         .          *        *        .    |
 *****************************************************************
******************** Cross Trigger Matrix (CTM) *******************
 *****************************************************************
  |    .     ^              .                            .    |
  |    *     !              *                            *    |
 *****************************************************************
****************** AMBA Advanced Trace Bus (ATB) ******************
 *****************************************************************
  |          !                        ===============         |
  |          *                         ===== F =====<---------|
  |   :::::::::                         ==== U ====
  |-->:: CTI ::<!!                       === N ===
  |   :::::::::  !                        == N ==
  |    ^         *                        == E ==
  |    !  &&&&&&&&&       IIIIIII         == L ==
  |------>&& ETB &&<......II     I        =======
  |    !  &&&&&&&&&       II     I           .
  |    !                    I     I          .
  |    !                    I REP I<..........
  |    !                    I     I
  |    !!>&&&&&&&&&       II     I           *Source: ARM ltd.
  |------>& TPIU  &<......II    I            DAP = Debug Access Port
          &&&&&&&&&       IIIIIII            ETM = Embedded Trace Macrocell
              ;                              PTM = Program Trace Macrocell
              ;                              CTI = Cross Trigger Interface
              *                              ETB = Embedded Trace Buffer
         To trace port                       TPIU= Trace Port Interface Unit
                                             SWD = Serial Wire Debug
来源:阿里云倚天社区

推荐阅读

欢迎大家点赞留言,更多Arm技术文章动态请关注极术社区Arm服务器专栏欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
17382
内容数
80
分享arm服务器软件应用经验、测试方法、优化思路、工具使用等。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息