CHI协议中各类trans行为描述

Read transactions
Read trans有如下的一些共同特性:
□ Makereadunique,数据响应是可选的,除此以外,所有的读操作,都必须要有读数据返回RN;
数据的来源,可以是HN, 其他RN, SN;
□ Allocate的数据,如果cache住了,数据需要放进HNF, 需要满足系统的数据一致性;
□ Non-alloc的数据,ReadNoSnp and ReadOnce*, 数据是不希望被cache住的,但是如果RN中的cache住了,数据不能放进HNF, 即系统一致性不保证;
□ 每个命令可能会导致RN本身的cacheline状态改变,也能导致其他RN中相同cacheline的状态改变;
□ 此处仅描述之前没有描述的命令;


■ ReadNoSnpSep
□ HN -> SN, 请求SN只返回dataresp; 
□ 每个命令,可以存在的attribute组合以及初始结束状态,参考协议;
□ 该命令是HN发送给SN,请求SN只发送data resp, 该datasepresp用来结束整个request;(关注RNF/HNF的执行时间)


Dataless transactions
有如下common的特性:
□ 响应不含data;
□ 可能会导致系统中数据的转移;
□ 可能会导致当前RN状态的转变;
□ 可能会导致其他RN状态的转变;


■ StashOnceUnique, StashOnceSepUnique
□ 知道某个CPU需要partial修改某条cacheline数据,当数据准备好时,RN(CPU或外设)用此请求通知某个CPU去读取最新数据并获取Unique权限。
□ 当没有指定stash target时,数据将会cache在request completer(HNF);
Target RN会发出一个data pull的请求,该请求当作ReadUnique;
■ StashOnceShared, StashOnceSepShared
□ 访问snoopable的空间,将某个cacheline的数据送往taget RN, 不用获得unique权限;
□ 当没有指定stash target时,数据将会cache在request completer(HNF);
Target RN会发出一个data pull的请求,该请求当作ReadNotSharedDirty;

Cache Maintenance transactions
包含5类trans; 有如下common的特性:
RN/HN都要忽略掉comp响应中的resp field;
□ RN往HN,HN往SN发送CMO, 受BROADCASTPERSIST (BP) and BROADCASTCACHEMAINTENANCE (BCM) interface signals的控制;
□ CMO中cacheable/snpattr必须要有效;
□ 发送给HN的CMO请求中的memattr,在HN发送给SN时,必须继续保留;除非明确知道SN中只有normal mem, 此时可以将device mem改为normal mem;
Order field必须设置成0;
□ 必须等到之前的访问相同cacheline的trans,其allocate data到RN的操作都完成之后,才能发送CMO;
□ 在CMO访问没有完成之前,其他想要访问该cacheline,allocate data的请求不能够发送出来;
□ 允许completer不用带到write data之后,再发送persist resp, 例如,当completer不支持persistence特性,或者request发生了non-data err时,可以提前发送;
□ 当write要在cmo之前完成时,可以将cmo操作和write操作进行combine;

Persistent CMO handling at Home
略;

Deep Persistent CMO
略;

Write transactions
□ Write trans将数据从RN写入Completer, completer可能是下级cache, memory,peripheral; 
□ 可以是一致性的写,也可以是非一致性的;
□ 写操作必须设置对应的BE;
■ Non-CopyBack transactions
        □ 又称为immediate write;
        □ 这类写在操作之前,不需要先获得cacheline的写权限,或者将该cacheline缓存进来;
        □ 当RN不适用owo时,除了WriteNoSnpZero and WriteUniqueZero, 都可以使用DWT;
        □ RN->SN, WriteNoSnpZero and WriteUniqueZero不允许使用DWT;

CopyBack transactions
□ 作用:将一致性的数据从RN中写入下级cache或者mem;
□ 这类trans不需要去snoop其他agent;
□ Table 4-13 RN to HN Write request attribute values
□ Table 4-14 HN-F to SN-F Write request attribute values
□ Table 4-15 HN-I to SN-I Write request attribute values

Combined Write requests
□ 这类命令提供了一个能力,当write trans和cmo操作,都想要操作同一个cacheline时,且写操作需要在CMO操作前先执行时,使用;
□ 在RN/HN处,可以使用这类命令;
□ 表中列举了可以进行组合的场景:
        Table 4-17 Permitted combinations of Write and CMO for RN to HN requests
        Table 4-18 Permitted combinations of Write and CMO for HN to SN requests

Atomic transactions
□ 后续总结;

DVM transactions
□ 用作虚拟化地址映射替换;

Prefetch transaction
□ 用来从main memory中预取数据;
■ PrefetchTgt
        □ RN直接访问SN的snoopable空间;
        □ 此请求不需要响应;
        □ 此请求可以用作SN预先从off-chip中获取数据,缓存住,下次读取时直接返回数据
        □ 此请求不能retry, rn可以在发送之后,尽快撤回;
        □ SN不能依赖于接收到相同地址的读之后,才能接收这个预取操作,这两个是独立的,不能相互等待;
        □ 该请求,SN可以内部消化掉,或者直接丢掉,不用通知RN;
        □ 从off-chip中将数据获取了之后,不能无限期的一直放在SN中等待RN发送读操作来取,这样会造成资源耗尽,从而死锁;
        □ 预取的某些域段不care,参考协议;

Snoop request types
Snp请求的生成有两类,一类是RN发送的trans产生的请求,一类是内部cache状态维护产生的
■ 除了snpDVMop,其他snp操作,都会操作RNF中的cache数据;
■ HN发送snoop需要满足如下准则:
        □ Snoop需要获得RN和其他被snoop的RN的cacheline状态;
        □ 避免丢弃被snoop的cache的dirty tag;
        □ 将non-forwarding snoop, 转换为等效的forwarding snop;
        □ Forwarding snoop只能送往一个RNF;
        □ Stash snoop,只能送往一个RNF;
        □ Non-snoopable的地址空间,也可以使用snoop;
各类snoop请求说明;
SnpOnceFwd, SnpOnce
        □ 用于获取某个cacheline最新的数据,最好不要改变被snop的RNF的cacheline的状态
■ SnpStashUnique
        □ 被snoop的人,获得当前cacheline的copy,并变成unique状态;
        □ 如果当前stash target中,已经有该cacheline的unique数据,那么对于StashOnceUnique来讲,可以不用再发送snpstashunique;
        □ 如果被snp的人,没有这条cacheline的copy, 则writeUniqueFullStash/ WriteUniquePtlStash命令接收后,可以去snoop对应的stash target;
        □ 被snoop的人,不用返回数据;
        □ Snoop resp可以带着data pull的信息返回;
        □ 该datapull信息被当作readUnique操作;
        □ 被snoop的人,其他cacheline状态不能改变;
■ SnpStashShared
        □ 被snoop的人,获得某个cacheline的copy, 同时状态为shared;
        □ 如果当前cacheline已经被要snoop的RNFcache住,则不用再发送snoop;
        □ 被snoop的人,不用返回数据;
        □ Snoop resp可以带着data pull的信息返回;
        □ 该datapull信息被当作ReadNotSharedDirty操作
        □ 被snoop的人,其他cacheline状态不能改变;
■ SnpCleanFwd, SnpClean

        □ 想要获得一份clean state的cacheline copy,其他人是shared状态(包含Ivalid状态);
■ SnpNotSharedDirtyFwd, SnpNotSharedDirty
        □ 想要获得一份sharedclean state的cacheline copy,其他人是shared状态;
■ SnpSharedFwd, SnpShared
        □ 想要获得一份shared state的cacheline copy,其他人是shared状态
SnpUniqueFwd, SnpUnique
        □ 想要获得一份unique state的cacheline copy,其他人是invalid状态
■ SnpPreferUniqueFwd, SnpPreferUnique
        □ 想要获得一份unique state的cacheline copy,其他人invalid(如果执行);
        □ HN使用这些snp,对应命令ReadPreferUnique
SnpUniqueStash
        □ 将被snoop的人对应的cache copy invalid掉,然后再次load对应的cacheline到stash target,同时状态为unique;
        □ Snoop resp可以携带date pull;
        □ Data pull当作readunique处理;
SnpCleanShared
        □ 被snoop的人,其dirty状态被改变,变成clean shared/invalid;
SnpCleanInvalid
        □ 被snoop的人,全部变成invalid, dirty的数据需要返回给RN;
        □ HNF可以自己产生该命令,不需要RN发起请求;
SnpMakeInvalid
        □ 被snoop的人,dirty的数据丢弃,变成invalid的状态;
SnpMakeInvalidStash
        □ 先将所有被snoop的人都makeinvalid, 然后stash target获得unique的cache copy;
        □ Stash target允许返回的snoop resp包含data pull;
        □ Data pull被当作readunique;
SnpQuery
        □ 类似查询功能,用来查询对应RN中,某条cacheline的状态;
        □ HNF可以自己发送该命令,不需要有RN发送的命令;
        □ Snoop的RNF, 必须返回当前cacheline的精确状态;
        □ 不能返回数据;
        □ 不能改变被snoop的人的状态;
SnpDVMOp
        □ 一般在MN生成,用来snp涉及虚拟化地址的RN;
        □ 一个DVMOp, 产生两个SNP;

Request transactions and corresponding Snoop requests
□ 对于一个请求,HN可以选择多个对应的snoop type;
□ HN到底选择哪个snp, 取决于发起请求的RN想要什么cacheline状态,以及被snp的RN需要什么状态;
Number of snoops to send
□ HN究竟要发送多少个snp, 即要给哪些RN发送snp,取决于具体的行为:
□ 例如,invalid, 就需要给所有的RN 发送snp invalid操作;
□ 对于non-invalid的snp, 
        □ 只需要发送给包含该cahcline copy的RN;
        □ 必须要能够获取dirty的copy, 即HN要获得该dirty的数据;
□ 对于stash的写,HN必须发送invalid snoop给所有包含该cacheline copy的,non-stash target de RN;
• For WriteUniqueFullStash, the expected snoop to Non-stash target nodes is SnpMakeInvalid. 
• For WriteUniquePtlStash, the expected snoop to Non-stash target nodes is SnpCleanInvalid.
□ 上述这些信息,可以记录在SF中,这个协议不强制实现;
■ Selection of snoop to send
□ Table 4-24 Expected snoop requests per Request from an RN
□ Interconnect有如下的一些特性:
        □ HNF中可以实现SF或者directory来跟踪每条cacheline在各个RNF中的state; 这个sf可以详细到,每个RNF中的状态都记录,也可以粗略到,只知道这条cacheline在其中一个RNF中,不知道具体是谁
SF的实现,可以让HN不发送不必要的SNP;
        □ 例如,如果HNF已经知道某个RNF中的cacheline已经是想要的状态,就没必要再发送snp去改变其状态;
□ HN在响应WriteUniqueFull, WriteUniqueFullStash, MakeUnique, and MakeInvalid命令,在如下场景下,可以使用SnpMakeInvalid
        □ The transaction TagOp value is Update
        □ The interconnect can determine that the Snoopee does not hold Dirty tags.
HN在响应MakeReadUnique, 在如下之一的场景下,可以使用SnpMakeInvalid
        □ 发起请求的RN本身就有其copy, 且被snp的人没有dirty的tag;
        □ 发起请求的RN没有其copy, 且被snp的人没有dirty的tag;
□ HN本身可以自己产生snoop, like SnpUnique or SnpCleanInvalid;
□ HN可以在命令对应的允许的几个snp中选择一个发送;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值