gpt4 book ai didi

x86 - 如何使用 PEBS 测量 IPC?

转载 作者:行者123 更新时间:2023-12-04 21:56:02 24 4
gpt4 key购买 nike

PEBS 是 Intel CPU 为采样性能监视器提供的采样机制。

是否可以使用 PEBS 来测量过程的 IPC? PEBS 如何确定采样时间?

最佳答案

看我对Do Core i3/5/7 CPUs provide a mechanism to measure IPC?的回答获取监视器名称以计算 IPC。

是的,可以使用 pfmon/pebs 来获得 IPC 的近似值:

pfmon --smpl-module=pebs -ecpu_clk_unhalted --inv=1 --counter-mask=1 --long-smpl-periods=2660000 -uk -- foo 

pfmon --smpl-module=pebs -einstructions_retired --inv=1 --counter-mask=1 --long-smpl-periods=2660000 -uk -- foo

有两次使用 pebs 的 pfmon 运行。他们将为您提供整个程序和每个函数的指令_retired 和 cpu_clk_unhalted 样本计数的比率。

当每 2660000 个事件(对于 pfmon 在上面运行)到位时,PEBS 会进行采样。当 pfmon 启动时,它会要求 CPU 对特殊 msr 寄存器中的性能事件进行计数。 CPU 会统计进程的事件,OS 会在 context_switch 上保存不同进程的 MSR。当事件计数器的值大于等于 2660000 时,pfmon 也会要求 CPU 给出异常。当异常发生时,pfmon 将记录当前指令的 EIP(并将其转换为函数名称)并重置性能监视器。

PS 使用 perf 计算 IPC 非常容易来自Linux内核的工具:
https://perf.wiki.kernel.org/index.php/Tutorial

每个进程:
perf stat -B -ecycles:u,instructions:u  dd if=/dev/zero of=/dev/null count=2000000

2000000+0 records in
2000000+0 records out
1024000000 bytes (1.0 GB) copied, 1.91559 s, 535 MB/s

Performance counter stats for 'dd if=/dev/zero of=/dev/null count=2000000':

1,993,541,603 cycles
764,086,803 instructions # 0.383 IPC

1.916930613 seconds time elapsed

系统范围(-a 开关):
perf stat -B -ecycles:u,instructions:u -a sleep 5

Performance counter stats for 'sleep 5':

766,271,289 cycles
596,796,091 instructions # 0.779 IPC

5.001191353 seconds time elapsed

关于x86 - 如何使用 PEBS 测量 IPC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4814637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com