本节描述链路层(Link Layer)用于提供节点之间在Links上的packet传输通讯。Link layer定义了:
Link通讯是在transmitter和receiver之间的,在transmitter和receiver之间的连接称为link,如图2所示。
图2 Two-way link communication
Flit是链路层的基本传输单位,packets被转换成多个filts并通过link传输。有以下两种类型的flits:
主要分为以下几小节来阐述链路层知识。
CHI协议中,Link Layer提供了一组通道用于flit通讯,每个通道有确定的flit格式,每个通道拥有很多域,且有些域的宽度可以有多重可选值。表1为link层RN和SN采用的各个通道。
表1 Channels’mapping onto the RN and SN component channels
CHI协议中通道之间存在依赖关系,对于RN:
对于SN:
Port是一个node interface上所有的links的集合。图3为links、channels和port之间的关系图。
图3 Relationship between links,channels,and port
节点之间的通讯是通过使用node interface来交换link flits,本小节主要描述node interface,包含Request Nodes和Slave Nodes。每个节点中LINKACTIVE interface相关的信号和管脚将在《CHI低功耗》中的建断链章节描述。
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
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
本节主要描述每个channel interface,包括REQ channel、RSP channel、SNP channel、DAT channel。
图8为REQ channel interface的管脚信号,R代表REQFLIT的宽度。
图8 REQ channel interface pins
表2为 REQ通道接口信号的描述。
图9为RSP channel interface管脚信号,T代表RSPFLIT的宽度。
图9 RSP channel interface pins
表3为 RSP通道接口信号的描述。
图10为SNP channel interface管脚信号,S代表SNPFLIT的宽度。
表4为SNP channel interface signals
图11为DAT channel interface管脚信号,T代表DATFLIT的宽度。
表5 DAT channel interface signals
Flit packet的详细信息可以看CHI-issueC 310页的表12-6至12-9,这里不详细阐述了。
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)。
当连接TX和RX flit interfaces出现RSVDC宽度不匹配时:
在link断链过程中,link flit用于返回L-Credit给receiver,Link flits产生于transmitter,截止于另一侧的receiver;link flit的Opcode域为0,TxnID域为0,其它剩余的域段可以为任意值;
本小结描述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不能在同一个周期被收到就马上使用。