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. 最短路 西北大学2019年春季校赛 ( 重现赛 ) 房间迷宫 求一个数的所有的约数nlogn

    题目:https://www.cometoj.com/contest/33/problem/G?problem_id=1461(密码:jwjtxdy) 学习一下 求一个数的约数 复杂度n*logn # ...

  2. java基础篇 之 final关键字

    ​ final,字面上是最终的意思,通常来说,我们用它来作为修饰符的时候,都是代表"这是无法改变的"的意思.不想改变可能出与两种理由:设计或效率.由于这两个原因相差甚远,所以我们在 ...

  3. 201771010113 李婷华 《面向对象程序设计(Java)》第十六周总结

    一.理论知识部分 1.程序是一段静态的代码,它应用程序执行蓝 是一段静态的代码,它应用程序执行蓝 是一段静态的代码,它应用程序执行蓝本. 2.进程是程序的一次动态执行,它对应了从代码加载.执行至执行完 ...

  4. Android广播机制(2)

    目录 发送自定义广播 发送标准广播 步骤 跨进程广播 步骤 发送有序广播 使用本地广播 实例 本地广播的优势 发送自定义广播 发送标准广播 步骤 1.定义一个广播接收器来接收此广播,新建MyBroad ...

  5. PMS学习

    一,PMS的adb相关重要指令 1,adb shell dumpsys package(dump所有的系统内apk信息) 2,adb shell dumpsys package “com.androi ...

  6. ql的python学习之路-day14

    前言:本节主要学习时间模块time.datetime python中的几种时间表示:1)时间戳  2)格式化的字符串时间 3)struct_time元组格式的时间 time.datetime模块源码: ...

  7. Python 常用编码规范

    一.简明概述 1.编码 如无特殊情况, 文件一律使用 UTF-8 编码 如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标识 2.代码格式 2.1.缩进 统一使用 4 个空格进行 ...

  8. Java IO流基础总结

    前言 好久不用Java的IO流,把好多的基础知识都忘了,昨天在写一段代码,发现好多细节都忘了.那天在组织组内代码评审的时候,发现有人在乱用IO流相关的类,所以还是写篇文章,把这个知识点总结一下. IO ...

  9. vue组件试错

    [Vue warn]: Property or method "child1" is not defined on the instance but referenced duri ...

  10. python3.x 基础二:内置函数

    自带的函数可以非常简单快捷的实现某些功能, 比如产生一个序列,可以用循环实现: count = 0 while count < 10: print(count) count+=1 但其实用ran ...