non-allocating read
| read supporting transactions | description |
|---------|------------------------------|
| **ReadNoSnp** | - RN请求去Non—snoopable address region获取数据
- 不需要snoop其它RN或者HN访问任意空间
|
@@ -116,9 +137,15 @@ read类型的操作分为两类,non-allocating read 和allocating read
| **ReadOnce** | - 该命令访问的是snoopable空间,用以获取一份数据,但是该数据不会在当前的RN中缓存
- 也就是说,只是用一下该地址的数据;无需allocate到本地私有cache.
|
| **ReadOnceCleaninvalid** | - 访问的是snoopable的地址空间;获取该地址的数据
- 建议其他拥有该地址copy的RN,其状态变成invalid,但不是强制的
- 如果dirty的cacheline被invalid了,需要将数据写入主存
- 当application想要该地址的数据仍然是有效的,但是近期又不使用的时候,可以使用该命令,而不是readonce/readoncemakeinvalid
- 此命令可以提高cache效率,因为其主动将近期不使用的cache line从cache中invalid掉;
- 此命令不能代替CMO (Cache Maintenance Operation)操作,因为它不保证所有的cachline都变成了invalid;
- 由于这个命令会导致cache line的invalid,因此,当系统中有其他人在使用exclusive访问时,需要小心。
|
|**ReadOnceMakelnvalid**|- 访问的是 snoopable 的地址空间;获取该地址的数据;
- 建议其他拥有该地址副本的 RN,其状态变成 invalid,但是不是强制的;
- 如果 dirty 的 cache line 被 invalid 了,则直接丢弃数据;
- 当 application 知道后续这个地址的数据不再使用,即不再需要该最新数据之后,可以发送该命令;
- 此种命令在上述场景下,减少了 writeback 数据到 DDR 的带宽和时间;
- 此命令不能代替 CMO(Cache Maintenance Operation)操作,因为它不保证所有的 cache line 都变成了 invalid;
- 由于这个命令会导致 cache line 的 invalid,因此,当系统中有其他人在使用 exclusive 访问时,需要小心;
- 此命令必须保证,在返回响应之前,先将该 cache line invalid 掉,并且在这个时刻点之后的所有写,都不受此次 invalid 的影响。
+
+
+
+#### 4.2.1.2 **allocating read**
-#### 3.1.2 **allocating read**
+![read_alloc1]({{ page.img_path }}read_alloc1.png){: width="972" height="589" }
+![read_alloc2]({{ page.img_path }}read_alloc2.png){: width="972" height="589" }
+