|
|
51CTO旗下网站
|
|
移动端

1.9.3 性能计数器的基础架构

《ARM嵌入式系统编程与优化》第1章Linux/ARM嵌入式平台,本章介绍如何使用GCC编译器、汇编器和连接器来编写和执行独立的汇编语言程序,以及如何将一个C语言代码和汇编语言代码合起来,以验证汇编代码子程序的正确性。本节为大家介绍性能计数器的基础架构。

作者:梁元宇 译来源:机械工业出版社|2017-09-26 19:19

【大咖·来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》

1.9.3 性能计数器的基础架构

想要使用perf_event,应开发一组用以检测程序执行各方面性能的可复用函数。其中包括用于初始化、结果打印、重置性能计数器(命名为“tick”)和读取性能计数器状态(称为“tock”)的函数。

首先添加计数器必要的5个头文件和常数定义:

接下来,编写一个显式C包装器,它使用perf_event调用系统调用去打开一个特定的性能计数器:

pid参数指定进行检测的进程的Linux进程ID。这里有两个特殊值:如果pid为0,则检测当前进程;如果pid为- 1,则检测所有进程。这段代码将把pid参数设置为0,以检测当前进程。

参数cpu允许用户限制在单一中央处理器上进行检测。如果cpu设为- 1,事件是检测所有中央处理器。

参数group_fd允许创建事件组,允许通过单次调用perf_event_open来调用多个事件。本章的代码使用单次调用perf_event_open来计算每一个独立事件,所以将这个参数设为- 1来检测单一事件。

还需要一个函数,该函数将根据启用时间和运行时间之比来缩放perf_event提供的结果。读取一个由perf_event启用的计数器,以返回一个含有3个64位整型的数组;索引为0的值表示计数器的值,索引为1的值表示启用时间,索引为2的值表示运行时间。

在perf_event中,独立性能计数器可以通过文件描述符访问,所以需要在开始处声明文件描述符数组:

声明一个数组,以存储从每个计数器读取的信息:

接下来的函数将打开4个计数器。这个函数为ARM11、ARM Cortex A9和ARM Cortex A15处理器设计。打开缓存失效和缓存***计数器的方式在ARM11中略有不同,所以采用ARM1编译(使用–DARM11选项编译)时,代码假定ARM11的变量已经设置了。

添加“tick”和“tock”函数,这两个函数可在检测代码之前或之后调用:


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

2006软考上半年试题分析与解答

本书是针对全国计算机技术与软件专业技术资格(水平)考试而编写的,书中详尽分析与解答了2006年上半年的程序员级、软件设计师级、软件评测...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客