CACHE,CACHE,CACHE
作者: 陆麟
转载请征得作者同意.
2004.7.19
这次要讲的CACHE, 是在系统主存以外的存储区域. 而不是OS通过某种算法将RAM划分1片出来保存其他慢速设备的CACHE.
我们知道, 现在的CPU动不动就是多少个G的频率. 很是强悍. 但是. 系统主存, 通常是SDRAM/DDR RAM的运作频率是133MHz. 而133MHz的时钟周期不是1个周期完成1次读写的.
因此,现在PC用的CPU, 在内部就设计了存储区域. 存储区域的命中率高低则在很大程度上决定系统运作的快慢. 1次CACHE命中可以减少N个RAM
BUS周期. 性能提高是成倍的. 话分2面, 如果每次都不命中CACHE, 那效率要比索性没有CACHE还要糟糕. 因为CACHE的INVALIDATE和RELOAD也要花费CPU时间的.
这边介绍一下一些CACHE的知识.
L3 CACHE. 这种CACHE只在少数类型的P4上出现. 通常是XEON--所谓的至强处理器上出现. 在L3 CACHE上的数据读写, 要比主存上的读写快点.
但是比其他CACHE慢点.
L2 CACHE. 如果有的话通常比L3 CACHE小. 我想不出什么情况下会需要L3 CACHE和L2 CACHE一样大. 甚至L2 CACHE比L3
CACHE大. mmmm. 速度么自然比L3 CACHE快点. 保存的是DATA和CODE.
L1 CACHE. 最常用的数据就被保存到这里. 注意, P4和XEON只有DATA, 没有CODE的CACHE. 而PENTIUM M和其他CPU就有CODE
L1 CACHE.
TRACE CACHE. 指令被分解成所谓的micro ops, 被解码的指令就保存在这里. P4和XEON CPU有, 其他CPU没有实现.
TLB. 虚拟地址和物理地址转换用的CACHE.
另外还有Write Buffer和Write Combining Buffer, 针对写操作的CACHE. 略过.
有了CACHE. 数据和主存/其他内存(设备上的RAM区域,比如, 显卡带有一些存储器,可映射到系统地址空间)的一致性就需要通过某种规范来保持一致.
CPU需要一些资料来确定CACHE应当如何被处理. 如果没有这些资料, 一个DMA设备修改了内存中的数据, CPU就无法刷新新的信息, 轻则数据丢失,
重则系统崩溃. 总之, 没有办法让CPU知道何时该如何控制CACHE的话, 那片CPU就不存在实用性. CPU上因此设计了一些可编程的BIT. 下面就说一点相关信息.
CD--cache disable, CR0的bit 30, 如果这BIT设1, 一切CACHE全部关闭.
NW--No writeback, CR0的bit29,这个BIT设定为1, WRITEBACK机制就被关闭.
PCD--Page Cache Disable,CR3/PDE/PTE中都有这个BIT. 调节页面范围的CACHE.
G--这个BIT在P4,XEON,P6 CPU上出现. 用来标志"我这个页面是全局范围的", 让TLB可以做点优化.
PGE--Page Global Enable, 就是这个BIT, 在CR4中, 表名上门的G标志是否有效.
MTRRs--Memory Type Range Registers, 标识某片区域的内存的类型.
PAT--Page Attribute Table. P3/P4处理器用他结合PCD和PWT位选择PAT表的特定项.
PWT--Page Write Through. CR3/PDE/PTE中都有这个BIT. 控制Write-Through策略.
3rd level cache Disable, 这个条目没有简写, 是MSR--IA32_MISC_ENABLE_MSR的BIT6. 用于控制L3
CACHE.
挖哈哈, 这么多的CACHE项目说下来, 你有没有晕头啊, 有? 那就对了. 至于怎么理解怎么用, 待我心情好了再来写过. :DDDD