链路层的作用是什么

本章介绍了链路层,链路层为节点之间的基于数据包的通信和跨链路的互连提供了一种简化的机制。它包含以下几部分: Introduction Link Flit Channel Port Node interface definitions Increasing inter-port bandwidth Channel interface signals Flit

        本章介绍了链路层,链路层为节点之间的基于数据包的通信和跨链路的互连提供了一种简化的机制。它包含以下几部分:

 

  • Introduction
  • Link
  • Flit
  • Channel
  • Port
  • Node interface definitions
  • Increasing inter-port bandwidth
  • Channel interface signals
  • Flit packet definitions
  • Protocol flit fields
  • Link flit

1. Introduction

链路层定义了packet和flit格式,以及跨链路的流控。

下图示例了一种基于link的通信典型系统:

2. Link

Link通信是在transmitter和receiver之间的,在transmitter和receiver之间的连接称为link,一个节点和互连之间的双向通信需要一对链路,如下图所示:

 

outbound link :Transmitter发包的link,也就是我们所说的TX方向

inbound link  :Receiver收包的link,也就是我们所说的RX方向

 

3. Flit

        Flit是链接层中传输的基本单元,packets被转换成多个filts并通过link传输。有以下两种类型的flits:

Protocol flit

Protocol flit的payload携带protocol packet。在CHI协议里,每个packet就是一个 flit。

Link flit

Link flit携带的messages用于链路维护。例如在断链的过程中,transmitter使用link flit返回Link Layer Credit(L-Credit)给receiver。Link flits来源于transmitter,终结于链路另一边的receiver。

4. Channel

        在本规范中,链路层提供了一组通道用于flit通信。每个通道有确定的flit格式,每个通道有很多field域,且有些field的位宽可以有多重可选值。在某些情况下,所定义的flit格式可以在入站通道和出站通道上同时使用。表13-1显示了通道,以及通道在RN和SN组件上的映射。

通道依赖关系

CHI协议的channel之间允许有以下依赖关系。

对于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不能和其它通道有依赖关系,意味着对于所有还没有发送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不能和其它任何通道有依赖关系;

5.Port

Port是一个节点接口上所有的link的集合。下图是links、channels和port之间的关系:

(Port>link>channel > signal)

 

6.Node interface definitions

节点之间的通讯是通过使用node interface来交换link flits,本小节主要描述node interface,包含Request Nodes和Subordinate Nodes。每个节点中LINKACTIVE interface相关的信号和管脚将在14章《Link Handshake.》中描述。

6.1 Request NodesRN

本节描述的RN接口包括:

  • RN-F
  • RN-D
  • RN-I

RNF

RN-F接口使用全部的channel,用于完全一致性的requester,比如coer或cluster如下图所示: 

 

RND

RN-D interface也使用了全部通道,用于处理DVM messages的IO 一致性节点,但是SNP通道只用于处理DVM 事务。如下图所示:

RNI

        RN-I 接口使用除了SNP的其它通道,用于IO coherent RN,比如GPU或IO bridge。因为RN-I节点不需要包含硬件一致性cahce或TLB,所以无需SNP通道。如下图所示:

6.2 Subordinate NodesSN

SN分为SN-F和SN-I。SN-I和SN-F的interface一样,包括:

  • RX request channel   *1
  • TX response channel    *1
  • TX data channel  *1
  • RX data channel  *1

SN从ICN上接收request messages,给ICN返回response messages。但是RN-I和RN-F接收不同的事务类型。下图展示了SNF/SNI的接口:

7. lncreasing inter-port bandwidth

一个节点接口上的可用带宽可以通过几种方式来增加。这里介绍以下两种允许的架构方法:

  1. Multiple interfaces(多接口)
  2. Replicated channels on a single interface(单接口,复制通道)

7.1 Multiple interfaces

为一个组件增加可用带宽的最简单的方法是有多个接口。可以复制(重复)一个完整的接口。

节点上接口重复的次数是实现者自定义的。

通过两个接口增加带宽的方法的主要特点是:

  • 每个接口都有自己的:

        ——节点ID

        ——TxnID pool

        ——SACTIVE信号集
        ——LINKACTIVE信号集

        ——SYSCOREQ/SYSCOACK信号集

        ——可选广播控制引脚集

  • 每个重复的接口必须视为独立接口

        ——如果一个接口分配了cache line,则另一个复制接口无法释放该cache line。

        ——当响应请求时,完成者必须在与请求所使用的接口相同的接口上发送响应。

        ——必须将snoop发送到用于导致cache line分配的事务的相同接口。

        ——两个接口之间的事务不能有依赖关系。

  • 即使只有一部分通道需要增加带宽,也必须复制所有通道

Address striping

        可选优化:RN通过指定address striping在多个接口之间进行选择。

        一个Home节点通常可以基于一个snoop filter来过滤snoop。如果SF是精确的,那么它可以跟踪缓存cache line的请求者的节点ID,并向单个接口上的同一缓存行发送后续请求的snoop。如果SF不能精确跟踪,或者是追踪的系统组件的数量而不是请求节点接口的数量,将无法隔离需要发送snoop的单个接口,除非SF知道且使用RN相同的address striping算法。

        当RN没有声明它正在使用的address striping算法时,SF要么需要做的更大,要么Home节点将不得不发送冗余的snoop。因此建议RN声明它正在使用的address striping算法。

        通常使用hash函数。Hash是我们的老朋友了,就不举例了。

7.2 Replicated channels on a single interface

        与通过更复杂的方法复制一个完整的接口不同,增加可用接口带宽的一种更有效的方法是有选择性地复制需要更大带宽的信道。

Features:

每个通道都可以被选择性地复制。对被复制的通道没有任何限制。通常,通道的复制是基于该通道上所需的预期带宽。例如,在图13-10中,TXREQ被复制为TXREQ0,TXREQ1,而RXSNP没有被复制,只有RXSNP0。复制的通道接口的特点是:

  • 与单个DAT通道对应的所有复制的DAT子通道必须具有相同的位宽。
  • 完整的接口必须使用:

        ——相同的NodeID

        ——单个TxnID池

  • 事务中的message可以使用任何子通道:

        ——响应消息不需要使用与请求相同的子通道。例如,TXREQ0上的请求可以在RXRSP0或RXRSP1上给出响应。

        ——针对单个请求的多个响应消息可以在任何子通道上出现。例如,一个写入事务的DBIDResp可以在RXRSP0上接收,而相应的Comp可以在RXRSP1上接收。

  • 与非复制通道一样,复制通道不提供任何通道内排序保证。
  • 所有Link信用证都是在子通道的基础上完成的。

        ——不能使用TXREQ0的信用证来发送TXREQ1上的flit。

        ——接收方必须在所有子通道上提供信用证。

  • 协议信用证是对合并后的TXREQ通道而言。
  • 不支持单独关闭子通道的电源。
  • DVM snoop的两个部分可以放在任何一个子通道上。即每个部分都可以在不同的子通道上。
  • 两个已连接的接口上的子通道数必须匹配。
  • 只能有一组 SACTIVE、LINKACTIVE和SYSCOREQ/SYSCOACK信号,以及可选的广播控制引脚。
  • 当接口包含复制的DAT通道时,不允许将接口属性CCF_Wrap_Order设置为True。

8. Channel interface signals

主要包含以下内容:

  • Request, REQ, channel
  • Response, RSP, channel
  • Snoop, SNP, channel
  • Data, DAT, channel

​​​​​​​8.1 Request, REQ, channel

图13-11 显示了REQ通道接口信号引脚,“R”:REQFLIT的位宽

下表是对上述信号的详细描述:(其他通道信号之相似,后文不再重复)

信号名

描述

REQFLITPEND

比flit提前一拍置起,表示下个时钟周期可能会有flit传输

REQFLITV

Request flit valid

REQFLIT

Request flit

REQLCRDV

Request L-Credit valid ,接收者将此信号置起以返还一个请求通道的L-Credit给发送者。

​​​​​​​8.2 Response, RSP, channel

下图显示了RSP通道接口管脚,T是RSPFLIT的位宽,发送和接收方向的RSP通道 接口信号是一样的。

 

下表是信号详细描述:

8.3 Snoop, SNP, channel

8.4 Data, DAT, channel

9. Flit packet definitions

9.1 Request flit

9.2 Response flit

  

9.3 Snoop flit

9.4 Data flit

 

10. Protocol flit fields

Protocol flit的opcode域值不为0,本节的所有域段都可应用于Protocol flit。下面将分别介绍Protocol field的各个域段。

简写

全称

描述

QoS

Quality of Service

事务的服务质量,QoS值越大,优先级越高

TgtID

Target Identifier

目标节点ID,message都有携带,是message要发送节点的组件NodeID,ICN可以根据这个将message正确发送到目的地

SrcID

Source Identifier,

源节点ID,ICN可以根据这个确定哪个port发送的message

HomeNID

Home Node Identifier

原始请求的HomeId,Requester在收到CompData之后,用这个域值来决定CompAck的TgtID;用于CompData和DataSepResp,在其他data message中该域值必须为0;

ReturnNID

Return Node Identifier

用于决定SN发送的CompData, DataSepResp或者 Persist response的目标节点,该值可以是HN或原始Requester的NID;用于HN发往SN的ReadNoSnp, ReadNoSnpSep, CleanSharedPersistSep, WriteNoSnp,

WriteNoSnpDef, Combined Write,Atomic requests.

其他不适用的请求该字段必须为0.

FwdNID

Forward Node Identifier

用于DCT传输中CompData响应要发给的Requester,该值必须等于原始请求的Requester的NID,只应用于Forward type snoops,在其它snoop requests中无用且必须为0;

注:在range-based TLBI DVM操作中,该字段为DVM payload

LPID

Logical Processor Identifier

在一个RN包含多个 processing agent时需要用其标识;在request中,和SrcID可以唯一标识一个logical processor;

PGroupID

Persistence Group Identifier

请求者使用此字段来处理不同的 CleanSharedPersistSep事务集,通过将它们分组并使用PGroupID标识每个事务集。

只用于 CleanSharedPersistSep、Write*CleanShPerSep requests和Persist、CompPersist

Responses。

StashNID

Stash Node Identifier

用于标识Stash request的目的地,在StashNIDValid有效时必须是有效值;只应用于Stash request中,在其它requests中无用且必须为0;

StashNIDValid

Stash Node Identifier Valid

在Stash命令中指示StashNID是否有效;在其它requests中无用

StashLPID

Stash Logical Processor Identifier

用于Stash request和Stash type snoop request中,和StashNID一块确定唯一的Logical Processor;在其它requests中必须为0;

StashLPIDValid

Stash Logical Processor Identifier Valid

用于Stash request和Stash type snoop request中,指示StashLPID是否有效;在其它requests中无用

StashGroupID

Stash Group Identifier

请求者使用此字段来处理不同的 StashOnceSep事务集,通过将它们分组并使用StashGroupID标识每个事务集。

TxnID

Transaction Identifier

Message的事务ID,如果同个源发起的outstanding transactions,需要使用不同的TxnID

ReturnTxnID

Return Transaction Identifier

用于下级节点返回CompData和DataSepResp响应的TxnID,它的值可以是HN产生TxnID,或者是原始requester产生的TxnID;

FwdTxnID

Forwarding Transaction Identifier

等于原始request的TxnID,用于snoop request中;

DBID

Data Buffer Identifier

Completer返回的响应里携带,Requester用于CompAck或WriteData的TxnID

Opcode

Channel opcodes

Opcode决定了每个message的操作,不同channel支持的Opcode不一样。 

在表格后文详细展开。

Deep

Deep persistence

Requester用来表示在之前的写操作完成之前不能发送Persist response。

适用于CleanSharedPersist* request and Combined Write request with CleanSharedPersistSep

Addr

Address

支持44-52bits的地址

NS

Non-secure

该字段与NSE结合,建立一个访问的PAS物理空间。

NSE

Non-secure extension

Size

Size of transaction data

指定该笔transaction的data size大小

MemAttr

Memory Attribute

SnpAttr

Snoop Attribute

0: non-snoopable

1:snoopable

DoDWT

Do Direct Write Transfer

直接写传输,数据从RN直接发到SN

LikelyShared

Likely Shared,

指示的requested data可能在其它RN中存在

Order

Ordering requirements

指定保序要求

 

Excl

Exclusive

独占访问

CAH

CopyAtHome

PBHA

Page-based Hardware Attribute

Endian

Endian

0:小端模式

1:大端模式

AllowRetry

Allow Retry

指示transaction是否可以被Retry;

ExpCompAck

Expect Completion Acknowledge

指示transaction是否包含CompAck响应;

SnoopMe

SnoopMe

指示HN是否需要给Requester发送snoop request,仅用于Atomic requests

RetToSrc

Return to Source

指示Snoopee是否需要返回一份cacheline data给HN;适用于除了DVMop外的所有snoop

DataPull

Data Pull

指示snoop response中是否包含Read request

 

DoNotGoToSD

Do not transition to SD state

指示Snoopee的cache line能否允许是SD态;

PCrdType

Protocol Credit Type

指示grant或return的credit类型;

TagOp

Tag Operation,

Tag

Tag

TU

Tag Update

TagGroupID

Tag Group Identifier,

TraceTag

Trace Tag

MPAM

Memory System Performance Resource Partitioning and Monitoring

RespErr

Response Error

该域段用于指示Response的error status

 

Resp

Response status

FwdState

Forward State

CBusy

Completer Busy

CCID

Critical Chunk Identifier

 太晚了,一些字段后续再补充

Opcode:

REQ channel opcode:

Atomic opcode:

RSP channel opcode:

SNP channel opcode:

DAT channel opcode:

 

11. Link flit

LINK flit用于在断链过程中将L-Credits返回给接收方。LINK flit起源于链路发射器,终止于链路另一边的链路接收器。

Link flit通过opcode字段设为0来标识,TxnID字段也要求为0。其余的字段不被使用,并且可以取任何值。

知秋君
上一篇 2024-08-01 19:12
下一篇 2024-08-01 18:48

相关推荐