快取( 二 )


快取

文章插图
数据快取写入当硬碟接到写入数据的指令之后,并不会马上将数据写入到碟片上,而是先暂时存储在快取里,然后传送一个“数据已写入”的信号给系统,这时系统就会认为数据已经写入,并继续执行下面的工作,而硬碟则在空闲(不进行读取或写入的时候)时再将快取中的数据写入到碟片上 。虽然对于写入数据的性能有一定提升,但也不可避免地带来了安全隐患——数据还在快取里的时候突然掉电,那幺这些数据就会丢失 。对于这个问题,硬碟厂商们自然也有解决办法:掉电时,磁头会藉助惯性将快取中的数据写入零磁轨以外的暂存区域,等到下次启动时再将这些数据写入目的地 。临时存储有时候,某些数据是会经常需要访问的,像硬碟内部的快取(暂存器的一种)会将读取比较频繁的一些数据存储在快取中,再次读取时就可以直接从快取中直接传输 。快取就像是一台计算机的记忆体一样,在硬碟读写数据时,负责数据的存储、寄放等功能 。这样一来,不仅可以大大减少数据读写的时间以提高硬碟的使用效率 。同时利用快取还可以让硬碟减少频繁的读写,让硬碟更加安静,更加省电 。更大的硬碟快取,你将读取游戏时更快,拷贝档案时候更快,在系统启动中更为领先 。快取容量的大小不同品牌、不同型号的产品各不相同,早期的硬碟快取基本都很小,只有几百KB,已无法满足用户的需求 。16MB和32MB快取是现今主流硬碟所採用,而在伺服器或特殊套用领域中还有快取容量更大的产品,甚至达到了64MB、128MB等 。大容量的快取虽然可以在硬碟进行读写工作状态下,让更多的数据存储在快取中,以提高硬碟的访问速率,但并不意味着快取越大就越出众 。快取的套用存在一个算法的问题,即便快取容量很大,而没有一个高效率的算法,那将导致套用中快取数据的命中率偏低,无法有效发挥出大容量快取的优势 。算法是和快取容量相辅相成,大容量的快取需要更为有效率的算法,否则性能会大大折扣,从技术角度上说,高容量快取的算法是直接影响到硬碟性能发挥的重要因素 。更大容量快取是未来硬碟发展的必然趋势 。
快取

文章插图
硬碟快取技术发展最早先的CPU快取是个整体的,而且容量很低,英特尔公司从Pentium时代开始把快取进行了分类 。当时集成在CPU核心中的快取已不足以满足CPU的需求,而製造工艺上的限制又不能大幅度提高快取的容量 。因此出现了集成在与CPU同一块电路板上或主机板上的快取,此时就把 CPU核心集成的快取称为一级快取,而外部的称为二级快取 。一级快取中还分数据快取(Data Cache,D-Cache)和指令快取(Instruction Cache,I-Cache) 。二者分别用来存放数据和执行这些数据的指令,而且两者可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能 。英特尔公司在推出Pentium 4处理器时,用新增的一种一级追蹤快取替代指令快取,容量为12KμOps,表示能存储12K条微指令 。
快取

文章插图
快取集群的配置 随着CPU製造工艺的发展,二级快取也能轻易的集成在CPU核心中,容量也在逐年提升 。再用集成在CPU内部与否来定义一、二级快取,已不确切 。而且随着二级快取被集成入CPU核心中,以往二级快取与CPU大差距分频的情况也被改变,此时其以相同于主频的速率工作,可以为CPU提供更高的传输速率 。二级快取是CPU性能表现的关键之一,在CPU核心不变化的情况下,增加二级快取容量能使性能大幅度提高 。而同一核心的CPU高低端之分往往也是在二级快取上有差异,由此可见二级快取对于CPU的重要性 。CPU在快取中找到有用的数据被称为命中,当快取中没有CPU所需的数据时(这时称为未命中),CPU才访问记忆体 。从理论上讲,在一颗拥有二级快取的CPU中,读取一级快取的命中率为80% 。也就是说CPU一级快取中找到的有用数据占数据总量的80%,剩下的20%从二级快取中读取 。由于不能準确预测将要执行的数据,读取二级快取的命中率也在80%左右(从二级快取读到有用的数据占总数据的16%) 。那幺还有的数据就不得不从记忆体调用,但这已经是一个相当小的比例了 。较高端的CPU中,还会带有三级快取,它是为读取二级快取后未命中的数据设计的—种快取,在拥有三级快取的CPU中,只有约3%的数据需要从记忆体中调用,这进一步提高了CPU的效率 。为了保证CPU访问时有较高的命中率,快取中的内容应该按一定的算法替换 。一种较常用的算法是“最近最少使用算法”(LRU算法),它是将最近一段时间内最少被访问过的行淘汰出局 。因此需要为每行设定一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1 。当需要替换时淘汰行计数器计数值最大的数据行出局 。这是一种高效、科学的算法,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出快取,提高快取的利用率 。CPU产品中,一级快取的容量基本在4KB到64KB之间,二级快取的容量则分为128KB、256KB、512KB、1MB、2MB、4MB等 。一级快取容量各产品之间相差不大,而二级快取容量则是提高CPU性能的关键 。二级快取容量的提升是由CPU製造工艺所决定的,容量增大必然导致CPU内部电晶体数的增加,要在有限的CPU面积上集成更大的快取,对製造工艺的要求也就越高 。主流的CPU二级快取都在2MB左右,其中英特尔公司07年相继推出了台式机用的4MB、6MB二级快取的高性能CPU,不过价格也是相对比较高的,对于对配置要求不是太高的朋友,一般的2MB二级快取的双核CPU基本也可以满足日常上网需要了 。主要意义快取工作的原则,就是“引用的局部性”,这可以分为时间局部性和空间局部性 。空间局部性是指CPU在某一时刻需要某个数据,那幺很可能下一步就需要其附近的数据;时间局部性是指当某个数据被访问过一次之后,过不了多久时间就会被再一次访问 。对于应用程式而言,不管是指令流还是数据流都会出现引用的局部性现象 。