本节描述链路层(Link Layer)用于提供节点之间在Links上的packet传输通讯。Link layer定义了:
- Packet and flit formats.
- Flow Control across a link.
图1为基于link通讯的典型系统
图1 System using link based communication
Link通讯是在transmitter和receiver之间的,在transmitter和receiver之间的连接称为link,如图2所示。
图2 Two-way link communication
Flit是链路层的基本传输单位,packets被转换成多个filts并通过link传输。有以下两种类型的flits:
- Protocol flit:Protocol flit的payload携带protocol packet。在CHI协议里,每个protocol packet映射到一个protocol flit;
- Link flit:Link flit携带的messages用于维护link。例如:在断链的过程中,transmitter使用link flit返回Link Layer Credit(L-Credit)给receiver。Link flits来源于transmitter,终结于另一边link的receiver。
主要分为以下几小节来阐述链路层知识。
1.Channel and Port
1.1 Channel
CHI协议中,Link Layer提供了一组通道用于flit通讯,每个通道有确定的flit格式,每个通道拥有很多域,且有些域的宽度可以有多重可选值。表1为link层RN和SN采用的各个通道。
表1 Channels’mapping onto the RN and SN component channels
CHI协议中通道之间存在依赖关系,对于RN:
- RN的inbound SNP channel和outbound REQ channel不能存在依赖关系
- RN的outbound RSP channel允许等待inbound SNP channel;
- RN的inbound SNP channel允许等待outbound DAT channel;
- RN的inbound RSP通道不能和其它任何通道有依赖关系;
- RN的inbound DAT通道不能和其它任何通道有依赖关系;
注意:要求RN的inbound RSP和inbound DAT channel不能和其它channel有依赖关系,意味着对于所有还没有发送CompAck responses的outstanding transactions,RN必须有能力接收所有的Comp和CompData响应。
对于SN:
- SN的outbound RSP channel允许和inbound REQ channel有依赖关系;
- SN的inbound REQ channel不能和outbound DAT channel有依赖关系;
- SN的inbound DAT channel不能和其它任何通道有依赖关系;
1.2 Port
Port是一个node interface上所有的links的集合。图3为links、channels和port之间的关系图。
图3 Relationship between links,channels,and port
2.Node interface definitions
节点之间的通讯是通过使用node interface来交换link flits,本小节主要描述node interface,包含Request Nodes和Slave Nodes。每个节点中LINKACTIVE interface相关的信号和管脚将在《CHI低功耗》中的建断链章节描述。
2.1 Request Nodes
Request Node的interface根据类型使用的channel数目不一样。RN-F interface使用了全部的channels,通常用于全一致性requester,比如coer或cluster如图4所示。
图4 RN-F interface
RN-D interface也使用了全部通道,用于处理DVM messages的IO coherent node,SNP通道只用于处理DVM transaction。如图5所示:
图5 RN-D interface
RN-I interface用了除了SNP channel的其它channel,用于IO coherent RN,比如GPU或IO bridge。因为RN-I节点不需要包含cahce或TLB,所以SNP channel不需要的。如图6所示:
图6 RN-I interface
2.2 Slave Nodes
SN interface也根据节点类型不一致,分为SN-F和SN-I。SN-I和SN-F的interface一样,如图7所示,从ICN上接收request messages,给ICN返回response messages。但是RN-I和RN-F可以接收的transaction type是不一样的。
图7 SN-F and SN-I interface
3.Channel interface signals
本节主要描述每个channel interface,包括REQ channel、RSP channel、SNP channel、DAT channel。
3.1 REQ channel
图8为REQ channel interface的管脚信号,R代表REQFLIT的宽度。
图8 REQ channel interface pins
表2为 REQ通道接口信号的描述。
3.2 RSP channel
图9为RSP channel interface管脚信号,T代表RSPFLIT的宽度。
图9 RSP channel interface pins
表3为 RSP通道接口信号的描述。
3.3 SNP channel
图10为SNP channel interface管脚信号,S代表SNPFLIT的宽度。
表4为SNP channel interface signals
3.4 DAT channel
图11为DAT channel interface管脚信号,T代表DATFLIT的宽度。
表5 DAT channel interface signals
4.Flit packet definitions
Flit packet的详细信息可以看CHI-issueC 310页的表12-6至12-9,这里不详细阐述了。
5.Protocol flit fields
Protocol flit的opcode域值不为0,本节的所有域段都可应用于Protocol flit。下面将分别介绍Protocol field的各个域段。
TgtID
message都有携带,是message要发送节点的组件NodeID,ICN可以根据这个将message正确发送到目的地;
SrcID
message都有携带,是发送message的组件NodeID,ICN可以根据这个确定那个port发送的message;
HomeNID
原始请求的Home Identifier,Requester在收到CompData之后,用这个域值来决定CompAck的TgtID;用于Slave或HN返回CompData和DataSepResp,在其他data message中该域值必须为0;
ReturnNID
用于决定Slave发送的CompData和DataSepResp的节点,该值可以是HN或原始Requester的NID;该域段只有在HN发往SN的ReadNoSnp、ReadNoSnpSeq和non-store Atomics才有效,其他requests必须为0;
FwdNID
用于DCT传输中CompData响应要发给的Requester,该值必须等于原始request的Requester的NID,只应用于Forward type snoops,在其它snoop requests中无用且必须为0;
LPID
在request中,和SrcID可以唯一标识一个logical processor;
StashNID
用于标识Stash request的目的地,在StashNIDValid有效时必须是有效值;只应用于Stash request中,在其它requests中无用且必须为0;
StashNIDValid
在Stash命令中指示StashNID是否有效;在其它requests中无用;
StashLPID
用于Stash request和Stash type snoop request中,和StashNID一块确定唯一的Logical Processor;在其它requests中必须为0;
StashLPIDValid
用于Stash request和Stash type snoop request中,指示StashLPID是否有效;在其它requests中无用;
TxnID
同一个源用每个不同TxnID来表示outstanding transactions。Link filts没有单独的TxnID,全部为0;
ReturnTxnID
用于Slave返回CompData和DataSepResp响应的TxnID,它的值可以是HN产生TxnID,或者是原始requester产生的TxnID;
FwdTxnID
等于原始request的TxnID,用于snoop request中;
DBID
Completer返回的响应里携带,Requester用于CompAck或WriteData的TxnID;
Opcode
Opcode决定了每个message的操作,不同channel支持的Opcode不一样。具体见CHI-issueC 317页的表12-14至12-18;
Addr
CHI协议支持44-52bits的物理地址,因此REQ和SNP packets在DVM操作中支持49-53的Virtual Address(VA)。
- Request messages支持44-53bit地址宽度,Addr[(43-51):0].
- Snoop messages支持41-49bit地址宽度,Addr[(43-51):3]:1. Addr[(43-51):6]指定了64byte cacheline;2. Addr[5:4]指定了cacheline中的16byte critical chunk;3. Addr[3]进而SnpDVMOp相关,对于其它Snoop packet不关注;
NS
指示安全还是非安全访问;
Size
指定该笔transaction的data size大小;
MemAttr
有Allocate、Cacheable、Device和EWA;
SnpAttr
指示transaction的snoop属性;
LikelyShared
指示的requested data可能在其它RN中存在;
Order
指示transaction的保序需求;
Excl
指示transaction的Exclusive属性;
Endian
用于Atomic transaction的endianness of Data;
AllowRetry
指示transaction是否可以被Retry;
ExpCompAck
指示transaction是否包含CompAck响应;
SnoopMe
指示HN是否需要给Requester发送snoop request,仅用于Atomic requests;
RetToSrc
指示Snoopee是否需要返回一份cacheline data给HN;
DataPull
指示snoop response中是否包含Read request;
DoNotGoToSD
指示Snoopee的cache line能否允许是SD态;
DoNotDataPull
指示Stash的响应是否允许包含Data Pull;
QoS
值越高,越高的优先服务等级;
PCrdType
指示grant或return的credit类型;
TraceTag
为了trancing purposes,在transaction用于给packet做标记;
VMIDExt
Virtual Machine Identifier extension,用于扩展VMID的8-16bits
Resp
Response Status,在多个数据packet中,Resp的域必须保持一致;表6为Resp value encoding。
FwdState
指示DCT中Snoopee发给Requester的CompData的cache state,表7为FwdState value encodings
RespErr
该域段用于指示Response的error status;表8为RespErr value encodings;
Data
在Data packet中用于传输data payload。
CCID
指示critical 128-bit chunk of the data that is being requested;
DataID
Data Identifier;
BE
指示相应的data byte是否有效。BE域是用于write data,DVM payload和snoop response data。对于read response data,该域段无效且可以为任意值。
DataCheck
用于相应data byte的DataCheck;
Poison
用于指示相应的64bit data chunk是否被poison,是否error。
DataSource
指示响应数据的发送者,用于Read request的CompData,SnpRespData和SnpRespDataPtl,在其他response响应中无效;
表9为 DataSource value encoding
RSVDC
给用户提供的备用域段;在Protocol flit中,任何值都可以;具体这个域在ICN上如何传输是根据具体实现的。
该域段可以应用于REQ和DAT通道如下: - 域段是否存在是可以选择的;
- 允许的域段宽度是4bit、8bit、12bit、16bit、24bit、32bit
- 域段宽度:1. REQ和DAT的channel可以不一样;2. 在整系统中,不需要所有的 REQ channels都一样;3. 在整系统中,不需要所有的DAT channels都一样;
当连接TX和RX flit interfaces出现RSVDC宽度不匹配时:
- RSVDC的低bits需要连接到另一侧interface上;
- RSVDC的高bits不需要连接到另一侧,且必须tie LOW;
6.Link flit
在link断链过程中,link flit用于返回L-Credit给receiver,Link flits产生于transmitter,截止于另一侧的receiver;link flit的Opcode域为0,TxnID域为0,其它剩余的域段可以为任意值;
7. Link layer Credit
本小结描述link layer credit(L-Credit)机制。使用L-Credits,信息可以在interface channel上传输。从transmitter往receiver发送一个flit必须要先获得一个L-Credit。
receiver通过将LCRDV信号拉高一拍表示给transmitter发送一个L-Credit,每个通道都有一个LCRDV信号。每次从transmitter往receiver的一个flit传输都需要消耗一个L-Credit。receiver最小能提供的L-Credit是1个,最大是15个。receiver必须保证有能力接受所有已经发送L-Credit的flits。
当link为active时,receiver必须及时提供L-Credit,不能和transmitter的其它组件功能有任何耦合关系。L-Credit不能在同一个周期被收到就马上使用。