stash flow
The Stash transactions are:
• WriteUniquePtlStash
• WriteUniqueFullStash
• StashOnceUnique
• StashOnceShared
• StashOnceSepUnique
• StashOnceSepShared
- 对于home node来讲,允许ignore任何的stash request,并且不做任何的stash snoop;
- 被snoop的node, 允许忽略stash request, 同时不发出data pull请求来完成trans;
- StashOnceSepUnique and StashOnceSepShared既可以由分开的stashDone resp, 或者combined CompStashDone resp;
StashOnceUnique, StashOnceSepUnique
- 往一个snoopable的地址空间,发送的请求,用来将对应地址的cacheline,pass to targeted cache, 同时让对应的targeted cache存储该cacheline;
- 这里通过Node ID和LPID来指定,需要缓存cacheline的request Node;
- 如果valid target没有指定,则对应的cacheline可以由request completer缓存;
- 从target Request Node发出的Data Pull, 当作ReadNotSharedDirty处理;
- 初始状态:
- 最终状态
- 对应的snp请求
- 状态转换如下:
StashOnceShared, StashOnceSepShared
- Request to a Snoopable address region to attempt to move the addressed cache line to a targeted cache.
- 这里通过Node ID和LPID来指定,需要缓存cacheline的request Node;
- 如果valid target没有指定,则对应的cacheline可以由request completer缓存;
- 从target Request Node发出的Data Pull, 当作ReadNotSharedDirty处理;
- 初始状态:
- 最终状态:
- 对应的snp命令:
- 状态转换关系:
- 对应的流程图:
WriteUniquePtlStash,WriteUniqueFullStash
- 往snoopable的地址空间写数据;
- 当requester处的状态为invalid时,最多写入一个cacheline的数据到下一级cache或者memory;
- 同样,此命令也会携带对应的stash target node来获取对应的cacheline;
- 初始状态:
- 对应的snp请求
- 状态转换如下所示:
- 对应的snoop请求:
- 可能的请求flow如下: