https://mp.weixin.qq.com/s/Dyb1XipJtdhGa9mktXXjCg

 
简单介绍Metadata的实现。
 
 
1. 基本介绍
 
Metadata是一个Bundle,即数据结构或者说变量类型。其中存放着Cache的状态,并且跟踪命令执行后状态的变化情况。
 
2. ClientStates
 
定义Client状态相关的方法:
 
1) Cache相关状态
 
Cache节点的状态,是Nothing/Branch/Trunk/Dirty:
 
2) 权限判断
 
a. hasReadPermission:是否具有读权限;
b. hasWritePermission:是否具有写权限;
 
3. MemoryOpCategories
 
定义内存操作的类别:
 
1) 类别
 
用来定义操作的写相关的信息,是一个元组:
a. 是否真要写;
b. 是否想要写;
 
2) 三类
 
a. wr:Write,写操作;
b. wi:Write Intent,意图要写;
c. rd:Read,读操作;
 
3) 分类
 
 
判断命令的类别:
 
4. ClientMetadata
 
ClientMetadata是一个Bundle,即是一个数据结构,其中存放了实际的状态信息:
 
1) 相等判断
 
 
2) 是否存在缓存内容
 
 
3) growStarter
 
根据命令的分类和现在的状态,来确定是否命中和下一个状态:
 
首先对命令进行分类,其次在查找表中进行查找。
 
1) 命令命中Cache的情况
 
返回是否命中即元组的第一个参数为true。
 
A. 命令分类为读取rd
 
读取之后状态不变:
 
B. 命令分类为想写wi
 
想写但没有写,状态不变:
 
另外,Branch状态只可读而不可写,所以这里只有Trunk/Dirty两种状态。
 
C. 命令分类为要写wr
 
写了之后就变为了Dirty状态:
 
2) 命令未命中Cache的情况
 
返回是否命中即元组的第一个参数为false。
 
A. 命令分类为读取rd
 
读取之后,状态从Nothing变为了Branch:
 
B. 命令分类为想写wi
 
想写需要变为Trank状态:
 
C. 命令分类为要写wr
 
真写亦需变为Trunk状态:
 
4) growFinisher
 
第一个参数是命令;第二个参数是Grant的param域的值。
 
Grant的param是Cap即赋能的意思:
 
a. 若要读,可以toB/toT;读不改变状态;
b. 若要写,只能toT,想要写也不改变状态;
c. 若真写,只能toT,真写改变状态为Dirty,包含脏数据;
 
5) onAccess
 
判断当前权限是否能满足访问请求:
 
6) onSecondaryAccess
 
连续处理两条命令的情况:
a. needs_second_acq:第二条命令是否需要先执行Acquire操作获取权限;这里的定义是如果第一条命令不是WriteIntent,而第二条命令是WriteIntent,则需要。命令的分类只有读写两种,第二条命令不是写便是读,第一条命令也是这样。所以若第二条命令是读,经过第一条命令之后,就不需要再额外获取权限。
b. hit_again:当前权限能够满足两条命令的需要;
c. dirties:第二条命令是否要立即写;
d. biggest_grow_param:获取到的最大权限;
e. dirtiest_state:确定要获取的最大权限;因为growStarter返回的第二个值既可能是下一个状态(命中),也可能是要赋权的参数(未命中),所以这里的dirtiest_state需要结合needs_second_acq和hit_again两个的值使用;
f. dirtiest_cmd:哪一条命令获取的最大权限;
 
7) onGrant
 
命令触发Grant之后的状态:
 
8) shrinkHelper
 
Probe操作降权后的状态:
举例:
Probe赋权为toN,当前状态为Dirty;返回值为:
a. hasDirtyData:true,包含脏数据;
b. resp:权限从Trunk降为Nothing,即TtoN;
c. next:下一个状态为Nothing;
 
9) cmdToPermCap
 
把命令转换为要赋予的权限:
 
10) onCacheControl
 
返回Cache控制命令的处理情况:
 
11) onProbe
 
返回Probe消息的处理情况:
 

Rocket - tilelink - Metadata的更多相关文章

  1. Rocket - tilelink - RegisterRouter

    https://mp.weixin.qq.com/s/DaJhf7hEoWsEi_AjwSrOfA   简单介绍RegisterRouter的实现.   ​​   1. 基本介绍   实现挂在Tile ...

  2. Rocket - tilelink - Nodes

    https://mp.weixin.qq.com/s/KJ8pVH76rdxPOZ1vE3QlKA   简单介绍tilelink对Diplomacy Nodes的实现.   ​​   1. TLImp ...

  3. Rocket - tilelink - AsyncCrossing

    https://mp.weixin.qq.com/s/v8plWCBD8vZkxykjJe4TCg   介绍AsyncCrossing的实现,主要介绍如何实现diplomacy Node和LazyMo ...

  4. Rocket - tilelink - mask

    https://mp.weixin.qq.com/s/Gqv09RIgSSg5VKe-wb4aGg   讨论tilelink中使用MaskGen生成mask的用法.   1. tilelink中的ma ...

  5. Rocket - tilelink - Parameters

    https://mp.weixin.qq.com/s/1I6DcONr0Mg7xiX8F1C7SQ   简单介绍TileLink相关的参数实现(具体问题暂时不展开,后续用到时再做分析).   ​​   ...

  6. Rocket - tilelink - Bundles

    https://mp.weixin.qq.com/s/jrqBg2AIpQogBrpwNXjmwg   简单介绍Bundles文件中对TileLink规范(1.7.1)的定义. 参考链接:https: ...

  7. Rocket - tilelink - TLBusWrapper.to

    https://mp.weixin.qq.com/s/jSnhBzU5_ayQCg5fWAcx-g 简单介绍TLBusWrapper.to()的实现.主要介绍确定this{...}对应代码的过程. 1 ...

  8. Rocket - tilelink - BusWrapper

    https://mp.weixin.qq.com/s/03BvgTNQtD75Guco6gUGQg   简单介绍BusWrapper的实现.   1. HasTLBusParams   定义SoC的挂 ...

  9. Rocket - tilelink - Xbar

    https://mp.weixin.qq.com/s/UXFHYEQaYotWNEhshro68Q   简单介绍Xbar的实现.   ​​   1. 基本介绍   用于为Xbar的输入和输出连接生成内 ...

随机推荐

  1. A. Powered Addition(二进制性质-思维)

    \(拿样例来看1 7 6 5\) \(6成长到7是最合理的,因为1s就可以实现而且对于后面来说最优\) \(5成长到7是最合理的,因为2s就可以实现而且对于后面最优\) \(发现了什么?二进制是可以组 ...

  2. CC2530通用IO口的输入输出

    一.引脚概述 CC2530有40 个引脚.其中,有21个数字I/O端口,其中P0和P1是8 位端口,P2仅有5位可以使用.P2端口的5个引脚中,有2个需要用作仿真,有2个需要用作晶振.所以可供我们使用 ...

  3. SpringCloud (一) :微服务架构

    什么是微服务架构 简而言之,微服务架构风格就是将单一应用的开发分为多个小的服务,每个小的服务在自己的进程中运行并使用轻量级机制进行通信(通常是一个HTTP API源),这些服务围绕业务性能进行构建,并 ...

  4. Java for 嵌套循环

    嵌套循环 可以是for循环 while循环也可以是do-while循环  这三着进行组合嵌套 循环思路:先执行外层循环,内层循环作为外层循环的循环体,直到内层循环执行完毕,再次计算外层循环,根据条件决 ...

  5. MySQL 入门(3):事务隔离

    摘要 在这一篇内容中,我将从事务是什么开始,聊一聊事务的必要性. 然后,介绍一下在InnoDB中,四种不同级别的事务隔离,能解决什么问题,以及会带来什么问题. 最后,我会介绍一下InnoDB解决高并发 ...

  6. 【Hadoop离线基础总结】关键路径转化率分析(漏斗模型)

    关键路径转化 需求 在一条指定的业务流程中,各个步骤的完成人数及相对上一个步骤的百分比 模型设计 定义好业务流程中的页面标识 Step1. /item Step2. /category Step3. ...

  7. Day_12【集合】扩展案例2_键盘录入一个字符串,对其进行去重,并将去重后的字符串组成新数组

    需求分析:键盘读取一行输入,去掉其中重复字符, 打印出不同的那些字符 思路: 1.键盘录入字符串 2.遍历字符串,将每个字符存储到集合中 3.将集合中重复的字符去掉 4.创建新集合,遍历老集合,获取老 ...

  8. 【matlab系列汇总】小白博主的matlab学习实战快速进阶之路(持续更新)

    我把之前在学习和工作中使用matlab的技巧和使用教程等相关整理到这里,方便查阅学习,如果能帮助到您,请帮忙点个赞: MATLAB可以进行矩阵运算.绘制函数和数据.实现算法.创建用户界面.连接其他编程 ...

  9. ubuntu上lib-ace库安装编译

    描述下本人电脑情况: 虚拟机版本:VMware-workstation-full-v7.1.4: ACE版本:ACE6.0.0 虚拟机[Linux](http://lib.csdn.net/base/ ...

  10. 使用PXE+Kickstart无人值守安装服务

    一.      配置DHCP服务程序 1)      按照图在虚拟机的虚拟网络编辑器中关闭自身的DHCP服务. 2)      当挂载好光盘镜像并把Yum仓库文件配置妥当后,就可以安装DHCP服务程序 ...