简介
Coresight 是 ARM 架构上的一款嵌入式系统监控和调试工具,能够为系统管理员和开发人员提供便捷的系统监控和调试功能。该平台可以实时追踪和分析处理器上的活动,以深入了解潜在的性能瓶颈和问题。本文将介绍Coresight的概念、优势及其安装、配置、故障排除和调试等方面的内容,并探讨其未来发展方向和重要性。
Coresight 特点
- 收集流水线中所有的 branch 指令。
- 全量采集:大多数 trace 组件都是基于一定的采样频率采集,Coresight 可以全量采集。
- 可以结合 PMU 事件。
Coresight 架构
Coresight 架构较为复杂,包括数据采集、数据传输、采集时间通知、多核协同、物理/虚拟地址映射等功能。具体描述可见附录A。
安装和使用
购买倚天裸金属服务器
安装 Coresight 驱动
利用 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,对应的采样频率为:
地址过滤
即使是最简单的跟踪场景,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组件的一些示例实现。
硬件组成
硬件结构
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)加入技术交流群,请备注研究方向。