我正在尝试使用某些非核心硬件计数器,例如:skx_unc_imc0-5::UNC_M_WPQ_INSERTS
。应该计算分配到“写入待处理队列”中的数量。该计算机具有2个采用级联湖架构的Intel Xeon Gold 5218 CPU,每个CPU具有2个内存控制器。 linux版本是5.4.0-3-amd64。我有以下简单循环,我正在为此阅读计数器。数组元素的大小为64字节,等于高速缓存行。
for(int i=0; i < 1000000; i++){
array[i].value=2;
}
对于此循环,当我将内存映射到DRAM NUMA节点时,该计数器结果大约为150,000,这可能是有道理的:此NUMA节点总共有6个通道用于2个内存控制器。它们以交错模式使用DRAM DIMM。然后,我相信每个通道都有一个单独的WPQ,因此skx_unc_imc0从整个商店中获得1/6。我通过skx_unc_imc0-5
获得了papi_native_avail
个计数器,假设每个计数器用于不同的通道。 意外的结果是,当我将程序映射到非易失性内存而不是映射到DRAM NUMA节点时,将其作为单独的NUMA节点呈现给同一套接字。每个插槽有6个NVM DIMM,可创建一个交错区域。因此,在写入NVM时,应类似地使用6个不同的通道,并且在每个通道的前面有一个相同的WPQ,应再次获得1/6个写入插入。]
但是UNC_M_WPQ_INSERTS
仅在NV存储器上返回大约1000。
我正在尝试使用某些非核心硬件计数器,例如:skx_unc_imc0-5 :: UNC_M_WPQ_INSERTS。应该计算分配到“写入待处理队列”中的数量。机器有2个...
UNC_M_WPQ_INSERTS
仅将写入DRAM的次数分配到写入待处理队列中。英特尔为持久性存储器添加了相应的硬件计数器:UNC_M_PMM_WPQ_INSERTS
,用于对在英特尔®傲腾™DC持久性存储器的PMM写入未决队列中分配的写入请求进行计数。