我有一个Intel(R) Core(TM) i7-4720HQ CPU @ 2.60GHz
(Haswell
)处理器。随着时间的推移,我需要检索对每个DRAM列的访问次数,以估计其功耗。根据芯片组文档的第261
页(即数据表,第2卷(M和H处理器行)),我可以使用寄存器中的32位值RAM—DRAM_ENERGY_STATUS
作为DRAM能量估计。但我需要等级能量估计。我还可以使用core和offcoreDRAM访问性能计数器来估计功耗,但如前所述,我需要每个列的统计信息除外,他们还报告整个系统的统计数据,而能量是按等级计算的。它们也不报告许多DRAM访问。
因此,IMC
计数器(属于非核心计数器)应该是理想的选择。Perf
不支持每列计数器。我尝试使用PCM-Memory
访问IMC
计数器信息。但是/sys/bus/event_source/devices/uncore_imc
不是由内核安装的(版本是5.0.0-37-generic
),并且该工具不检测CPU。我尝试手动访问非核心性能计数器此处记录了整个系统DRAM访问计数器(它们是而不是在上述芯片组手册中记录的)。我可以使用这些计数器检索总计DRAM读取和写入访问。但是,没有关于频道或等级访问统计信息。如何找到与这些计数器相关的偏移?我应该使用试错吗?
p.S.:这个问题也在"英特尔软件调整、性能优化与优化"课程中提出;平台监测论坛。
MSR_DRAM_ENERGY_STATUS
始终报告所有内存通道的能耗估计值。没有简单的方法可以将其分解为每个等级的能量。该登记册报告了对Haswell的高度准确的估计。
5.0.0-37-generic
内核是Ubuntu内核,支持Haswell上的uncore_imc/data_reads/
和uncore_imc/data_writes/
事件,它们分别表示来自IMC的数据读取CAS命令和数据写入CAS命令。全高速缓存行读取和全高速缓存线写入事务导致存储器总线上的单个突发64字节事务到单个列。部分读取也作为总线上的单个完整线路读取来执行,但是由于协议中的限制,部分写入可能需要完整线路读取然后完整线路写入。部分写入通常可以忽略不计。
uncore_imc/data_reads/
和uncore_imc/data_writes/
事件是针对任何单元(而不仅仅是核心)生成的针对DRAM内存的请求而发生的。这些名称由perf
给出,它们分别对应于您引用的英特尔文章中提到的UNC_IMC_DRAM_DATA_READS
和UNC_IMC_DRAM_DATA_WRITES
。这里提到的其他三个事件允许您分别计算三个可能的源(GT、IA和IO)的请求(而不是CAS命令!)。在旧内核的/sys/bus/event_source/devices/uncore_imc/events
下找不到它们。从主流内核v5.9-rc2开始,perf
支持它们。
顺便说一句,PCM
也支持这些事件,它使用这些事件来报告所有通道上的读写带宽,但您应该使用工具pcm.x
,而不是pcm-memory.x
,它只适用于服务器处理器。
Haswell H处理器线路处理器具有带有两个DDR3L 64位通道的单芯片上存储器控制器。每个通道可以包含零个、一个或两个DIMM,所有通道的总容量最多可达32 GB。此外,每个DIMM最多可以包含两个列,因此单个通道可以包含0到4个列之间的任何列。i7-4720HQ是一款高端移动处理器。你可能在一台有8GB或16GB内存的笔记本电脑上。如果自购买以来内存拓扑结构没有更改,则它可能只有两个4GB或8GB DIMM,每个通道一个,如果用户需要,每个通道还有一个空闲插槽可用于扩展。这意味着每个通道有一个或两个列。
在了解物理地址如何映射到列组的情况下,您可以近似每个列组的访问次数。如果每个通道都填充有相同容量的单列DIMM,则映射在处理器上很简单。物理地址的第6位(即第7位)决定了请求被映射到哪个通道,从而决定了请求的秩。您可以通过使用--phys-data
选项在MEM_LOAD_UOPS_L3_MISS_RETIRED.LOCAL_DRAM
上运行perf record
来收集IMC上请求的物理地址的一组样本。显然,这组样本可能仅代表到达IMC的源自核心的失效负载,这些负载是IMC处所有请求的一小部分。
在我看来,你想测量每个列的内存访问次数,以便从DRAM的总能量中估计每个列的能量,但这一点并非微不足道,原因如下:
- 并非所有CAS命令都具有相同的能源成本。预充电和激活命令不由任何事件计数,并且可能消耗大量能量,尤其是在行缓冲器未命中率较高的情况下
- 即使IMC中没有请求,只要至少有一个活动内核,内存通道就会通电并消耗能量
- 处理同一类型和同一地址的请求所需的时间可能会因等级间切换和读写切换所需的时序延迟而随周围请求的不同而变化
尽管如此,我认为在对每个秩的请求数量进行代表性估计的情况下(如上所述),可以建立一个关于每个秩能量的上界和下界的良好模型。
最重要的是,没有一种简单的方法可以像在服务器处理器上那样获得按等级计数的奢侈。