啥都吃的豆芽 · 2023年03月15日 · 北京市

倚天710性能监控——CMN互联带宽监测的PMU事件

REVISION HISTORY

DATEVERSIONDESCRIPTIONAUTHORAPPROVER
2023/2/261.0Initial versionShuai XueBaolin Wang

前言

CMN是倚天710的总线互联,所有的Filt Traffic都会经过CMN。通过CMN,我们可以统计Die to Die (D2D),以及Socket to Socket (S2S) 之间的互连带宽。根据《倚天710性能监控 —— CMN PMU概述》我们知道,CMN中不同Node的功能不同,而负责D2D和S2S流量的,是CCG。

1. CXL Gateway (CCG)

A CCG bridges between CHI and CXS IssueB, which carries either CML_SMP. The CCG includes[2]:

  • Request Agent (CCRA) proxy and Home Agent (CCHA) proxy functionality, which translate CHI to CML_SMP
  • CXS Link Agent (CCLA) which implements Upper Link Layer functionality of CCIX2.0 or CXL Data Link Layer, and sits within the CCG block, which is internal to the CMN-700 hierarchy
  • Optionally, an I/O coherent Requesting Node (RN-I) can be included in CCG block to handle PCIe traffic targeting remote memory or device through either fully coherent or I/O coherent Home Nodes

CMN的片内协议采用CHI协议,D2D采用CXS协议,CCG(CXL Gateway,CCG)负责CHI与CXS IssueB (CCIX2.0/CXL)的桥接。

所有CHI事务都需要一个目标ID来将数据包从源路由到目标。系统中的每个RN和HN内部要有一个系统地址映射(System Address Map, SAM),负责把地址转换成目标节点的ID。RN的SAM负责把物理地址转换成HN的ID;而HN的SAM需要把物理地址转换成SN的ID。Fig 2中为CXRA和CXHA为CXG中Node,CXG与CCG的区别在于,CXG支持的是CHI and CXS IssueA (CCIX1.1 port)[2]。

因此,要统计倚天的D2D和S2S带宽,我们需要使用CCLA的事件。如果区分CCLA事件统计的带宽为D2D还是S2S,还需要我们知道CMN的拓扑结构。

2. CMN-700 Topology in Yitian SoC

#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
...

测试环境为1个Socket,2个Die,因此,我们仅关注D2D的带宽的细节。

D2D:
nodeid=0x1b5(437), logid=0x7, type=0x105(CCLA), (x,y,portid,devid)=(3,6,1,1)
nodeid=0x1ad(429), logid=0x6, type=0x105(CCLA), (x,y,portid,devid)=(3,5,1,1)
nodeid=0x1a5(421), logid=0x5, type=0x105(CCLA), (x,y,portid,devid)=(3,4,1,1)
nodeid=0x19d(413), logid=0x4, type=0x105(CCLA), (x,y,portid,devid)=(3,3,1,1)

S2S:
nodeid=0x1c9(457), logid=0xa, type=0x105(CCLA), (x,y,portid,devid)=(3,9,0,1)
nodeid=0x181(385), logid=0x2, type=0x105(CCLA), (x,y,portid,devid)=(3,0,0,1)
nodeid=0x149(329), logid=0x8, type=0x105(CCLA), (x,y,portid,devid)=(2,9,0,1)
nodeid=0x101(257), logid=0x0, type=0x105(CCLA), (x,y,portid,devid)=(2,0,0,1)

倚天710的CMN中,对于跨Die(D2D)带宽,是413/421/429/437四个CCLA, 对于跨socket(S2S)带宽则是 257/329/385/457四个CCLA。这里,我们仅列出关键的Node。

带宽计算公式为:

  • Inter-socket RX Bandwidth = 32B LA_RX_CXS CMN_Freq / PMU_CYCLE_COUNTER
  • Inter-socket TX Bandwidth = 32B LA_TX_CXS CMN_Freq / PMU_CYCLE_COUNTER
  • Inter-Die RX Bandwidth = 32B LA_RX_CXS CMN_Freq / PMU_CYCLE_COUNTER
  • Inter-Die TX Bandwidth = 32B LA_TX_CXS CMN_Freq / PMU_CYCLE_COUNTER

3. 带宽准确性验证

根据前文《倚天710性能监控 —— CMN PMU概述》我们知道,CMN既可以统计全局类型(Global Type)的事件,也可以统计指定类型(By Nodeid)的事件。我们仅统计D2D带宽,因此需要使用By Nodeid。

#sync; \
 echo 3 > /proc/sys/vm/drop_caches; \
 perf stat -e arm_cmn_0/type=0x105,eventid=0x22,bynodeid=1,nodeid=413/ \
    -e arm_cmn_0/type=0x105,eventid=0x22,bynodeid=1,nodeid=421/ \
    -e arm_cmn_0/type=0x105,eventid=0x22,bynodeid=1,nodeid=429/ \
    -e arm_cmn_0/type=0x105,eventid=0x22,bynodeid=1,nodeid=437/ \
    -e arm_cmn_0/dtc_cycles/ -a \
    numactl --cpunodebind=1  --membind=0 ./bw_mem 4096M rd
4294.97 10987.55

 Performance counter stats for 'system wide':

       810,164,744      arm_cmn_0/type=0x105,eventid=0x22,bynodeid=1,nodeid=413/         
       810,632,046      arm_cmn_0/type=0x105,eventid=0x22,bynodeid=1,nodeid=421/         
       812,716,494      arm_cmn_0/type=0x105,eventid=0x22,bynodeid=1,nodeid=429/         
       811,744,534      arm_cmn_0/type=0x105,eventid=0x22,bynodeid=1,nodeid=437/         
    12,213,460,910      arm_cmn_0/dtc_cycles/

       6.785306920 seconds time elapsed

这里我们使用lmbench测试集中bw_mem验证,numactl保证bw_mem产生跨Die带宽。

根据公式计算,带宽为15 GB/s;bw_mem测试的实际读数据带宽为10.9 GB/s。

>>> 32*810164744*4*1.8/12213460910
15.283297534834457
>>> 10987.55/1000
10.987549999999999

误差主要来源于:

  • 时间不准:bw_mem在统计带宽前,会将buffer初始化,还会做一次warmup,在计算带宽时,用的是有效时间;而我们用perf统计时,统计的是程序的运行时间。
  • 数据不准:LA_RX_CXS事件统计的是CMN的四个CHI channles,包含了Request,Response,Snoop和Data,而bw_mem只统计了Data。
文章来源:龙蜥社区

推荐阅读
倚天710性能系列

更多Arm服务器相关技术及移植干货请关注Arm服务器专栏。如要加入Arm Server微信群,请添加极术小姐姐(微信id:aijishu20)备注Arm服务器邀请加入。
推荐阅读
关注数
17315
内容数
72
分享arm服务器软件应用经验、测试方法、优化思路、工具使用等。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息