diff --git a/_config.yml b/_config.yml index 3fd454a..69ab998 100644 --- a/_config.yml +++ b/_config.yml @@ -154,7 +154,6 @@ paginate: 10 baseurl: "" # ------------ The following options are not recommended to be modified ------------------ - kramdown: footnote_backlink: "↩︎" syntax_highlighter: rouge diff --git "a/_posts/\345\215\217\350\256\256\347\261\273/2024-10-20-CHI.md" "b/_posts/\345\215\217\350\256\256\347\261\273/2024-10-20-CHI.md" index 47614b8..23cf293 100644 --- "a/_posts/\345\215\217\350\256\256\347\261\273/2024-10-20-CHI.md" +++ "b/_posts/\345\215\217\350\256\256\347\261\273/2024-10-20-CHI.md" @@ -10,6 +10,9 @@ img_path: /assets/img/chi/ ## overall +[CHI的几个重要概念](https://mp.weixin.qq.com/s/JK9f90-1E6xQhOE8GWQ9vg) + + Core 未命中读路径最典型的 Flow: @@ -90,25 +93,43 @@ cache line 被定义为大小为 64 字节的以 64 字节对齐的存储器区 ![DWT]({{ page.img_path }}DWT.png){: width="972" height="589" } -## **chap2 Transactions分类** + + + + + + + + + + + + + + +## **chap4 一致性协议** > 个人认为这里用到的时候查阅就可以了 {: .prompt-tip} -### 3.1 **Read** -1.Requester会获得一个数据响应; - -2.会导致数据在系统其它agents之间的搬移; +下面是request types--各种transactions -3.会导致Request中cacheline状态的改变; +### 4.2.1 **Read transactions** +有以下特性: -4.会导致系统中其它Requesters的 cacheline状态改变, +- 1.Requester会获得一个数据响应; +- 2.会导致数据在系统其它agents之间的搬移; +- 3.会导致Request中cacheline状态的改变; +- 4.会导致系统中其它Requesters的 cacheline状态改变, read类型的操作分为两类,non-allocating read 和allocating read ![read_class]({{ page.img_path }}read_class.png){: width="972" height="589" } -#### 3.1.1 **non-allocating read** +#### 4.2.1.1 **non-allocating read** + +![read_noalloc]({{ page.img_path }}read_noalloc.png){: width="972" height="589" } +
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" } +
non-allocating read

 | read supporting transactions  | description                      |
 |---------|------------------------------|
 | **ReadClean** | 
  • 此类命令只能接收 cacheline 状态为 UC/SC 的数据,即不能接收 dirty 的数据;
  • 一般用于,当某个 RNF 不具备将 dirty 的数据写入内存的能力时,会使用这种命令;
  • 也就是说,当前这个 RNF 的 cache 的写回策略是 write through,所以只能支持 clean 态;
  • ReadClean 触发的 snpclean,会将其他 RNF 中的 dirty 的数据写入主存,然后将 clean 的数据返回给发起 ReadClean 的 RNF;
  • 允许的初始状态: (根据 tagop 做区分)所有状态都可以发送该命令
  • 响应返回后的状态:UC/SC;
  • 被 SNP 的 RNF, SNP 后的状态: I/SC/ SD
| @@ -127,8 +154,10 @@ read类型的操作分为两类,non-allocating read 和allocating read |**ReadUnique** |
  • RN 想要写非完成的 cacheline,所以先要获得最新的数据和写(unique)的权限,接着进行 partial 的写并与最新的数据 merge;
  • 访问的是 snoopable 的地址空间;
  • 初始状态建议最好是 I/SC/SD,但是也允许在 UC/UD/UDP/UCE 时发送;
  • 命令完成后状态,只能是 UC/UD。
| | ReadPreferUnique |
  • 访问的是 snoopable 的空间,想要获得一个 unique 的 cacheline;
  • 使用场景上,发送此命令,是希望获得 unique 状态,但是如果不是 unique 的,也允许;
  • 发送该命令时,其他 RN 正在对这个地址进行 exclusive 的访问,此时返回的状态是 shared;
  • 允许返回的状态一直是 shared;
  • 此命令主要是用来提高 exclusive 访问的效率,具体提升点在 exclusive 访问处描述。
| | MakeReadUnique |
  • 访问 snoopable 的空间,想要获取该 cacheline 的 unique 状态;
  • 典型使用场景是当前 RN 有该 cacheline 的 shared copy,想要获得写该 cacheline 的权限;
  • 此命令分为 exclusive/非 exclusive 两种。
| +
-### 3.2 Dataless +### 4.2.2 Dataless transactions +有以下特性 diff --git "a/assets/img/chi/CHI\345\215\217\350\256\256\346\246\202\350\277\2602.pdf" "b/assets/img/chi/CHI\345\215\217\350\256\256\346\246\202\350\277\2602.pdf" new file mode 100644 index 0000000..eaf7327 Binary files /dev/null and "b/assets/img/chi/CHI\345\215\217\350\256\256\346\246\202\350\277\2602.pdf" differ diff --git a/assets/img/chi/read_alloc1.png b/assets/img/chi/read_alloc1.png new file mode 100644 index 0000000..b7ed619 Binary files /dev/null and b/assets/img/chi/read_alloc1.png differ diff --git a/assets/img/chi/read_alloc2.png b/assets/img/chi/read_alloc2.png new file mode 100644 index 0000000..756ef92 Binary files /dev/null and b/assets/img/chi/read_alloc2.png differ diff --git a/assets/img/chi/read_noalloc.png b/assets/img/chi/read_noalloc.png new file mode 100644 index 0000000..4e1a896 Binary files /dev/null and b/assets/img/chi/read_noalloc.png differ