摘录


perf的基本原理
Perf 是内置于 Linux 内核源码树中的性能剖析(profiling)工具。它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析,可用于性能瓶颈的查找与热点代码的定位。

以监测“cycles”事件为例,perf的工作过程如下: 首先,perf 会通过系统调用sys_perf_event_open在内核中注册一个监测“cycles”事件的性能计数器。内核根据perf提供的信息在PMU(Performance Monitoring Unit)上初始化一个硬件性能计数器(PMC:Performance Monitoring Counter)。PMC随着CPU周期的增加而自动累加。在PMC溢出时,PMU触发一个PMI(Performance Monitoring Interrupt)中断。内核在PMI中断的处理函数中保存PMC的计数值,触发中断时的指令地址(Register IP:Instruction Pointer),当前时间戳以及当前进程的PID,TID,comm等信息。我们把这些信息统称为一个采样(sample)。内核会将收集到的sample放入用于跟用户空间通信的Ring Buffer。用户空间里的perf分析程序采用mmap机制从Ring Buffer中读入采样,并对其解析。perf根据pid,comm等信息可以找到对应的进程。根据IP与ELF文件中的符号表可以查到触发PMI中断的指令所在的函数。

根据上述的perf采样原理可以得知,perf假设两次采样之间,即两次相邻的PMI中断之间系统执行的是同一个进程的同一个函数。这种假设会带来一定的误差,当读者感觉perf给出的结果不准时,不妨提高采样频率,perf会给出更加精确的结果。

点评

NULL

原文

点击这里查看原文

其它

本帖内容由21QA云收藏工具自动生成,欢迎使用。

系统消息 若觉得内容不错,请点击左上角的"赞"图标,以优化网站的内容呈现。 另外,请及时验证注册邮箱,否则收不到21QA发出的红包。 官方Q群:250203055

asked 12 Jun, 09:41

%E8%B7%AF%E4%BA%BA%E7%94%B2's gravatar image

路人甲
131547588659

Be the first one to answer this question!
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link: [text](http://url.com/ "title")
  • image: ![alt](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×828
×11

question asked: 12 Jun, 09:41

question was seen: 28 times

last updated: 12 Jun, 09:41

powered by O*S*Q*A

粤ICP备14040061号-1