如何解决Sandy Bridge QPI 带宽性能事件
我正在尝试找到合适的原始性能事件描述符来监控英特尔至强 E5-2600 (Sandy Bridge) 上的 QPI 流量(带宽)。
我发现了一个似乎是相对的事件 here(qpi_data_bandwidth_tx
:传输的数据迁移数。派生自 unc_q_txl_flits_g0.data
。单位:uncore_qpi
)但我可以'在我的系统中使用它。因此,这些事件可能涉及不同的微架构。
此外,我研究了“Intel ® Xeon ® Processor E5-2600 Product Family Uncore Performance Monitoring Guide”,我发现的最相关的参考如下:
To calculate "data" bandwidth,one should therefore do:
data flits * 8B / time (for L0)
or 4B instead of 8B for L0p
监控数据迁移的事件是:
- RxL_FLITS_G0.DATA
- RxL_FLITS_G1.DRS_DATA
- RxL_FLITS_G2.NCB_DATA
Q1:这些是正确的事件吗?
问题 2:如果是,我应该监视所有这些事件并添加它们以获得总数据迁移还是仅第一个?
Q3:我不太明白 8B
和 time
指的是什么。
Q4:有什么方法可以验证吗?
另外,如果有任何替代方案,请随时提出监控 QPI 流量带宽的替代方案。
谢谢!
解决方法
至强 E5-2600 处理器有两个 QPI 端口,每个端口可以在每个 QPI 域时钟周期发送最多一个微片并接收最多一个微片。并非所有的飞行都携带数据,但所有非空闲的飞行都会消耗带宽。在我看来,您对仅计算数据迁移感兴趣,这对于检测套接字级别(而不是套接字中的特定代理)的远程访问带宽瓶颈很有用。
事件 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
可用于测量通过指定端口传输的总次数。因此,需要使用每个端口中可用的四个计数中的两个来计算总数据迁移。
没有准确的方法将数据迁移转换为字节。一个 flit 最多可以包含 8 个有效字节。这取决于事务类型和链路方向的功率状态(功率状态是每个链路每个方向)。通过合理地假设大多数数据迁移是完整缓存行数据包的一部分并在 L0 功率状态下传输,因此每个迁移确实包含正好 8 个有效字节,可以得到一个很好的估计。或者,您可以仅根据数据迁移而不是字节来衡量端口利用率。
时间单位由您决定。最终,如果您想确定 QPI 带宽是否是瓶颈,则必须定期测量带宽并与理论最大带宽进行比较。例如,您可以使用总 QPI 时钟周期,这可以在空闲 QPI 端口 PMU 计数器之一上进行计数。 QPI 频率在 JKT 上是固定的。
为了验证,您可以编写一个简单的程序,在远程内存中分配一个大缓冲区并读取它。测量的字节数应与缓冲区的大小(以字节为单位)大致相同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。