profiling - Sandy Bridge QPI 带宽性能事件

标签 profiling intel bandwidth perf numa

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

我发现了一个看似相关的事件 here (qpi_data_bandwidth_tx:传输的数据flits数量。源自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

监控数据迁移的事件是:

  1. RxL_FLITS_G0.DATA
  2. RxL_FLITS_G1.DRS_DATA
  3. RxL_FLITS_G2.NCB_DATA

Q1:这些事件是正确的吗?

问题 2:如果是,我应该监控所有这些事件并添加它们以获取总数据迁移还是仅获取第一个数据迁移?

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

Q4:有什么方法可以验证吗?

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

谢谢!

最佳答案

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

事件 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 可用于测量通过指定端口传输的flit 总数。因此,需要每个端口可用的四个计数中的两个来计算总数据迁移数。

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

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

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

关于profiling - Sandy Bridge QPI 带宽性能事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66267575/

相关文章:

sql-server - 如何测量在线 T-SQL 查询的成本?

node.js - 如何限制node.js带宽?

windows - 计算可用带宽

arrays - 分析帮助 : slow matrix-scalar assignment

c++ - 我如何分析超出每个功能级别的代码?

c++ - Visual Studio - 程序在分析时运行得更快

caching - Intel Xeon CPU 如何写入内存?

java - Android - 通过 DDMS 分析特定线程(UI 线程)

x86 - 为什么 "i586"指的是 Pentium 1,为什么 "i686"指的是 Pentium Pro?

assembly - 为什么 `0F 1A/r` 和 `0F 1B/r` 在 Intel MPX 之前就已经是 NOP 了?