如何使用 PEBS 测量 IPC?
PEBS 是 Intel CPU 提供的一种采样机制,用于采样性能监视器。
是否可以使用 PEBS 来测量进程的 IPC? PEBS 如何确定何时采样?
PEBS is a sampling mechanism that Intel CPUs provide for sampling performance monitors.
Is it possible to use PEBS to measure a process's IPC? How does PEBS determine when to sample?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
看看我对 Do Core i3 的回答/5/7 CPU 提供了一种测量 IPC 的机制? 来获取监视器名称来计算 IPC。
是的,可以使用 pfmon/pebs 来获取 IPC 的近似值:
有两次使用 pebs 运行 pfmon。它们将为您提供整个程序和每个函数的 instructions_retired 和 cpu_clk_unhalted 样本计数的比率。
PEBS 在每 2660000 个事件(对于上面运行的 pfmon)到位时进行采样。当 pfmon 启动时,它会要求 CPU 对特殊 msr 寄存器中的性能事件进行计数。 CPU会统计进程的事件,OS会在context_switch上保存不同进程的MSR。另外,当事件计数器的值 >= 2660000 时,pfmon 会要求 CPU 给出异常。当异常发生时,pfmon 将记录当前指令的 EIP(并将其转换为函数名称)并重置性能监视器。
PS 使用 Linux 内核中的
perf
工具来计算 IPC 非常简单:https://perf.wiki.kernel.org/index.php/Tutorial
每个进程:
系统范围(-a 开关):
Look at my answer to Do Core i3/5/7 CPUs provide a mechanism to measure IPC? to get monitor names to count an IPC.
Yes, it is possible to use pfmon/pebs to get approximate value of IPC:
There are two runs of pfmon with pebs usage. They will give you ratio of instructions_retired and cpu_clk_unhalted samples count for entire programm and for each function.
PEBS does sample when every 2660000th event (for pfmon runs above) is in place. When pfmon starts, it asks CPU to count performance events in special msr registers. CPU will count events for process, and OS will save MSR of different processes on context_switch. Also pfmon asks CPU to give an exception when the event counter will have value >= 2660000. When the exception occurs, pfmon will record EIP of current instruction (and translate it to function name) and reset performance monitor.
PS the counting of IPC is very easy with
perf
tool from linux kernel:https://perf.wiki.kernel.org/index.php/Tutorial
per-process:
system-wide (-a switch):