cache state讲的是属性,有这么些个属性,有点像软件定义的,跟硬件没啥关系,就是一纸协议。cacheline state呢,就有点硬了,这是要硬件实现滴。cacheline state都有哪些呢?
【我的理解就是把cache的状态属性组合起来描述一个实际的cacheLine状态】
- I: invalid,就是cache state的那个invalid的意思
- UC: Unique Clean
- UD: Unique Dirty
- UDP: Unique Partial Dirty
- SC: shared clean
- SD: shared Dirty
- UCE: Unique clean Empty
CHI用的cacheline state就是以上这几个。
举2个例子来详细说明下:
1)SC
CPU0读一个地址0x0010,数据0x1111,那L00里面就有这个数据,状态是UC。
CPU1也读这个地址,那L00和L01都有数据,状态就都是SC了!
2)UCE
假设现在CPU2要这个地址,但是不需要这个数据,为什么不需要这个数据呢,因为CPU2即将自己给这个地址赋值,那CPU2就申请说我的L02要这个地址是UCE的,然后要把CPU0和CPU1里面的这个地址的数据invalid掉。
此时CPU0和CPU1里面这个地址数据就Invalid了,而CPU2就是UCE!
为什么要这么搞?首先在SOC里面知道,CPU2要往地址0x0010这个地址写一个数据进去,L02里面必须要有这个地址的数据。所以如果没有UCE这个状态,CPU2就必须去把地址0x0010的数据读到自己的cache里面去,但CPU2知道他要改写这个地址,你读回来的数据我不用,读了就是浪费时间浪费带宽呀。所以就搞了这个UCE,我只要一个地址,我不需要读数据。
为啥说cacheline state是硬的呢?这些cacheline state怎么用呢?
这些cacheline state呢,是实实在在在芯片里面对每个地址每个cache记录下来的,记录在哪呢,记录在HN里面,称呼为目录结构“directory”。