我正在寻找合适的原始perf事件描述符来监视IntelXeonE5-2600 (Sandy )上的QPI流量(带宽)。
我发现了一个似乎相对这里的事件(qpi_data_bandwidth_tx:发送的数据数量)。来源于unc_q_txl_flits_g0.data。单位:uncore_qpi),但我不能在我的系统中使用它。因此,这些事件可能是指一种不同的微观架构。
此外,我还研究了"https://www.intel.com/content/dam/www/public/us/en/documents/design-guides/xeon-e5-2600-uncore-guide.pdf“,我发现的最相关的参考如下:
To calculate "data" bandwidth, one should therefore do:
data flits * 8B / time (for L0)
or 4B instead of 8B for L0p监视数据闪烁的事件是:
Q1:这些是正确的事件吗?
Q2:如果是的话,我应该监视所有这些事件并添加它们以获得数据的总数,还是仅仅是第一个?
Q3:我不太明白8B和time指的是什么。
Q4:有什么方法来验证吗?
此外,请随时建议在监测QPI流量带宽的备选方案,以防有任何。
谢谢!
发布于 2021-02-21 22:04:11
一个XeonE5-2600处理器有两个QPI端口,每个端口最多可以发送一个flit,并且每个QPI域时钟周期最多接收一个flit。并不是所有的flits都携带数据,但是所有非空闲的flits都消耗带宽。在我看来,您感兴趣的是只计算数据flits,这对于在套接字级别(而不是套接字中的特定代理)检测远程访问带宽瓶颈非常有用。
事件RxL_FLITS_G0.DATA可用于计算接收到的数据闪烁数。这等于RxL_FLITS_G1.DRS_DATA和RxL_FLITS_G2.NCB_DATA之和。你只需要衡量后两个事件,如果你关心的崩溃。注意,每个QPI端口只有4个事件计数器。事件TxL_FLITS_G0.DATA可用于计算传输到其他套接字的数据闪烁数。
事件RxL_FLITS_G0.DATA和TxL_FLITS_G0.DATA可用于测量通过指定端口传输的flits总数。因此,在每个端口中可用的四个计数中,有两个可以计数总数据量。
没有准确的方法将数据flits转换为字节。flit可能包含最多8个有效字节。这取决于链路方向的事务类型和功率状态(每个方向的功率状态为每个链路)。通过合理地假设大多数数据flit是完整缓存线数据包的一部分并在L0功率状态下传输,可以得到一个很好的估计,因此每个flit确实包含8个有效字节。或者,您只需根据数据flits而不是字节来度量端口利用率。
时间的单位由你来决定。最终,如果要确定QPI带宽是否是瓶颈,则必须定期测量带宽,并与理论上的最大带宽进行比较。例如,您可以使用总QPI时钟周期,这可以计算在一个免费的QPI端口PMU计数器上。QPI频率固定在JKT上。
为了进行验证,您可以编写一个简单的程序,在远程内存中分配一个大缓冲区并读取它。所测量的字节数应该与缓冲区的大小(以字节为单位)大致相同。
https://stackoverflow.com/questions/66267575
复制相似问题