缓存(cache),原始意义是指访问速度比一般
随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用
DRAM技术,而使用昂贵但较快速的
SRAM技术。缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。
简介
缓存是指可以进行高速
数据交换的
存储器,它先于
内存与
CPU交换数据,因此
速率很快。L1 Cache(
一级缓存)是CPU第一层
高速缓存。内置的
L1高速缓存的容量和结构对CPU的性能影响较大,不过
高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。一般L1缓存的容量通常在32—256KB。L2 Cache(
二级缓存)是CPU的第二层
高速缓存,分内部和外部两种芯片。内部的芯片
二级缓存运行
速率与
主频相同,而外部的二级缓存则只有主频的一半。L2
高速缓存容量也会影响CPU的性能,原则是越大越好,普通
台式机CPU的L2缓存一般为128KB到2MB或者更高,笔记本、
服务器和
工作站上用CPU的
L2高速缓存最高可达1MB-3MB。由于高速缓存的速度越高价格也越贵,故有的计算机系统中设置了两级或
多级高速缓存。紧靠CPU的一级高速缓存的速度最高,而容量最小,二级高速缓存的容量稍大,速度也稍低。
缓存只是
内存中少部分
数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到
内存中去找
数据,这样系统的
速率就慢下来了,不过CPU会把这些数据复制到缓存中去,以便下一次不要再到内存中去取。随着时间的变化,被访问得最频繁的
数据不是一成不变的,也就是说,刚才还不频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的
数据,又不频繁了,所以说缓存中的数据要经常按照一定的
算法来更换,这样才能保证缓存中的数据是被访问最频繁的。
工作原理
缓存的工作原理是当CPU要读取一个
数据时,首先从
CPU缓存中查找,找到就立即读取并送给CPU处理;没有找到,就从速率相对较慢的
内存中读取并送给CPU处理,同时把这个
数据所在的
数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的
数据90%都在CPU缓存中,只有大约10%需要从
内存读取。这大大节省了CPU直接读取
内存的时间,也使CPU读取
数据时基本无需等待。总的来说,CPU读取
数据的顺序是先缓存后
内存。
RAM(Random-Access Memory)和ROM(Read-Only Memory)相对的,RAM是掉电以后,其中的信息就消失那一种,ROM在掉电以后信息也不会消失那一种。RAM又分两种,一种是静态RAM,SRAM(Static RAM);一种是动态RAM,DRAM(Dynamic RAM)。前者的存储
速率要比后者快得多,使用的
内存一般都是动态RAM。为了增加系统的
速率,把缓存扩大就行了,扩的越大,缓存的
数据越多,系统就越快了,缓存通常都是静态RAM,速率是非常的快, 但是静态RAM
集成度低(存储相同的数据,静态RAM的
体积是动态RAM的6倍), 价格高(同容量的静态RAM是动态RAM的四倍), 由此可见,扩大静态RAM作为缓存是一个非常愚蠢的行为, 但是为了提高系统的性能和速率,必须要扩大缓存, 这样就有了一个折中的方法,不扩大原来的静态RAM缓存,而是增加一些高速动态RAM做为缓存, 这些高速动态RAM速率要比常规动态RAM快,但比原来的静态RAM缓存慢, 把原来的静态RAM缓存叫
一级缓存,而把后来增加的动态RAM叫
二级缓存。
功能作用
预读取
当
硬盘受到CPU指令控制开始读取
数据时,硬盘上的控制芯片会控制
磁头把正在读取的
簇的下一个或者几个簇中的数据读到缓存中(由于硬盘上数据存储时是比较连续的,所以读取命中率较高),当需要读取下一个或者几个簇中的数据的时候,硬盘则不需要再次读取数据,直接把缓存中的数据传输到
内存中就可以了,由于缓存的
速率远远高于磁头读写的速率,所以能够达到明显改善性能的目的。
写入
当
硬盘接到写入
数据的指令之后,并不会马上将数据写入到
盘片上,而是先暂时存储在缓存里,然后发送一个“数据已写入”的
信号给系统,这时系统就会认为数据已经写入,并继续执行下面的工作,而硬盘则在空闲(不进行读取或写入的时候)时再将缓存中的数据写入到盘片上。虽然对于写入
数据的性能有一定提升,但也不可避免地带来了
安全隐患——数据还在缓存里的时候突然掉电,那么这些数据就会丢失。对于这个问题,
硬盘厂商们自然也有解决办法:掉电时,
磁头会借助
惯性将缓存中的
数据写入
零磁道以外的暂存区域,等到下次启动时再将这些数据写入目的地。
临时存储
有时候,某些
数据是会经常需要访问的,像
硬盘内部的缓存(暂存器的一种)会将读取比较频繁的一些数据存储在缓存中,再次读取时就可以直接从缓存中直接传输。缓存就像是一台计算机的内存一样,在硬盘读写数据时,负责数据的存储、寄放等功能。这样一来,不仅可以大大减少数据读写的时间以提高硬盘的使用效率。同时利用缓存还可以让硬盘减少频繁的读写,让硬盘更加安静,更加省电。更大的硬盘缓存,你将读取游戏时更快,拷贝文件时候更快,在系统启动中更为领先。
缓存容量的大小不同
品牌、不同型号的产品各不相同,早期的
硬盘缓存基本都很小,只有几百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中,只有约5%的
数据需要从
内存中调用,这进一步提高了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基本也可以满足日常上网需要了。
2022年,新一代的奔腾处理器采用了与 12 代酷睿一样的 Intel 7 工艺,但没有大小核架构。参数方面,奔腾 G7400 为 2 核 4 线程,3.7GHz,6MB 三级缓存,46W TDP,支持 DDR4-3200 内存和 DDR5-4800 内存。核显为 UHD 710,16 EU 1.35GHz。
主要意义
缓存工作的原则,就是“引用的局部性”,这可以分为时间局部性和空间局部性。空间局部性是指CPU在某一时刻需要某个
数据,那么很可能下一步就需要其附近的数据;时间局部性是指当某个数据被访问过一次之后,过不了多久时间就会被再一次访问。对于
应用程序而言,不管是
指令流还是
数据流都会出现引用的局部性现象。
举个简单的例子,比如在播放DVD影片的时候,DVD
数据由一系列
字节组成,这个时候CPU会依次从头处理到尾地调用DVD数据,如果CPU这次读取DVD数据为1分30秒,那么下次读取的时候就会从1分31秒开始,因此这种情况下有序排列的数据都是依次被读入CPU进行处理。从
数据上来看,对于Word一类的应用程序通常都有着较好的空间局部性。用户在使用中不会一次打开7、8个文档,不会在其中某一个文档中打上几个词就换另一个。大多数用户都是打开一两个文档,然后就是长时间对它们进行处理而不会做其他事情。这样在
内存中的
数据都会集中在一个区域中,也就可以被CPU集中处理。
从程序代码上来考虑,设计者通常也会尽量避免出现程序的跳跃和分支,让CPU可以不中断地处理大块连续
数据。游戏、模拟和
多媒体处理程序通常都是这方面的代表,以小段代码连续处理大块
数据。不过在办公运用程序中,情况就不一样了。改动
字体,改变格式,
保存文档,都需要程序代码不同部分起作用,而用到的指令通常都不会在一个连续的区域中。于是CPU就不得不在
内存中不断跳来跳去寻找需要的代码。这也就意味着对于办公程序而言,需要较大的缓存来读入大多数经常使用的代码,把它们放在一个连续的区域中。如果缓存不够,就需要内存中的
数据,而如果缓存足够大的话,所有的代码都可以放入,也就可以获得最高的效率。同理,高端的
数据应用以及游戏应用则需要更高容量的缓存。
CPU缓存
CPU缓存(Cache Memory)是位于CPU与
内存之间的临时
存储器,它的容量比内存小的多但是交换
速率却比内存要快得多。缓存的出现主要是为了解决CPU运算速率与内存读写速率不匹配的矛盾,因为CPU运算速率要比
内存读写速率快很多,这样会使CPU花费很长时间等待
数据到来或把数据写入内存。在缓存中的
数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取
速率。由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个
内存储器(缓存+内存)就变成了既有缓存的高
速率,又有内存的大容量的
存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的
数据交换顺序和CPU与缓存间的
带宽引起的。
缓存基本上都是采用
SRAM存储器,SRAM是英文Static RAM的缩写,它是一种具有静态存取功能的存储器,不需要刷新电路即能保存它内部存储的
数据。不像DRAM
内存那样需要刷新电路,每隔一段时间,固定要对DRAM刷新充电一次,否则内部的
数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的
集成度较低,相同容量的DRAM内存可以设计为较小的
体积,但是SRAM却需要很大的体积,这也是不能将缓存容量做得太大的重要原因。它的特点归纳如下:优点是节能、
速率快、不必配合
内存刷新电路、可提高整体的工作效率,缺点是
集成度低、相同的容量
体积较大、而且价格较高,只能少量用于关键性系统以提高效率。
工作原理
1、读取顺序
CPU要读取一个数据时,首先从Cache中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从
内存中读取并送给CPU处理,同时把这个数据所在的
数据块调入Cache中,可以使得以后对整块数据的读取都从Cache中进行,不必再调用内存。
正是这样的读取机制使CPU读取Cache的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的
数据90%都在Cache中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先Cache后
内存。
2、缓存分类
Intel从Pentium开始将Cache分开,通常分为一级
高速缓存L1和二级高速缓存L2。在以往的观念中,L1 Cache是
集成在CPU中的,被称为片内Cache。在L1中还分
数据Cache(D-Cache)和指令Cache(I-Cache)。它们分别用来存放数据和执行这些数据的指令,而且两个Cache可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。
3、读取命中率
CPU在Cache中找到有用的数据被称为命中,当Cache中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有2级Cache的CPU中,读取L1 Cache的命中率为80%。也就是说CPU从L1 Cache中找到的有用数据占数据总量的80%,剩下的20%从L2 Cache读取。由于不能准确预测将要执行的
数据,读取L2的命中率也在80%左右(从L2读到有用的数据占总数据的16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。在一些高端领域的CPU(像Intel的Itanium)中,我们常听到L3 Cache,它是为读取L2 Cache后未命中的数据设计的—种Cache,在拥有L3 Cache的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。
一级缓存
一级缓存(Level 1 Cache)简称L1 Cache,位于CPU内核的旁边,是与CPU结合最为紧密的CPU缓存,也是历史上最早出现的CPU缓存。由于
一级缓存的技术难度和制造成本最高,提高容量所带来的技术难度增加和成本增加非常大,所带来的性能提升却不明显,性价比很低,而且现有的一级缓存的命中率已经很高,所以一级缓存是所有缓存中容量最小的,比
二级缓存要小得多。
一级缓存可以分为一级
数据缓存(Data Cache,D-Cache)和一级指令缓存(Instruction Cache,I-Cache)。二者分别用来存放
数据以及对执行这些数据的指令进行即时解码,而且两者可以同时被CPU访问,减少了争用
Cache所造成的冲突,提高了处理器效能。大多数CPU的一级
数据缓存和一级指令缓存具有相同的容量,例如
AMD的Athlon XP就具有64KB的一级数据缓存和64KB的一级指令缓存,其
一级缓存就以64KB+64KB来表示,其余的CPU的一级缓存表示方法以此类推。
Intel的采用NetBurst架构的CPU(最典型的就是
Pentium 4)的
一级缓存有点特殊,使用了新增加的一种一级追踪缓存(Execution Trace Cache,T-Cache或ETC)来替代一级指令缓存,容量为12KμOps,表示能存储12K条即12000条解码后的
微指令。一级追踪缓存与一级指令缓存的运行机制是不相同的,一级指令缓存只是对指令作即时的解码而并不会储存这些指令,而一级追踪缓存同样会将一些指令作解码,这些指令称为微指令(micro-ops),而这些微指令能储存在一级追踪缓存之内,无需每一次都作出
解码的程序,因此一级追踪缓存能有效地增加在高工作频率下对指令的解码能力,而μOps就是micro-ops,也就是微型操作的意思。它以很高的
速率将μops提供给
处理器核心。Intel NetBurst微型架构使用执行跟踪缓存,将
解码器从执行循环中分离出来。这个跟踪缓存以很高的带宽将uops提供给核心,从本质上适于充分利用
软件中的指令级并行机制。Intel并没有公布一级追踪缓存的实际容量,只知道一级追踪缓存能储存12000条微指令(micro-ops)。所以,不能简单地用微指令的数目来比较指令缓存的大小。实际上,单核心的NetBurst架构CPU使用8Kμops的缓存已经基本上够用了,多出的4kμops可以大大提高
缓存命中率。而要使用
超线程技术的话,12KμOps就会有些不够用,这就是为什么有时候Intel处理器在使用超线程技术时会导致性能下降的重要原因。例如
Northwood核心的
一级缓存为8KB+12KμOps,就表示其一级数据缓存为8KB,一级追踪缓存为12KμOps;而Prescott核心的一级缓存为16KB+12KμOps,就表示其一级数据缓存为16KB,一级追踪缓存为12KμOps。在这里12KμOps绝对不等于12KB,单位都不同,一个是μOps,一个是Byte(字节),而且二者的运行机制完全不同。所以那些把Intel的CPU
一级缓存简单相加,例如把
Northwood核心说成是20KB一级缓存,把Prescott核心说成是28KB一级缓存,并且据此认为
Intel处理器的一级缓存容量远远低于
AMD处理器128KB的一级缓存
容量的看法是完全错误的,二者不具有可比性。在架构有一定区别的CPU对比中,很多缓存已经难以找到对应的东西,即使类似名称的缓存在设计思路和功能定义上也有区别了,此时不能用简单的算术加法来进行对比;而在架构极为近似的CPU对比中,分别对比各种功能缓存大小才有一定的意义。
二级缓存
二级缓存(Level2
cache),它是处理器内部的一些缓冲
存储器,其作用跟
内存一样。上溯到上个世纪80年代,由于
处理器的运行
速率越来越快,慢慢地,处理器需要从
内存中读取
数据的速率需求就越来越高了。然而
内存的
速率提升速率却很
缓慢,而能高速读写
数据的内存价格又非常高昂,不能大量采用。从
性能价格比的角度出发,英特尔等处理器设计生产公司想到一个办法,就是用少量的高速
内存和大量的低速内存结合使用,共同为处理器提供
数据。这样就兼顾了性能和使用成本的最优。而那些高速的
内存因为是处于
cpu和内存之间的位置,又是临时存放
数据的地方,所以就叫做
缓冲存储器了,简称“缓存”。它的作用就像仓库中临时堆放货物的地方一样,货物从运输车辆上放下时临时堆放在缓存区中,然后再搬到内部存储区中长时间存放。货物在这段区域中存放的时间很短,就是一个临时货场。 最初缓存只有一级,后来处理器
速率又提升了,
一级缓存不够用了,于是就添加了
二级缓存。
二级缓存是比
一级缓存速率更慢,容量更大的
内存,主要就是做一级缓存和内存之间
数据临时交换的地方用。为了适应
速率更快的处理器p4ee,已经出现了三级缓存了,它的容量更大,速率相对
二级缓存也要慢一些,但是比
内存可快多了。 缓存的出现使得
cpu处理器的运行效率得到了大幅度的提升,这个区域中存放的都是cpu频繁要使用的
数据,所以缓存越大处理器效率就越高,同时由于缓存的
物理结构比
内存复杂很多,所以其成本也很高。
大量使用
二级缓存带来的结果是处理器运行效率的提升和成本价格的大幅度不等比提升。举个例子,
服务器上用的
至强处理器和普通的p4处理器其内核基本上是一样的,就是
二级缓存不同。至强的
二级缓存是2mb~16mb,p4的二级缓存是512kb,于是最便宜的至强也比最贵的p4贵,原因就在二级缓存不同。即l2
cache。由于l1级
高速缓存容量的限制,为了再次提高
cpu的
运算速率,在cpu外部放置一高速
存储器,即
二级缓存。工作
主频比较灵活,可与
cpu同频,也可不同。cpu在读取
数据时,先在l1中寻找,再从l2寻找,然后是
内存,在后是
外存储器。所以l2对系统的影响也不容忽视。
最早先的
cpu缓存是个整体的,而且容量很低,英特尔公司从pentium时代开始把缓存进行了分类。当时
集成在
cpu内核中的缓存已不足以满足
cpu的需求,而制造工艺上的限制又不能大幅度提高缓存的容量。因此出现了
集成在与cpu同一块电路板上或
主板上的缓存,此时就把
cpu内核集成的缓存称为一级缓存,而外部的称为二级缓存。随着
cpu制造工艺的发展,二级缓存也能轻易的
集成在
cpu内核中,容量也在逐年提升。再用
集成在cpu内部与否来定义一、二级缓存,已不确切。而且随着二级缓存被
集成入cpu内核中,以往二级缓存与cpu大差距分频的情况也被改变,此时其以相同于主频的速率工作,可以为cpu提供更高的传输速率。
三级缓存
L3 Cache(三级缓存),分为两种,早期的是外置,逐渐都变为内置的。而它的实际作用即是,L3缓存的应用可以进一步降低
内存延迟,同时提升
大数据量计算时处理器的性能。降低
内存延迟和提升
大数据量计算能力对游戏都很有帮助。而在
服务器领域增加L3缓存在性能方面仍然有显著的提升。比方具有较大L3缓存的配置利用
物理内存会更有效,故它比较慢的磁盘I/O子系统可以处理更多的
数据请求。具有较大L3缓存的处理器提供更有效的文件系统缓存行为及较短消息和处理器
队列长度。
其实最早的L3缓存被应用在AMD发布的K6-III处理器上,当时的L3缓存受限于制造工艺,并没有被
集成进芯片内部,而是集成在主板上。在只能够和
系统总线频率同步的L3缓存同主
内存其实差不了多少。后来使用L3缓存的是
英特尔为
服务器市场所推出的Itanium处理器。接着就是P4EE和至强MP。Intel还打算推出一款9MB L3缓存的Itanium2处理器,和以后24MB L3缓存的
双核心Itanium2处理器。
但基本上L3缓存对处理器的性能提高显得不是很重要,比方配备1MB L3缓存的Xeon MP处理器却仍然不是Opteron的对手,由此可见
前端总线的增加,要比缓存增加带来更有效的性能提升。
超级缓存
SuperCache,也就是超级缓存,计算机的速度瓶颈主要在于
机械硬盘的读写速度,SuperCache就是给
硬盘的读写用高速
内存来做缓存,是大内存机器的提速首选,
服务器的必备利器。
工作原理:对于
SuperCache而言,硬盘上没有文件的概念,只是用户指定大小的一个一个小格子,例如32k,硬盘上某个小格子里面的内容被读取了,则被缓存在
内存里面,下次还读这个小格子的时候,直接从内存读取,硬盘没有任何动作,从而达到了加速的目的。有两种缓存模式,1、MFU模式,每个小格子被读取的时候,做一个简单的计数,当缓存满的时候,计数值小的先被清出缓存;2、MRU模式,简单的队列,先进先出。
系统缓存
将CPU比作一个城里的家具厂,而将存储系统比作
郊区的木料厂,那么实际情况就是木料厂离家具厂越来越远,即使使用更大的
卡车来运送木料,家具厂也得停工来等待木料送来。在这样的情况下,一种解决方法是在市区建立一个小型
仓库,在里面放置一些家具厂最常用到的木料。这个仓库实际上就是家具厂的“Cache”,家具厂就可以从仓库不停的及时运送需要的木料。当然,仓库越大,存放的木料越多,效果就越好,因为这样即使是些不常用的东西也可以在仓库里找到。需要的
木料仓库里没有,就要从城外的木料厂里继续找,而家具厂就得等着了。仓库就相对于L1缓存,可以由CPU及时快速的读写,所以存储的是CPU最常用代码和
数据(后面会介绍一下如何挑选“最常用”)。L1缓存的
速率比
系统内存快的多是因为使用的是SRAM,这种内存单晶元使用四到六个
晶体管。这也使得SRAM的造价相当的高,所以不能拿来用在整个存储系统上。在大多数CPU上,L1缓存和核心一起在一块芯片上。在家具厂的例子中,就好比工厂和仓库在同一条街上。这样的设计使CPU可以从最近最快的地方得到
数据,但是也使得“城外的木料厂”到“仓库”和到“家具厂”的距离差不多远。这样CPU需要的
数据不在L1缓存中,也就是“Cache Miss”,从存储设备取数据就要很长时间了。处理器
速率越快,两者之间的差距就越大。使用Pentium4那样的高
频率处理器,从
内存中取得
数据就相当于“木料厂”位于另一个国家。
其实,缓存是CPU的一部分,它存在于CPU中 CPU存取
数据的
速率非常的快,一秒钟能够存取、处理十亿条指令和数据(术语:
CPU主频1G),而
内存就慢很多,快的内存能够达到几十兆就不错了,可见两者的速率差异是多么的大 缓存是为了解决CPU速率和
内存速率的速率差异问题 内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不经常到象“蜗牛”一样慢的内存中去取数据了,CPU只要到缓存中去取就行了,而缓存的速率要比内存快很多。
这里要特别指出的是:
1 因为缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数据,这样系统的速率就慢下来了,不过CPU会把这些数据复制到缓存中去,以便下一次不要再到内存中去取。
2 因为随着时间的变化,被访问得最频繁的数据不是一成不变的,也就是说,刚才还不频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的数据,后来又不频繁了,所以说缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据是被访问最频繁的。
3 关于
一级缓存和
二级缓存为了分清这两个概念,我们先了解一下RAM ram和ROM相对的,RAM是掉电以后,其中信息才消失的那一种,ROM是在掉电以后信息也不会消失的那一种。RAM又分两种: 一种是静态RAM、SRAM;一种是动态RAM、DRAM。
磁盘缓存
磁盘缓存分为读缓存和写缓存。读缓存是指,操作系统为已读取的文件
数据,在
内存较空闲的情况下留在内存空间中(这个内存空间被称之为“
内存池”),当下次软件或用户再次读取同一文件时就不必重新从
磁盘上读取,从而提高速率。写缓存实际上就是将要写入磁盘的
数据先保存于系统为写缓存分配的
内存空间中,当保存到内存池中的数据达到一个程度时,便将数据保存到
硬盘中。这样可以减少实际的磁盘操作,有效的保护磁盘免于重复的读写操作而导致的损坏,也能减少写入所需的时间。
根据
写入方式的不同,有写通式和回写式两种。写通式在读
硬盘数据时,系统先检查请求指令,看看所要的数据是否在缓存中,在的话就由缓存送出响应的数据,这个过程称为命中。这样系统就不必访问
硬盘中的
数据,由于SDRAM的
速率比磁介质快很多,因此也就加快了数据传输的速率。
回写式就是在写入
硬盘数据时也在缓存中找,找到就由缓存就数据写入盘中,多数硬盘都是采用的回写式缓存,这样就大大提高了性能。缓存
英文名为 Cache。CPU 缓存也是
内存的一种,其
数据交换
速率快且运算频率高。
磁盘缓存则是操作系统为磁盘输入输出而在普通物理
内存中分配的一块内存区域。
硬盘的缓冲区,硬盘的
缓冲区是硬盘与
外部总线交换
数据的场所。
硬盘的读
数据的过程是将磁
信号转化为电信号后,通过缓冲区一次次地填充与清空,再填充,再清空,一步步按照PCI总线的周期送出,可见,缓冲区的作用是相当重要的。它的作用也是提高性能,但是它与缓存的不同之处在于:
一 它是容量固定的硬件,而不像缓存是可以由
操作系统在
内存中动态分配的。
二 它对性能的影响大大超过
磁盘缓存对性能的影响,因为没有缓冲区,就会要求每传一个字(通常是4字节)就需要读一次磁盘或写一次磁盘。
缓存映射
高速缓存可以被分为直接映射缓存,组相联缓存和全相联缓存。
直接映射缓存
这种缓存中,每个组只有一行,E = 1,结构很简单,整个缓存就相当于关于组的一维
数组。不命中时的行替换也很简单,就一个行嘛,哪不命中替换哪。为了适应容量小的情况,第n+1层
存储器中的某个
数据块,你只能被替换到上一层(也就是第n层)存储器中的某个位置的子集中。假设一个直接映射的
高速缓存,(S,E,B,m) = ( 4,1,2,4 ),也就是说,
地址是4位(16个),有四个组,每个组一行,每个块两个字节。由于有16个地址,表征16个字节,所以总共有8个块,但只有4个组,也就是4行。只能把多个块映射到相同的缓存组,比如0和4都映射到组1,1和5都映射到组2,等等。这下问题就来了,比如先读块0,此时块0的
数据被
cache到组0。然后我再读块4,因为块4也是被映射到组0的,组0又只有一行,那就只有把以前块0的
数据覆盖了,要是之后我又读块0,就数据丢失了,只能到下级的
存储器去找。实际的循环程序中,很容易引起这种情况,称其为抖动。这种情况的存在,自然大大影响了性能。所以,需要更好的映射方案。
组相联缓存
在组相联缓存里,E大于1,就是说一个组里面有多个
cacheline。E等于多少,就叫有多少路,所以叫E路组相联。
组相联的行匹配就要复杂一些了,因为要检查多个行的标记位和有效位。如果最终找到了,还好。当然,找不到会从下一级
存储器中取出包含所需求
数据的行来替换,但一个组里面这么多行,替换哪个行。如果有一个空行,自然就是替换空行,如果没有空行,那就引发了一些其他的替换策略了。除了刚才介绍过的随机策略,还有最不常使用策略,最近最少使用策略。这些策略本身是需要一定开销的,但要知道,不命中的开销是很大的,所以为了保证命中率,采取一些相对复杂的策略是值得的。
全相联缓存
所谓全相联,就是由一个包含所有缓存行的组组成的缓存(块可以放在高速缓存中的任意位置)。由于只有一个组,所以组选择特别简单,此时地址就没有组索引了,只有标记和偏移,也就是t部分和b部分。其他的步骤,行匹配和
数据选择,和组相联原理是一样的,只是规模大得多了。如果说上面关于这三种
映射方法的描述非常抽象,为了能理解得更加透彻,把
存储器比作一家大超市,超市里面的东西就是一个个字节或者
数据。为了让好吃好玩受欢迎的东西能够容易被看到,超市可以将这些东西集中在一块放在一个专门的推荐柜台中,这个柜台就是缓存。如果仅仅是把这些货物放在柜台中即完事,那么这种就是完全关联的方式。
可是如果想寻找自己想要的东西,还得在这些推荐货物中寻找,而且由于位置不定,甚至可能把整个推荐柜台寻找个遍,这样的效率无疑还是不高的。于是超市老总决定采用另一种方式,即将所有推荐货物分为许多类别,如“
果酱饼干”,“巧克力饼干”,“
核桃牛奶”等,柜台的每一层存放一种货物。这就是直接关联的访问原理。这样的好处是容易让顾客有的放矢,寻找更快捷,更有效。
但这种方法还是有其缺点,那就是如果需要果酱饼干的顾客很多,需要巧克力饼干的顾客相对较少,显然对果酱饼干的需求量会远多于对巧克力饼干的需求量,可是放置两种
饼干的空间是一样大的,于是可能出现这种情况:存放的果酱饼干的空间远不能满足市场需求的数量,而
巧克力饼干的存放空间却被闲置。为了克服这个弊病,老板决定改进存货方法:还是将货物分类存放,不过分类方法有所变化,按“饼干”,“牛奶”,“果汁”等类别存货,也就是说,无论是什么饼干都能存入“ 饼干”所用空间中,这种方法显然提高了空间利用的充分性,让存储以及查找方法更有弹性。
技术指标
CPU产品中,一级缓存的容量基本在4kb到64kb之间,
二级缓存的容量则分为128kb、256kb、512kb、1mb、2mb等。一级缓存容量各产品之间相差不大,而二级缓存容量则是提高
cpu性能的关键。二级缓存容量的提升是由
cpu制造工艺所决定的,容量增大必然导致cpu内部晶体管数的增加,要在有限的cpu面积上
集成更大的缓存,对制造工艺的要求也就越高
缓存(
cache)大小是CPU的重要指标之一,其结构与大小对CPU
速率的影响非常大。简单地讲,缓存就是用来存储一些常用或即将用到的
数据或指令,当需要这些数据或
指令的时候直接从缓存中读取,这样比到
内存甚至
硬盘中读取要快得多,能够大幅度提升
cpu的处理
速率。所谓
处理器缓存,通常指的是
二级高速缓存,或
外部高速缓存。即
高速缓冲存储器,是位于CPU和
主存储器dram(dynamic ram)之间的规模较小的但
速率很高的存储器,通常由sram(
静态随机存储器)组成。用来存放那些被
cpu频繁使用的
数据,以便使cpu不必依赖于
速率较慢的dram(
动态随机存储器)。l2
高速缓存一直都属于
速率极快而价格也相当昂贵的一类
内存,称为sram(静态ram),sram(static ram)是
静态存储器的英文缩写。由于sram采用了与制作
cpu相同的半导体工艺,因此与
动态存储器dram比较,sram的存取
速率快,但
体积较大,价格很高。
处理器缓存的基本思想是用少量的sram作为
cpu与dram存储系统之间的缓冲区,即cache系统。80486以及更高档
微处理器的一个显著特点是处理器芯片内
集成了sram作为
cache,由于这些cache装在
芯片内,因此称为片内
cache。486芯片内
cache的容量通常为8k。高档芯片如pentium为16kb,power pc可达32kb。pentium微处理器进一步改进片内cache,采用
数据和
双通道cache技术,相对而言,片内cache的容量不大,但是非常灵活、方便,极大地提高了微处理器的性能。片内
cache也称为一级cache。由于486,586等高档处理器的
时钟频率很高,一旦出现一级
cache未命中的情况,性能将明显恶化。在这种情况下采用的办法是在处理器芯片之外再加
cache,称为二级cache。二级
cache实际上是
cpu和主存之间的真正缓冲。由于
系统板上的响应时间远低于
cpu的
速率,没有二级
cache就不可能达到486,586等高档处理器的理想速率。二级
cache的容量通常应比一级cache大一个数量级以上。在系统设置中,常要求用户确定二级
cache是否安装及尺寸大小等。二级
cache的大小一般为128kb、256kb或512kb。在486以上档次的
微机中,普遍采用256kb或512kb同步
cache。所谓同步是指
cache和
cpu采用了相同的
时钟周期,以相同的
速率同步工作。相对于异步
cache,性能可提高30%以上。pc及其
服务器系统的发展趋势之一是
cpu主频越做越高,系统架构越做越先进,而主存dram的结构和
存取时间改进较慢。因此,缓存(
cache)技术愈显重要,在pc系统中cache越做越大。广大用户已把
cache做为评价和选购pc系统的一个重要指标。
光驱缓存
光存储驱动器都带有内部缓冲器或
高速缓存存储器。这些缓冲器是实际的
存储芯片,安装在
驱动器的电路板上,它在发送
数据给PC之前可能准备或存储更大的
数据段。CD/DVD典型的缓冲器大小为128KB,不过具体的驱动器可大可小(通常越多越好)。可刻录CD或
DVD驱动器一般具有2MB-4MB以上的大容量缓冲器,用于防止
缓存欠载(buffer underrun)错误,同时可以使刻录工作平稳、恒定的写入。一般来说,驱动器越快,就有更多的缓冲
存储器,以处理更高的
传输速率。
CD/DVD
驱动器带有缓冲或
高速缓存具有很多好处。缓冲可以保证PC以固定
速率接收
数据。当一个应用程序从
驱动器请求
数据时,数据可能位于分散在
光盘上不同地方。因为
驱动器的访问
速率相对较慢,在
数据读取时会使驱动器不得不间隔性向PC发送数据。
驱动器的缓冲在软件的控制下可以预先读取并准备光盘的内容目录,从而加速第一次
数据请求。
光驱读取
数据的规律是首先在缓存里寻找,如果在缓存中没有找到才会去光盘上寻找,大容量的缓存可以预先读取的数据越多,但在实际应用中
CD-ROM、DVD-ROM等读取操作时,读取重复信息的机会是相对较少的,大部分的光盘更多的时候是一次读取数量较多的文件内容,因此在CD-ROM、DVD-ROM驱动器上缓存重要性得不到体现,因此大多此类产品采用较小的缓存容量。CD-ROM一般有128KB、256KB、512KB几种;而DVD一般有128KB、256KB、512KB,只有个别的外置式
DVD光驱采用了较大容量的缓存。
在刻录机或COMMBO产品上,缓存就变得十分重要了。在
刻录光盘时,系统会把需要刻录的
数据预先读取到缓存中,然后再从缓存读取数据进行刻录,缓存就是数据和刻录盘之间的桥梁。系统在传输
数据到缓存的过程中,不可避免的会发生传输的停顿,如在刻录大量小容量文件时,
硬盘读取的
速率很可能会跟不上刻录的速率,就会造成缓存内的数据输入输出不成比例,如果这种状态持续一段时间,就会导致缓存内的数据被全部输出,而得不到输入,此时就会造成缓存欠载错误,这样就会导致
刻录光盘失败。因此刻录机和COMMBO产品都会采用较大容量的缓存容量,再配合防刻死技术,就能把刻
坏盘的几率降到最低。同时缓存还能协调
数据传输速率,保证数据传输的稳定性和可靠性。
刻录机产品一般有2MB、4MB、8MB,
COMBO产品一般有2MB、4MB、8MB的缓存容量,受制造成本的限制,缓存不可能制作到足够大,但适量的缓存容量还是选择光储需要考虑的关键之一。
网络缓存
概念
WWW是互联网上最受欢迎的应用之一,其快速增长造成网络拥塞和服务器超载,导致客户访问延迟增大,
WWW服务质量日益显现出来。缓存技术被认为是减轻服务器负载、降低网络拥塞、增强WWW可扩展性的有效途径之一,其基本思想是利用客户访问的时间局部性(Temproral Locality)原理,将客户访问过的内容在Cache中存放一个副本,当该内容下次被访问时,不必连接到驻留网站,而是由Cache中保留的副本提供。
Web内容可以缓存在客户端、代理服务器以及服务器端。研究表明,缓存技术可以显著地提高WWW性能,它可以带来以下好处:
(1)减少网络流量,从而减轻拥塞。
(2)降低客户访问延迟,其主要原因有:
①缓存在代理服务器中的内容,客户可以直接从代理获取而不是从远程服务器获取,从而减小了传输延迟;
②没有被缓存的内容由于网络拥塞及服务器负载的减轻而可以较快地被客户获取。
(3)由于客户的部分请求内容可以从代理处获取,从而减轻了远程服务器负载。
(4)如果由于远程服务器故障或者网络故障造成远程服务器无法响应客户的请求,客户可以从代理中获取缓存的内容副本,使得WWW服务的鲁棒性得到了加强。
Web缓存系统也会带来以下问题:
(1)客户通过代理获取的可能是过时的内容。
(2)如果发生缓存失效,客户的访问延迟由于额外的代理处理开销而增加。因此在设计Web缓存系统时,应力求做到Cache命中率最大化和失效代价最小化。
(3)代理可能成为瓶颈。因此应为一个代理设定一个服务客户数量上限及一个服务效率下限,使得一个代理系统的效率至少同客户直接和远程服务器相连的效率一样。
影响Internet访问速率
访问网站的过程是通过建立在
TCP/IP协议之上的
HTTP协议来完成的。从
客户端发出一个
HTTP请求开始,用户所经历的等待时间主要决定于DNS和网站的响应时间。网站域名首先必须被
DNS服务器解析为IP地址,HTTP的延时则由在客户端和服务器间的若干个往返时间所决定。往返时间是指客户端等待每次请求的响应时间,平均往返时间取决于三个方面:
网站
服务器造成的延时在往返时间中占主要比例。当某个
服务器收到多个并发
HTTP请求时,会产生排队延时。由于响应一个HTTP请求,往往需要多次访问本地
硬盘,所以即使是一台负载并不大的
服务器,也可能产生几十或几百微秒的延时。
通常在客户端和
服务器之间的路径上会存在多个
网络设备,如路由器、
网关、代理和防火墙等。它们对经过的IP包都要做存储/转发的操作,于是会引入排队延时和处理延时。在
网络拥塞时,这些设备甚至会
丢包,此时会寄希望于客户端和
服务器通过端到端的协议来恢复通信。
在
广域网中,从一个
网络设备到另一个网络设备间的
数据传输速率是决定往返时间的一个重要因素。但基本带宽的作用并不是像人们想象的那么重要,一项测试表明,当网站采用T3
速率接入Internet时,也仅有2%的网页或
对象能以64kbps的速率提供给客户端,这显然表明,带宽在网络性能上不是最关键的因素。
Internet在向世界的每一个角落延伸,用户向一个
服务器发出的 请求可能会经过8000公里到1.6万公里的距离,光速带来的延时和网络设备的延时是网络如此缓慢的最根本原因。
网络缓存解决根本问题
既然影响
网络速率的原因是由距离和光速引起,那么加速Web访问的唯一途径就是缩短客户端与网站之间的距离。通过将用户频繁访问的页面和对象存放在离用户更近的地方,才能减少光速引入的延时,同时由于减少了路由中的环节,也相应地减少了路由器、防火墙和代理等引入的延时。
传统的解决办法是建立
镜像服务器来达到缩短距离的目的。但这个办法存在很大的不足,对于某个站点而言,不可能在离每个用户群较近的地方都建立
镜像站点,若对大多数网站都用这样的办法就更不经济,同时管理和维护镜像站点是一项非常困难的工作。
网络缓存是一种降低Internet流量和提高终端用户响应时间的新兴网络技术。它的观念来自于
计算机和网络的其他领域,如流行的Intel架构的CPU中就存在缓存,用于提高
内存存取的
速率;各种操作系统在进行磁盘存取时也会利用缓存来提高速率;
分布式文件系统通常也通过缓存来提高客户机和
服务器之间的速率。
类型
静态页面的缓存可能有2种形式:其实主要区别就是CMS是否自己负责关联内容的缓存更新管理。
1 静态缓存:是在新内容发布的同时就立刻生成相应内容的静态页面,比如:2003年3月22日,管理员通过后台内容管理界面录入一篇文章后,并同步更新相关索引页上的链接。
2 动态缓存:是在新内容发布以后,并不预先生成相应的静态页面,直到对相应内容发出请求时,如果前台缓存服务器找不到相应缓存,就向后台内容管理服务器发出请求,后台系统会生成相应内容的静态页面,用户第一次访问页面时可能会慢一点,但是以后就是直接访问缓存了。
静态缓存的缺点:
复杂的触发更新机制:这两种机制在内容管理系统比较简单的时候都是非常适用的。但对于一个关系比较网络缓存系统结构图复杂的网站来说,页面之间的逻辑引用关系就成为一个非常非常复杂的问题。最典型的例子就是一条新闻要同时在新闻首页和相关的3个新闻专题中出现,在静态缓存模式中,每发一篇新文章,除了这篇新闻内容本身的页面外,还需要系统通过触发器生成多个新的相关静态页面,这些相关逻辑的触发也往往就会成为内容管理系统中最复杂的部分之一。
旧内容的批量更新: 通过静态缓存发布的内容,对于以前生成的静态页面的内容很难修改,这样用户访问旧页面时,新的模板根本无法生效。
在动态缓存模式中,每个动态页面只需要关心,而相关的其他页面能自动更新,从而大大减少了设计相关页面更新触发器的需要。
网络缓存可以在客户端,也可以在网络上,由此我们将缓存分为两类:
浏览器缓存和
代理缓存。
几乎所有的浏览器都有一个内置的缓存,它们通常利用客户端本地的
内存和
硬盘来完成缓存工作,同时允许用户对缓存的内容大小作控制。浏览器缓存是网络缓存的一个极端的情况,因为缓存设在客户机本地。通常一个客户端只有一个用户或几个共享计算机用户,浏览器缓存要求的
硬盘空间通常在5MB到50MB的范围内。但是浏览器缓存在用户之间难以共享,不同客户端的缓存无法实现交流,因而缓存的内容与效果相当有限。
代理缓存则是一种独立的应用层网络服务,它更像E-mail、Web、DNS等服务。许多用户不仅可以共享缓存,而且可以同时访问缓存中的内容。企业级
代理缓存一般需要配置高端的处理器和存储系统,采用专用的软件,要求的
硬盘空间在5MB到50GB左右,
内存为64MB到512MB。
代理处于客户端与网站
服务器之间,在某些情况下,这种连接是不允许的,如网站在防火墙内,这时客户端必须与代理建立TCP连接,然后由代理建立与
网站服务器的TCP连接。代理在
服务器和客户端之间起到了
数据接力的作用。代理发出的HTTP请求与一般的HTTP请求有细小的不同,主要在于它包含了完整的URL,而不只是URL的路径。
当
代理缓存收到客户端的请求时,它首先检查所请求的内容是否已经被缓存。如果没有找到,缓存必须以客户端的名义转发请求,并在收到
服务器发出的文件时,将它以一定的形式保存在本地
硬盘,并将其发送给客户端。
如果客户端请求的内容已被缓存,还存在两种可能:
其一,缓存的内容已经过时,即缓存中保存的内容超过了预先设定的时限,或网站
服务器的网页已经更新,这时缓存会要求原服务器验证缓存中的内容,要么更新内容,要么返回“未修改”的消息;
其二,缓存的内容是新的,即与原网站的内容保持同步,此时称为缓存命中,这时缓存会立即将已保存的内容送给客户端。
在客户端的请求没有命中时,反而增加了缓存存储和转发的处理时间。在这种情况下,
代理缓存是否仍有意义呢?实际上,代理缓存能够同时与网站
服务器建立多个并发的TCP/IP连接,并行获取网站上的内容。缓存的存在从整体上降低了对网站访问的次数,也就降低了单位时间内
服务器端的排队数目,因而这时
并发连接的排队延时要小得多。优秀的缓存甚至能实现对网页内相关链接内容的预取以加快连接的
速率。
当原
服务器的文件修改或被删除后,缓存又如何知道它保存的拷贝已经作废呢?
HTTP协议为
缓存服务提供了基本的支持,它使缓存能向原服务器查询,某个文件是否更改,如果缓存的拷贝过时则进行有条件下载。仅当原
服务器文件超过指定的日期时,才会发出新的文件。
但是这些询问操作对
网络服务器造成的负载几乎和获取该文件差不多,因此不可能在客户端向缓存发起请求时都执行这样的操作。HTTP协议使得
服务器可以有选择地为每个文档指定生存时间,即清楚地指出某个文件的有效生命周期,生存时间很短即意味着“不要对其缓存”。拷贝的保留时间可以是固定的,也可以是通过这个文件的大小、来源、生存时间或内容计算出来的。
分布缓存
分布式缓存系统是为了解决
数据库服务器和web服务器之间的瓶颈。如果一个网站的流量很大,这个瓶颈将会非常明显,每次
数据库查询耗费的时间将会非常可观。对于更新速度不是很快的网站,我们可以用
静态化来避免过多的
数据库查询。对于更新速度以秒计的网站,
静态化也不会太理想,可以用缓存系统来构建。如果只是单台
服务器用作缓存,问题不会太复杂,如果有多台服务器用作缓存,就要考虑
缓存服务器的
负载均衡。
使用Mem
cached分布式
缓存服务来达到保存用户的会话
数据,而达到各个功能模块都能够跨省份、跨
服务器共享本次会话中的私有数据的目的。每个省份使用一台
服务器来做为Mem
cached服务器来存储用话的会话中的
数据,当然也可以多台服务器,但必须确保每个省份的做Mem
cached服务器数量必须一致,这样才能够保证Mem
cached客户端操作的是同一份数据,保证数据的一致性。
会话数据的添加、删除、修改
Mem
cached客户端,添加、删除和、修改会话信息
数据时,不仅要添加、删除、修改本省的Memcached
服务器数据,而且同时要对其它省份的Memcahed服务器做同样的操作,这样用户访问其它省份的服务器的功能模块进也能读取到相同的会话数据。Memcached
客户端服务器的列表使用局域网的内网IP(如:192.168.1.179)操作本省的Memcahed服务器,使用公网的IP((如:202.183.62.210))操作其它省份的Memcahe服务器。
会话数据的读取
系统所有模块读取会话
数据的Mem
cached客户端服务器列表都设为本省Memcached服务器地址的内网IP来向Memcahed服务器中读取会话数据。
同一会话的确认
使用Cookie来保持客户与
服务端的联系。每一次会话开始就生成一个GUID作为SessionID,保存在客户端的Cookie中,作用域是顶级域名,这样二级、三级域名就可以共享到这个Cookie,系统中就使用这个SessionID来确认它是否是同一个会话。
会话数据的唯一ID
会话
数据存储在Mem
cached
服务器上的唯一键Key也就是会话数据数据的唯一ID定义为:SessionID_Name, SessionID就是保存在客户端Cookie中的SessionID,Name就是会话数据的名称,同一次会话中各个会话数据的Name必须是唯一的,否则新的会话数据将覆盖旧的会话数据。
会话的失效时间
会话的失效通过控制Cookie的有效时间来实现,会话的时间设为SessionID或Cookie中的有效时间,且每一次访问SessionID时都要重新设置一下Cookie的有效时间,这样就达到的会话的有效时间就是两次间访问Cookie中SessionID值的的最长时间,如果两次访问的间隔时间超过用效时间,保存在SessionID的Cookie将会失效,并生成新的SessionID存放在Cookie中, SessionID改变啦,会话就结束啦。Mem
cached
服务器中会话
数据的失效,每一次向Memcache服务器中添加会话数据时,都把有效时间设为一天也就是24小时,让Memcached服务使用它内部的机制去清除,不必在程序中特别做会话数据的删除操作。数据在Memcache
服务器中有有效时间只是逻辑上的,就算是过了24 小时,如果分配给Mem
cached服务的
内存还够用的话,数据还是保存在内存当中的,只是Memcache客户端读取不到而已。只有到了分配给Memcached服务的
内存不够用时,它才会清理没用或者比较旧的
数据,也就是懒性清除。
增加缓存的方法
CPU的缓存
CPU的缓存分二级:L1(一级缓存)和L2(二级缓存),当处理器要读取数据时,首先要在L1缓存中查找,其次才是L2缓存,最后才是系统内存。如果有一天你发觉自己的电脑慢了很多,进入到Windows桌面也要几分钟,这时候就要检查一下CPU的一、二级缓存有没有打开。在BIOS设置中的StandardCMOSSetup(标准CMOS设定)有两项是用来打开或关闭缓存的:CPUInternalCache设为Enable时开启CPU内部的一级缓冲区,若设置为Disabl则为关闭,这时系统性能将大大降低;ExternalCache选项是控制主板上二级缓冲区,如果主板上有二级缓存则应设成Enable。
硬盘的缓存
点击电脑桌面上的“开始”/“运行”,键入“Msconfig”启动“系统配置实用程序”,跟着选中“system.ini”标签下的“Vcache”项,就可以根据系统的实际情况来调节硬盘的缓存了。在该选项中一般会有三行内容:ChunkSize=1024、MaxFileCache=10240和MinFileCache=10240;其中第一行是缓冲区读写单元值,第二、三行是硬盘的最大和最小缓冲值,等号后的数值都是可以修改的,只要右键单击选中任一行就可以进行修改了。如果你的内存是128MB的话,上面这三行的取值就比较合理了,当然也可以自定。如果不知道该如何设置合适的缓冲值,请“Windows优化大师”帮忙吧,这个软件中有一个“
磁盘缓存优化”项,用鼠标就可以方便地设置好缓存;又或者让“Windows优化大师”自动帮你进行优化设置。当硬盘的缓存值足够大时,硬盘就不用频繁地读写磁盘,一来可以延长硬盘的寿命,二来也可以提高数据的传输速度。
另外,将硬盘的“文件系统缓存”设置为“网络服务器”,可以加快系统对硬盘的访问速度,因为文件系统缓存里存放了硬盘最近被访问过的文件名和路径,缓存越大所能储存的内容也就越多。如果点击“控制面板”/“系统”/“性能”/“文件系统”/“硬盘”,将“此计算机的主要用途”由“台式机”改为“网络服务器”,可以将原来10K左右的缓存增加至近50K左右。
软驱和光驱的缓存