开发者社区> 石祤> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PERF EVENT API篇

简介: 简介 perf_event 是内核对用户态提供软硬件性能数据的一个统一的接口,用户通过 perf_event 的句柄操作能获取到各式各样的性能数据,本文将介绍如何通过用户态实现对内核 perf_event 功能的使用 API 介绍 int perf_event_open(struct perf_e.
+关注继续查看

简介

perf_event 是内核对用户态提供软硬件性能数据的一个统一的接口,用户通过 perf_event 的句柄操作能获取到各式各样的性能数据,本文将介绍如何通过用户态实现对内核 perf_event 功能的使用

API 介绍

int perf_event_open(struct perf_event_attr *attr,
                    pid_t pid, int cpu, int group_fd,
                    unsigned long flags);

用于打开特定的 perf 事件

参数 attr 指定 事件类型以及参数 (attr.type attr.config)
参数 pid 指定 被监控的进程 或者 cgroup
参数 cpu 指定 cpu id
参数 group_fd 指定 perf 事件组
参数 flags man perf_event_open

man perf_event_open 去发现更多

对创建的 event 句柄控制

主要是通过 ioc 和 prctl

ioc(fd, PERF_EVENT_IOC_DISABLE, 0) # 暂停该事件的监控
ioc(fd, PERF_EVENT_IOC_RESET, 0) # 重置计数器

完整用例

# 创建 event 属性
cycle_perf_event_attr = pyperf.perf_event_attr()
cycle_perf_event_attr.type = pyperf.PERF_TYPE_HARDWARE # 通用 CPU 事件类型
cycle_perf_event_attr.config = pyperf.PERF_COUNT_HW_CPU_CYCLES # 记录 CPU cycle
cycle_perf_event_attr.inherit = 1

# 其他参数
cpu = -1 # 所有cpu
pid = 0 # 监控本进程

# 打开事件
fd = pyperf.perf_event_open(cycle_perf_event_attr, pid, cpu, -1, flag)

time.sleep(1)
ret = os.read(fd, 8) # 所有字段均为 64 bit
value = struct.unpack("L", ret)[0]

注意事项

  • counter 是每次累加,需要用户态自己算偏移量
  • 注意事件类型 core, uncore, offcore
  • 注意潜在可能产生的 multiplexing 情况

其他

PERF_EVENT 系列文章

  1. PERF EVENT API篇
  2. PERF EVENT 硬件篇
  3. PERF EVENT 内核篇
  4. PERF EVENT 硬件篇续

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Web API的CORS
Web API中进行跨域需要在请求头中加入允许跨域请求 Access-Control-Allow-Origin=*  上面代码代表允许所有跨域请求。当然也可以只允许某个站点进行跨域请求,只需将‘*’改为指定站定即可 Access-Control-Allow-Origin=“http://www.
781 0
Web APi之消息处理管道(五)
前言 MVC有一套请求处理的机制,当然Web API也有自己的一套消息处理管道,该消息处理管道贯穿始终都是通过HttpMessageHandler来完成。我们知道请求信息存在 RequestMessage 中,而响应信息则存在 ResponseMessage 中,当请求信息进入到管道中,此时HttpMessageHandler会对此进行相应的处理,当执行到控制器上的方法时此时就会进行响应,生成的响应信息HttpResponseMessage就会逆向通过HttpMessageHandler依次进行处理最终返回给客户端。
778 0
Web API 版本控制的几种方式
http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html 这篇文章写得很好,介绍了三种实现web api版本化的三种方式。
1170 0
并查集算法 - Algorithms, Part I, week 1 UNION-FIND
cousera 普林斯顿大学 算法公开课 第一周 并查集数据类型内容整理
1247 0
+关注
3
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载