Xeon E5-2600 v2服务器微处理器Uncore核心性能监控——介绍

介绍

Intel Xeon E5-2600 v2内部开发代码是Ivy Bridge-EP,或者Ivytown。它的前一代是Sandy Bridge-EP,两者的微架构差别不大,Ivy Bridge-EP主要是在制程上进行了升级。图1-1和图1-2显示了英特尔®至强®处理器E5-2600 v2和E5-1600 v2产品系列的非核心子系统(uncore sub-system)。 非核心子系统由多种组件组成,从CBox缓存代理(CBox caching agent)到电源控制器单元(PCU),集成内存控制器(iMC)和归属代理(HA, home agent)等。 这些组件大多数都提供类似的性能监视功能。
Xeon E5-2600 v2服务器微处理器Uncore核心性能监控——介绍
Xeon E5-2600 v2服务器微处理器Uncore核心性能监控——介绍
该图表示一种可能的EP配置。 并非所有skus都支持所有功能。

UNCORE PMON OVERVIEW

非核心性能监视工具(uncore performance monitoring facilities)被组织为每个组件的性能监视
(或“ PMON”)单位。非核心组件中的PMON单元可能包含一组或更多组计数器寄存器。除了UBox,每个PMON单元都提供一个单元级(unit-level)控制寄存器在框内的各个计数器之间同步操作(例如开始/停止计数)。
可以通过读取一组本地计数器寄存器来收集事件。每个计数器寄存器都与用于指定计数内容的专用控制寄存器搭配(即通过事件选择/ umask字段)以及如何计算。某些单元提供了指定其他信息的功能,这些信息可用于“过滤”受监视的事件(例如C-box;请参见第2.3.3.3节“ CBo过滤器寄存器(Cn_MSR_PMON_BOX_FILTER {0,1})”)。
这些盒子中的每一个都与U-Box通信,U-Box包含用于控制所有非核心PMU的寄存器活动(如第2.1节“非核心每套接字性能监视控件”中所述)。Uncore性能监视器表示per-socket资源,该资源不受操作系统执行的上下文切换和线程迁移的影响,建议监视软件代理建立固定的亲和力绑定,以防止不同uncore PMU的事件计数之间的串扰。
计数器寄存器和控制寄存器的编程接口属于两个地址空间:

  • Accessed by MSR are PMON registers within the Cbo units, PCU, and U-Box, see Table 1-2.
  • Access by PCI device configuration space are PMON registers within the HA, iMC, QPI, R2PCIe and R3QPI units, see Table 1-3.
    与地址空间的差异无关,只有少数例外,控制寄存器的位粒度布局用于对事件代码,单元掩码,启动/停止和通过阈值/边缘检测是相同的。
    可能会通知软件任何核心上的未核心计数器溢出。
    下表概述了每个框的常规性能监视功能。
    Xeon E5-2600 v2服务器微处理器Uncore核心性能监控——介绍

SECTION REFERENCES

从图上我们可以看到很多的功能模块,哪些模块我们需要学习呢?文档已经给我们列出来了:
Xeon E5-2600 v2服务器微处理器Uncore核心性能监控——介绍
从列表中我们可以知道,Ubox,Cbo,HA,iMC,IRP, PCU,QPI,R2PCIe以及R3QPI都是可以研究的对象,当然,本文档主要是讨论Uncore的性能调优,实际上Core也是微架构中的一部分。除了这些IP模块,图中红色的圈圈实际上是服务器芯片内部的高速总线Ring Bus,不少模块直接属于Ring Bus的‘车站’(Ring Stop),也有不少模块通过其他模块连接到Ring Bus,例如Ubox和IIO模块通过R2PCIe连接到Ring Bus上,而R2PCIe就属于Ring Stop。

UNCORE PMON - TYPICAL CONTROL/COUNTER LOGIC

以下是标准性能计数器模块的示意图,该模块说明了如何在每个计数器中路由和存储事件信息以及其成对的控制寄存器如何帮助选择和过滤传入的信息。 有关控制位如何影响事件信息的详细信息,请参见第2章的每个方框小节,下面提供一些摘要信息。
注意:PCU使用此块的一种改编(请参见第2.7.3节“ PCU性能监视器”更多信息)。 还应注意,图中仅显示了可用控制位的一个子集。
Xeon E5-2600 v2服务器微处理器Uncore核心性能监控——介绍
选择要监视的内容:配置寄存器的主要任务是选择要由其相应的数据计数器监视的事件。 设置.ev_sel和.umask字段将执行事件选择。
告诉硬件控制寄存器已设置:.en位必须设置为1以启用计数。 一旦在性能监视层次结构的框和全局级别中启用了计数(有关更多信息,请参见第2.1.2节“设置监视会话”),配对的数据寄存器将开始收集事件。

其他控制位包括:
X事件后的通知:. -代替设置由软件确定的间隔(通常为墙上时钟时间)手动停止计数器,可以将硬件设置为在发生一定数量的事件时通知监视软件。溢出允许位仅用于此目的。有关如何使用此机制的更多信息,请参见第2.1.1节“计数器溢出”。

将阈值应用于传入事件:.thresh-由于大多数计数器的值可以增加大于1,因此可以根据比较结果将阈值应用于生成事件。如果.thresh设置为非零值,则将该值与输入的计数进行比较每个周期中的那个事件。如果输入计数> =阈值,则数据寄存器中捕获的事件计数将增加1。
当将阈值字段应用于队列占用计数时,使用阈值字段生成其他事件可能特别有用。例如,如果已知一个队列包含8个条目,则知道队列包含6个或更多条目(即几乎已满)的频率或何时包含1个或更多条目(即“非空”)可能是有用的。
注意
对于英特尔®至强®处理器E5-2600 v2产品系列,.edge_det位应遵循顺序比较阈值。如果用户希望将这些位应用于事件,每个周期仅增加1,.thresh必须设置为0x1。

计算状态转换而不是按周期计数事件:.edge_det-寄存器可以捕获从无事件到事件传入(例如“上升”)的跃迁,而不是每个周期累积原始计数(对于每个周期可以递增1的事件)。边缘’)。

UNCORE PMU SUMMARY TABLES

以下是性能监控的Uncore中提供的寄存器列表。 应当注意,“非核心性能监视器”在MSR空间(U,CBo和PCU)和PCICFG空间之间分配。
这部分内容查看文档

ON PARSING AND USING DERIVED EVENTS

对于本章中涉及每个框的性能监视功能的许多部分,其中包含一组常用的度量标准或“派生事件”。 在大多数情况下,这些派生事件是在框中找到的事件的简单数学组合。 (例如[SAMPLE]),但度量标准使用了一些扩展名。
以下是派生事件的细分,以说明使用的许多符号。 计算“当TOR不为空时,缺少LLC的数据读取条目的平均数量”。
(TOR_OCCUPANCY.MISS_OPCODE COUNTER0_OCCUPANCY{edge_det,thresh=0x1})) with:Cn_MSR_PMON_BOX_FILTER.opc=0x182.
需要编程一个额外的控制寄存器(通常用于过滤):
• For a single field: with:Register_Name.field=value1
• For multiple fields: with:Register_Name.{field1,field2,…}={value1,value2,…}
• e.g. with:Cn_MSR_PMON_BOX_FILTER.{opc,nid}={0x182,my_node}
需要读取固定数据寄存器
• For the case where the metric requires the information contained in a fixed data register, the mnemonic for the register will be included in the equation. Software will be responsible for configuring the data register and setting it to start counting with the other events used by the metric.
• e.g. POWER_THROTTLE_CYCLES.RANKx / MC_Chy_PCI_PMON_CTR_FIXED
需要更多的软件输入以确定特定事件/子事件
• In some cases, there may be multiple events/subevents that cover the same information across multiple like hardware units. Rather than manufacturing a derived event for each combination, the derived event will use a lower case variable in the event name.
• e.g. POWER_CKE_CYCLES.RANKx / MC_Chy_PCI_PMON_CTR_FIXED where ‘x’ is a variable to cover events POWER_CKE_CYCLES.RANK0 through POWER_CKE_CYCLES.RANK7
需要在事件已被编程的寄存器中设置额外的控制位:
• event_name[.subevent_name]{ctrl_bit[=value],}
• e.g. COUNTER0_OCCUPANCY{edge_det,thresh=0x1}
注意:如果未指定[= value],则假定该位必须设置为1。
需要在框外收集更多信息(通常是常用术语):
• See following section for a breakdown of common terms found in Derived Events.

On Common Terms found in Derived Events

Xeon E5-2600 v2服务器微处理器Uncore核心性能监控——介绍

329468-intel-xeon-processor-e5-2600-v2-uncore.pdf