Arm Coresight 介绍
简介
Coresight 是 ARM 架构上的一款嵌入式系统监控和调试工具,能够为系统管理员和开发人员提供便捷的系统监控和调试功能。该平台可以实时追踪和分析处理器上的活动,以深入了解潜在的性能瓶颈和问题。本文将介绍Coresight的概念、优势及其安装、配置、故障排除和调试等方面的内容,并探讨其未来发展方向和重要性。
Coresight 特点
收集流水线中所有的 branch 指令。
全量采集:大多数 trace 组件都是基于一定的采样频率采集,Coresight 可以全量采集。
可以结合 PMU 事件。
Coresight 架构
Coresight 架构较为复杂,包括数据采集、数据传输、采集时间通知、多核协同、物理/虚拟地址映射等功能。具体描述可见附录A。
安装和使用
购买倚天裸金属服务器
安装 Coresight 驱动
modprobe coresight
modprobe coresight-catu
modprobe coresight-funnel
modprobe coresight-tmc
modprobe coresight-cti
modprobe coresight-replicator
modprobe coresight-etm4x
modprobe coresight-tpiu
利用 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,对应的采样频率为:
preset | 采样间隔 |
---|---|
1 | 每隔 2 * 5000 个 cycle,持续采集 5000 个 cycle |
2 | 每隔 4 * 5000 个 cycle,持续采集 5000 个 cycle |
3 | 每隔 8 * 5000 个 cycle,持续采集 5000 个 cycle |
4 | 每隔 16 * 5000 个 cycle,持续采集 5000 个 cycle |
5 | 每隔 64 * 5000 个 cycle,持续采集 5000 个 cycle |
6 | 每隔 128 * 5000 个 cycle,持续采集 5000 个 cycle |
7 | 每隔 512 * 5000 个 cycle,持续采集 5000 个 cycle |
8 | 每隔 1024 * 5000 个 cycle,持续采集 5000 个 cycle |
9 | 每隔 4096 * 5000 个 cycle,持续采集 5000 个 cycle |
地址过滤
即使是最简单的跟踪场景,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组件的一些示例实现。
硬件组成
Control components
Cross Trigger Interface (CTI).
Cross Trigger Matrix (CTM).
Trace sources
Embedded Trace Macrocells (ETMs).
AMBA Trace Macrocells.
Program Flow Trace Macrocells (PTMs).
System Trace Macrocells (STMs).
Trace links
Trace funnels.
Replicators.
ATB bridges.
Trace sinks
Trace Port Interface Units (TPIUs).
Embedded Trace Buffers (ETBs).
Trace Memory Controllers (TMCs).
硬件结构
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