Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何知道性能记录的最大事件周期_Linux_Linux Kernel_X86_Perf_Strace - Fatal编程技术网

Linux 如何知道性能记录的最大事件周期

Linux 如何知道性能记录的最大事件周期,linux,linux-kernel,x86,perf,strace,Linux,Linux Kernel,X86,Perf,Strace,有人知道如何获得Perf-event的最大事件周期值(或内核实际传递给PMU的值)吗 我使用perf来衡量我的程序,如下所示: perf record-d-e cpu/event=0xd0,umask=0x81/ppu,cpu/event=0xd0,umask=0x82/ppu-c5 cpu/event=0xd0,umask=0x81/ppu表示测量cpu中的所有负载,cpu/event=0xd0,umask=0x82/ppu表示所有存储 我试图理解参数是如何通过strace传入perf的,但什

有人知道如何获得Perf-event的最大事件周期值(或内核实际传递给PMU的值)吗

我使用perf来衡量我的程序,如下所示:
perf record-d-e cpu/event=0xd0,umask=0x81/ppu,cpu/event=0xd0,umask=0x82/ppu-c5

cpu/event=0xd0,umask=0x81/ppu表示测量cpu中的所有负载,cpu/event=0xd0,umask=0x82/ppu表示所有存储

我试图理解参数是如何通过
strace
传入perf的,但什么也找不到

PMU收到的值是否超出其能力,仍将尝试达到该值?如果是,在哪里可以找到相关代码,这些事件的最长事件周期是多少


谢谢大家。

perf record命令接受的周期值大大大于255。在内部,处理器维护一个计数器,用于记录所有内存加载和内存存储(或任何其他支持的事件)。一旦计数器溢出,处理器将记录您试图记录的内存加载/存储的所有信息(关于体系结构状态/寄存器的信息等)

此外,一旦计数器溢出,必须再次重置。通常计数器重置为小于0的值。由于它被设置为小于零的值并递增,计数器将在再次达到0时溢出

我刚才提到的计数器重置值是您要求的周期值。我的意思是,如果周期由
-c1
指定,这意味着计数器重置值将设置为-1,因此下一次内存加载/存储将计数器增加到0(导致计数器溢出),并且您将记录事件

因此,如果将时段设置为1,则每个内存加载/存储事件都会出现计数器溢出,并且您将记录所有事件(这只是概念性的,但硬件通常无法做到这一点)

这意味着,周期值可以与这些事件的硬件计数器大小一样大。通常在现代微体系结构中,如Broadwell/Haswell/Skylake,这些计数器的大小48位。所以这个周期可能会大到2^48-1。但是,不建议使用如此大的值

通常,在32位系统中,周期值的最大值应保持在2^32-1,并且在其他系统中通常也是标准值

资料来源:

  • 第18章

  • 请阅读中的主题使用性能记录采样

  • 如果你想的话,你也可以读答案


  • 什么是事件周期值?您好,Margaret,这意味着PMU将在多少次事件发生后收集一条样本记录。例如,-c 1000,意味着在1000次事件发生后将生成一条样本记录AH,Intel在其手册中称之为计数器掩码(CMASK)。这是一个8位字段,所以我猜255是最大值?但看看性能手册,也许是其他原因,我理解你所说的,但我的问题是,如果PMU真的像你说的那样,使用
    -c1
    为什么我得到的结果数要少得多?我读过英特尔SDM和性能记录手册,但无法解释这种现象Hi@KanielVenson,根本不可能记录所有内存访问事件。不建议使用较小的-c值,因为它会影响CPU性能。CPU将节流,因为每次缓冲区满时都会发生中断。这完全超出了硬件的控制范围,但我使用的是PEBS,它不会触发中断,直到记录被PEBS缓冲区填满。如果如你所说,CPU因太多中断而被限制,结果中应该有很多样本记录,对吗?我认为它们没有直接关系,但是,如果CPU限制发生,这个参数perf_event_max_sample_rate会降低。如果这减少,采集的样本数量将减少。因此,即使您试图收集所有事件,也无法收集它们。尝试更改此参数,看看是否可以更改记录的事件数。