Sandy Bridge QPI带宽性能



我正试图找到合适的原始性能事件描述符来监控英特尔至强E5-2600 (Sandy Bridge)上的QPI流量(带宽)。

我在这里发现了一个事件,似乎是相对的(qpi_data_bandwidth_tx:数据传输的数量。来源于unc_q_txl_flits_g0.data。单位:uncore_qpi),但我不能在我的系统中使用它。所以这些事件可能指的是不同的微架构。

此外,我已经查看了英特尔®至强®处理器E5-2600产品系列非核心性能监控指南;我找到的最相关的参考是:

To calculate "data" bandwidth, one should therefore do: 
data flits * 8B / time (for L0) 
or 4B instead of 8B for L0p

监视数据流动的事件有:

  1. RxL_FLITS_G0。数据
  2. RxL_FLITS_G1。DRS_DATA
  3. RxL_FLITS_G2。NCB_DATA

问题1:这些是正确的事件吗?

Q2:如果是,我应该监控所有这些事件并将它们相加,以获得总的数据流量还是仅仅是第一个?

Q3:我不太明白8Btime指的是什么。

Q4:有验证的方法吗?

此外,如果有的话,请随时建议监控QPI流量带宽的替代方案。

谢谢!

至强E5-2600处理器有两个QPI端口,每个端口每个QPI域时钟周期可以发送和接收最多一个flit。不是所有的flits都携带数据,但是所有非空闲的flits都消耗带宽。在我看来,您似乎只对数据流计数感兴趣,这对于在套接字级别(而不是套接字内的特定代理)检测远程访问带宽瓶颈非常有用。

事件RxL_FLITS_G0.DATA可用于统计接收到的数据流的数量。这等于RxL_FLITS_G1.DRS_DATARxL_FLITS_G2.NCB_DATA的和。如果你关心分解,你只需要测量后两个事件。注意,每个QPI端口只有4个事件计数器。事件TxL_FLITS_G0.DATA可以用来计算传输到其他套接字的数据流的数量。

事件RxL_FLITS_G0.DATATxL_FLITS_G0.DATA可以用来测量通过指定端口传输的总频带数。因此,在每个端口的四个可用计数中,需要两个计数来计算总数据传输。

没有准确的方法将数据字符转换为字节。一个文件最多可以包含8个有效字节。这取决于事务类型和链路方向的功率状态(功率状态是每个链路的每个方向)。通过合理地假设大多数数据流是全缓存线数据包的一部分,并且在L0电源状态下传输,可以获得一个很好的估计,因此每个数据流确实包含8个有效字节。或者,您可以根据数据传输量而不是字节来衡量端口利用率。

时间单位由你决定。最后,如果要确定QPI带宽是否为瓶颈,则必须定期测量带宽,并与理论最大带宽进行比较。例如,您可以使用总QPI时钟周期,它可以在一个空闲的QPI端口PMU计数器上进行计数。QPI频率固定在JKT。

对于验证,您可以编写一个简单的程序,在远程内存中分配一个大的缓冲区并读取它。测量的字节数应该与缓冲区的字节大小大致相同。

最新更新