gpt4 book ai didi

memory - 计算写入挂起队列的分配数量 - NV 内存出现意外的低结果

转载 作者:行者123 更新时间:2023-12-04 04:54:37 25 4
gpt4 key购买 nike

我正在尝试使用一些非核心硬件计数器,例如:skx_unc_imc0-5::UNC_M_WPQ_INSERTS .它应该计算写入挂起队列的分配数量。该机有2颗Intel Xeon Gold 5218 CPU,采用cascade Lake架构,每个CPU有2个内存 Controller 。 linux 版本是 5.4.0-3-amd64。我有以下简单的循环,我正在阅读这个计数器。数组元素的大小为 64 字节,等于缓存行。

for(int i=0; i < 1000000; i++){
array[i].value=2;
}

对于这个循环,当我将内存映射到 DRAM NUMA 节点时,计数器给出大约 150,000 的结果,这可能是有道理的:在这个 NUMA 节点前面总共有 6 个 channel 用于 2 个内存 Controller ,它们使用 DRAM DIMM 交错模式。然后对于每个 channel ,我相信有一个单独的 WPQ,因此 skx_unc_imc0 从整个商店中获得 1/6。有 skx_unc_imc0-5我得到的计数器 papi_native_avail ,据说每个用于不同的 channel 。

意外的结果是,当我没有映射到 DRAM NUMA 节点,而是将程序映射到非 volatile 内存时,它作为一个单独的 NUMA 节点出现在同一个套接字上。每个插槽有 6 个 NVM DIMM,可创建一个交错区域。因此,当写入 NVM 时,应该使用类似的 6 个不同的 channel ,并且在每个 channel 之前,有相同的一个 WPQ,应该再次获得 1/6 的写入插入。

但是UNC_M_WPQ_INSERTS结果在 NV 内存上只返回大约 1000。 我不明白为什么;我预计它会在 WPQ 中提供类似的大约 150,000 次写入。

我在解释/理解错误吗?或者每个 channel 是否有两个不同的 WPQ,具体取决于写入的是 DRAM 还是 NVM?或者还有什么解释?

最佳答案

原来UNC_M_WPQ_INSERTS计算写入挂起队列的分配数量,仅用于写入 DRAM。
Intel 为 Persistent Memory 添加了相应的硬件计数器:UNC_M_PMM_WPQ_INSERTS它计算在 PMM 写入挂起队列中为英特尔® 傲腾™ DC 持久内存分配的写入请求。

然而,在 papi_native_avail 中没有出现这样的本地事件。这意味着它不能被 PAPI 监控。在linux 5.4版本中,一些PMM计数器可以直接在perf list uncore中找到。如 unc_m_pmm_bandwidth.write - 英特尔傲腾 DC 持久内存带宽写入(MB/秒),源自 unc_m_pmm_wpq_inserts ,单位:uncore_imc。这意味着即使 UNC_M_PMM_WPQ_INSERTS未直接列于perf list作为一个事件,它应该存在于机器上。

As described here此计数器的 EventCode 为:0xE7,因此它可以与 perf 一起用作原始硬件事件描述符,如下所示:perf stat -e uncore_imc/event=0xe7/ .但是,它似乎不支持事件修饰符来指定使用 perf 的用户空间计数。然后将线程固定在与 NVM NUMA 节点相同的套接字中后,对于基本上只执行问题中描述的循环的程序,perf 的结果有点道理:

Performance counter stats for 'system wide':  1,035,380    uncore_imc/event=0xe7/

到目前为止,这似乎是最好的猜测。

关于memory - 计算写入挂起队列的分配数量 - NV 内存出现意外的低结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60822244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com