每个类型的Node,功能不同,这里只介绍几个关键的术语:
RN-F: Fully coherent Request Node – Typically a CPU core, a CAL with two cores, or a DSU cluster
HN-F: Fully coherent Home Node – A block of SLC cache with Snoop Filter
CAL: Component Aggrega
tion Layer – A block that houses two CPU cores connecting to one RN-F port
_SN-F: Slave Node_- Connects a native memory controller, such as the CoreLink DMC-620 Dynamic Memory Controller
_CCG: CXL Gateway_- A CCG bridges between CHI and CXS IssueB, which carries either CML_SMP.
3. CMN中的PMU
CMN-700提供高速自托管调试跟踪(Debug Trace,DT)功能。CMN-700 DT系统由一组分布在互连线上的调试跟踪控制器(Debug Trace Controllers,DTC)和调试跟踪监视器(Debug Trace Monitors,DTM)组成。
CMN-700的DT系统还提供了PMU支持,PMU提供以下功能:
带shadown功能的local以及global计数器。
所有内部CMN-700设备的PMU快照。
DTM位于每个XP内,有4个local计数器(4_16b),最多可以同时统计例子连接的设备节点和/或XP本身的四个事件。DTC每个CMN实例只有2个,有8个global计数器(8_32b),DTM中的local计数器溢出进位到global计数器中,global计数器支持溢出中断。多个CMN实例由CCIX互联起来。
4. cloud-kernel对倚天CMN PMU的支持
4.1 检查内核驱动
测试机的倚天710平台硬件环境,1个socket,2个die:
#lscpu
Architecture: aarch64
Byte Order: Little Endian
CPU(s): 128
On-line CPU(s) list: 0-127
Thread(s) per core: 1
Core(s) per socket: 128
Socket(s): 1
NUMA node(s): 2
。。。
每个die,都有一个单独的PMU设备:
#ls /sys/bus/event_source/devices/ | grep cmn
arm_cmn_0
arm_cmn_1
根据CMN内部设备节点的功能不同,节点支持的PMU事件也不同,例如,HN-F连接的是SLC(L3 cache),支持的事件也是和cache相关的,比如cache miss, cache fill等。
#perf list | grep arm_cmn
。。。
arm_cmn_0/dtc_cycles/ [Kernel PMU event]
arm_cmn_0/hnf_brd_snoops_sent/ [Kernel PMU event]
arm_cmn_0/hnf_cache_fill/ [Kernel PMU event]
arm_cmn_0/hnf_cache_miss/ [Kernel PMU event]
。。。
4.2 用法
CMN的PMU支持多种计数模式:
Global Node Type
指定Node ID
watchpoint trace
Global Node Type模式
倚天710的CMN频率为1.8GHz,测试Die 0上DTC的1秒内的时钟周期:
#perf stat -e arm_cmn_0/dtc_cycles/ -a -- sleep 1
Performance counter stats for ‘system wide’:
1,801,309,181 arm_cmn_0/dtc_cycles/
1.000686864 seconds time elapsed
采集SLC的cache miss:
#perf stat -e arm_cmn_0/hnf_cache_miss/ -a -- sleep 1
Performance counter stats for ‘system wide’:
97,631 arm_cmn_0/hnf_cache_miss/
1.000857754 seconds time elapsed
注意:默认情况下,每个事件都提供给定类型的所有节点的聚合计数,即上面例子统计的是Die 0所有SLC的miss的次数和。
ByNodeID模式
PMU可以通过bynodeid,统计某一特定设备的事件。例如,x,y,portid,devid=(3,6,1,1)处的CCLA设备,采样事件为LA_RX_CXS:
#perf stat -e arm_cmn_0/type=0x105,eventid=0x21,bynodeid=1,nodeid=0x1b5/ -a sleep 1
Performance counter stats for ‘system wide’:
156609 arm_cmn_0/type=0x105,eventid=0x21,bynodeid=1,nodeid=0x1b5/
1.001515360 seconds time elapsed
type:设备节点的类型
eventid:计数的事件ID
bynodeid:必须置为1,指明计数为bynodeid模式
nodeid:设备节点的nodeid
Watchpoint模式
PMU还可以统计watchpoint事件,以监控特定的flit流量。watchpoint的为驱动合成的设备节点类型,事件类型为0x7770,硬件中并不存在。与PMU一样,事件可以是全局的,也可以是针对特定XP的。
#perf stat -e arm_cmn_0/type=0x7770,eventid=0x0,bynodeid=1,nodeid=0x198,wp_dev_sel=0x1,wp_chn_sel=0x3,wp_grp=0x0,wp_val=0x0,wp_mask=0xFFFFFFFFFFFFFFFF/ -a -- sleep 1
Performance counter stats for ‘system wide’:
8,466 arm_cmn_0/type=0x7770,eventid=0x0,bynodeid=1,nodeid=0x198,wp_dev_sel=0x1,wp_chn_sel=0x3,wp_grp=0x0,wp_val=0x0,wp_mask=0xFFFFFFFFFFFFFFFF/
1.000716738 seconds time elapsed
type=0x7770, watchpoint
eventid: 0x0 for uploads, 0x2 for downloads
bynodeid=1,nodeid=0x198: specify nodeid of XP which includes CCG
wp_dev_sel:0x1 for CCG
wp_chn_sel: 0x3 for DATA VC
wp_grp: 0x0 for primary group (WP 0,2 for primary group, WP 1,3 for secondary group)
wp_val=0x0: reset value
wp_mask=0xFFFFFFFFFFFFFFFF: All fields in the primary match group will be ignored so that any upload DAT flit would be a match
原作者:龙蜥社区