分享

cache历程

 lycbje 2013-12-31

前 言

  纵观PC系统和CPU二十年的发展,随着半导体加工工艺水平的不断提高,CPU和存储器的性能都有了很大的提高。
  CPU频率的提高,必然要求系统中存储器的存取速度要提高,还要求其容量要增大。主存储器DRAM容量的提高还是比较快的,但是DRAM读取时间的提高却很慢。从而在速度上与CPU主频的提高产生了极不相配的情况,这样会影响整个系统的性能。二十年来,CPU设计的问题之一就是解决高速CPU和低速DRAM之间的平衡或匹配问题,以求系统性能的整体提高。
  在它们之间加入高速缓冲存储器Cache,就是这个问题的解决方案之一。
  Cache随CPU的发展而不断改变,可以概括为:从无到有,由小到大,先外后内,纵深配备,软硬兼施。初期的CPU没有Cache,在80386时期出现外部Cache;80486时期开始有内部仅8kB的Cache。Cache的分级也由L1和L2级,发展到L0和L3级的纵深配备;Cache的大小由当初的8kB,直到Merced的1~2MB。为了更好地利用Cache,还专门配有缓存控制指令。
  本文回顾了在过去的二十年中,Cache技术的发展历程,并对PC其它设备使用Cache技术作了简单陈述。

PC初期无需Cache

  在八十年代初,由于CPU主频很低,DRAM的存取时间甚至快于CPU存取时间,因此无需Cache。例如,当时PC机采用8088CPU,系统主频为4.77MHz,一个基本总线周期为4拍,即840ns。此时64kB的DRAM存取周期200ns,造成DRAM等待CPU的执行的局面,无需Cache。
  在PC/AT机采用80286CPU后,系统主频增加到10MHz,1个基本总线周期为2拍,即200ns。此时必须用读取时间为100ns的DRAM。在采用25MHz的80386DX时,一个基本总线周期为2拍,即80ns,当时已没有速度相匹配的DRAM可用。解决方案有2种:一种是在基本总线周期中插入等待,降低CPU的处理能力;另一种是采用内部和外部Cache,使用SRAM芯片以提高存储器的读取速度。

80386没有L1 Cache

  80386初期主频为20MHz。Intel公司十分重视80386的设计制造,把它定位于“新一代个人电脑架构”,想把一些新技术设计在芯片中。但由于当时工艺所限,内置高速缓存的芯片体积过大,造成成本上升,同时工期有限,几经权衡,最后决定在80386芯片不设置高速缓冲存储器,可以生产另外的Cache,以配合80386运作。
  尽管人们意识到CPU主频的增加与内存DRAM存取时间过慢的矛盾已愈加突出,但因条件所限,80386内部没有L1 Cache,只有外部的Cache。

80486出现Cache

  80486是由80386CPU加80387数字协处理器以及8kB Cache构成。
  当CPU的时钟频率继续增加时,外部Cache的SRAM芯片速度也要相应提高,这样会增加系统成本,为此在设计80486时采用了内部Cache。
  80486芯片内由8kB的Cache来存放指令和数据。同时,80486也可以使用处理器外部的第二级Cache,用以改善系统性能并降低80486要求的总线带宽。Cache可以工作在80486所有的操作模式:实地址模式、保护模式和X86模式。对Cache的操作是由系统自动进行的,对程序员透明。而在多处理器系统中,可能要求系统软件的干预。对于一般的计算机,在系统CMOS设置中均有Cache使用模式的设置。
  80486内部Cache是一个4路组相联Cache,在主存储器中给定单元的数据能够存储在Cache内4个单元中的任何一个。这种4路相联方式是高命中率的全相联Cache和快速的直接映像Cache的一种折衷,因而能进行快速查找并获得高的命中率。

Peutium的分离L1 Cache和L2 Cache

 Pentium处理器采用了超标量结构双路执行的流水线,有分支预测技术。   由于Pentium设计有2条并行整数流水线,可同时执行2条命令。整数单元的潜在处理能力实际可增加一倍,处理器也需要对命令和数据进进双倍的访问。为使这些访问不互相干涉,Intel把在486上共用的内部Cache,分成2个彼此独立的8kB代码Cache和8kB数据Cache,这两个Cache可以同时被访问。这种双路高速缓存结构减少了争用Cache所造成的冲突,提高了处理器效能。Pentium的Cache还采用了回写写入方式,这同486的贯穿写入方式相比,可以增加Cache的命中率。此外,还采用了一种称为MESI高速缓存一致性协议,为确保多处理器环境下的数据一致性提供了保证。

Pentium Pro内嵌式L2 Cache

  为使Pentium Pro的性能超过Pentium,必需使用创新的设计方法。Pentium Pro使用了新的超标量和级流水线技术,包括无序执行、动态分支预测和推测执行的动态执行新技术。它可以使CPU在一个时钟周期执行3条微操作。CPU并行处理速度的加快,意味着它同时处理指令和数据的数量增加,为不使CPU处于等待状态,需要重新设计Cache。
  Pentium Pro在片内第一级Cache的设计方案中,使指令Cache与数据Cache分别设置。指令Cache的容量为8kB,采用2路组相联映像方式。数据Cache的容量也为8kB,但采用4路组相联映像方式。Pentium Pro采用MESI(修改、排他、共享、作废)协议来维持Cache和主存储器之间的一致性。通常,人们总以为,像Pentium Pro这样的3路超标量结构的微处理器会采用更大容量的片内第一级Cache和更大的第二级Cache。然而,Intel公司的设计者却选择了另一条设计思路——设计一种Cache存储阶层结构,使得能够从一个Cache流动到另一个Cache,而不用阻塞执行。
  Pentium Pro采用了内嵌式或称捆绑式L2Cache,大小为256kB或512kB。此时的L2已经用线路直接连到CPU上,益处之一就是减少了对急剧增多L1 Cache的需求。L2 Cache还能与CPU同步运行。即当L1 Cache不命中时,立刻访问L2 Cache,不产生附加延迟。为进一步减少因要访问的信息不在高速缓冲中时所带来的性能损失,Pentium Pro的L1和L2都设计成非锁定型。即当哪个Cache中没有CPU所需的信息时,它不妨碍后面访问Cache的处理过程。Cache可以直接处理最多4次的Cache缺页情况,借助CPU的内存有序缓冲区可以顺序保存最多12次的内存访问。非锁定型Cache适用于Pentium Pro的乱序执行核心,因为在可能引发流水线延迟的长等待内存操作期间,这些Cache可以让CPU继续运行。
  Pentium Pro的如此捆绑封装,带来器件成本提高。一方面专用的L2 cache芯片成本高,另一方面两个不同功能的芯片只有放在一起联结后才能最后测试其性能的完整性。而当其中有一个有缺陷时,两个芯片都被报废。在以后的Pentium Pro产品中,又将L2 Cache从芯片中去掉。

Pentium MMX容量增大的L1和L2Cache

  Pentium MMX是能运行多媒体指令MMX的高能奔腾处理器。Pentium MMX具有改进的分支预测和增强型流水线技术,并将L1 Cache容量增加到32kB,L2 Cache为512kB。
  Pentium MMX的片内L1数据和指令的Cache,每个增到16kB,4路相联。较大的独立内部Cache、减少平均内存存取时间,同时提供对近期所用指令和数据的快速存取,性能因此得到提高。数据Cache支持采用回写方式更新内存。
  由于CacheL1容量的增大,使当时的应用程序运行速度提高了10%左右。

PentiumⅡ设有双独立总线连接L2 Cache

  PentiumⅡ是Pentium Pro的改进型,具有MMX指令,使用动态执行技术,采用双独立总线结构。PentiumⅡ同样有2级Cache,L1为32kB(指令和数据Cache各16kB)是Pentium Pro的一倍。L2为512kB。
  Pentium Ⅱ与Pentium Pro在L2 Cache 的不同是由于制作成本原因。L2 Cache已不在内嵌芯片上,而是与CPU通过专用64位高速缓存总线相联,与其它元器件共同被组装在同一基板上,即“单边接触盒”上。双独立总线结构就是:L2高速缓存总线和处理器至主内存(Processor-to-main-memory)的系统总线。 PentiumⅡ处理器可以同时使用这两条总线,与单一总线结构的处理器相比,该处理器可以进出两倍多的数据,可允许 PentiumⅡ处理器的L2高速缓存比Pentium处理器的L2高速缓存要快1倍。随着 PentiumⅡ处理器主频的提高,L2高速缓存的速度也将加快。最后,流水线型系统总线可允许同时并行传输,而不是单个顺序型传输。改进型的双重独立总线结构,可以产生超过与单总线结构三倍带宽的性能。另外,在PentiumⅡ中,采用了ECC技术,此技术应用到二级高速缓存中,大大提高了数据的完整性和可靠性。   为开发低端市场,曾在 PentiumⅡ的基板上除去L2,牺牲一些性能,制造廉价CPU。这就是最初的Celeron处理器。以后的Celeron仍加有较小的片上L2 Cache,其大小为128kB。

PentiumⅢ的L2 Cache增大

  PentiumⅢ也是基于Pentium Pro结构为核心,在原有MMX多媒体指令的基础上,又增了70多条多媒体指令。它使用动态执行技术,采用双独立总线结构。
  PentiumⅢ具有32kB非锁定L1 Cache和512kB非锁定L2 Cache。L2可扩充到1~2MB,具有更合理的内存管理,可以有效地对大于L2缓存的数据块进行处理,使CPU、Cache和主存存取更趋合理,提高了系统整体性能。在执行视频回放和访问大型数据库时,高效率的高速缓存管理使PⅢ避免了对L2 Cache的不必要的存取。由于消除了缓冲失败,多媒体和其它对时间敏感的操作性能更高了。对于可缓存的内容,PⅢ通过预先读取期望的数据到高速缓存里来提高速度,这一特色提高了高速缓存的命中率,减少了存取时间。

Merced设有L0

  即将推出的第7代处理器Merced主频可达1GHz。很明显,对Cache的要求更高了。为此,lntel本着“大力提高执行单元和缓存间数据交换速度”的思想,在芯片内开发新的Cache,并增加L1 Cache的容量,来平衡CPU和DRAM间的速度。
  为此,在Merced的片上最接近执行单元旁再设另一处Cache,称为L0缓存,是指令/数据分离型。由于L0Cache在物理位置上比L1离执行单元更近,布线距离的缩短,使它与执行单元间的数据交换速度比L1还快,可以进一步提高工作主频。
  同时,还要在芯片内部配置超过1MB的大容量L1 Cache。芯片内部Cache比外部Cache更易于提升与执行单元间的数据传送速度。内部Cache的加大,执行单元不易发生“等待”。现行的内部Cache容量仅为32kB~128kB。内部Cache容量的增加会引起芯片面积增大,提高制造成本。但大部分公司认为,由于内部Cache容量增大而导致成本的上扬,可以用制造技术来弥补。

与Cache相配合的缓存控制指令

  为进一步发挥Cache的作用,改进内存性能并使之与CPU发展同步来维护系统平衡,一些制造CPU的厂家增加了控制缓存的指令。如Intel公司在PentiumⅢ处理器中新增加了70条3D及多媒体的SSE指令集。其中有很重要的一组指令是缓存控制指令。AMD公司在K6-2和K6-3中的3DNow!多媒体指令中,也有从L1数据Cache中预取最新数据的数据预取指令(Prefetch)。
  PentiumⅢ处理器的缓存控制指令,用于优化内存连续数据流。针对数据流的应用需要对以前的Cache运作方式进行了改进,减少了一些不必要的中间环节,节省了时间,增加了CPU数据总线的实际可用带宽,也提高了Cache的效率。
  有两类缓存控制指令。一类是数据据预存取(Prefetch)指令,能够增加从主存到缓存的数据流;另一类是内存流优化处理(Memory Streaming)指令,能够增加从处理器到主存的数据流。这两类指令都赋予了应用开发人员对缓存内容更大控制能力,使他们能够控制缓存操作以满足其应用的需求。
  数据预存取指令允许应用识别出所需的信息,并预先将其从主存中取出存入缓存。这样一来,处理器可以更快地获取信息,从而改进应用性能。为了进一步削减内存延迟,内存访问还可以与计算机周期保持流水操作。例如,如果一个应用需要计算一些数值以供3D图形使用,当它在计算一个值的同时就可以预取下一个需要计算的数值。
  内存流优化处理指令允许应用越过缓存直接访问主存。通常情况下,处理器写出的数据都将暂时存储在缓存中以备处理器稍后使用。如果处理器不再使用它,数据最终将被移至主存。然而,对于多媒体应用来就,通常不再需要使用这些数据。因此,这时将数据尽快地移到主存中则显得至关重要。采用了PentiumⅢ处理器的内存流优化处理指令后,应用程序就能让数据搭乘“直达快车”,直接到达主存。当数据流直接到达主存时,处理器负责维护缓存的一致性。因为这种方式避免了为数据流留出空间清空缓存的当前内容,从而也提高了缓存的利用率。
  总而言之,缓存控制指令改进了进出处理器的数据据流,使处理器保持其高速率运作。通过这些指令(同时还需要一些专为其设计以使其发挥优势的软件),商业用户可以在操作系统和图形设备驱动程序中感受其性能优势。

Cache在PC中其它设备的应用

  Cache作为一种速度匹配技术,不仅用在提高CPU对内存的读写速度上,而且也用在CPU结构的其它部分和PC系统中。
  PC的显示系统中,由于3D应用的迅猛发展,大量的显示内存使用着高速缓存技术,如前台缓存、后台缓存、深度缓存和纹理缓存等。
  PC的磁盘系统中,为提高内存对磁盘(主要是硬盘)的读写速度,就要建立磁盘高速缓存。因为DRAM内存的存取速度对CPU来说较慢,但对磁盘的存取速度却是很快的。这是因为磁盘存储系统包含有磁头的机械运动,而机械运动无法跟传送电信号的电子速度相比。此外,磁头中电与磁的信号转换也对速度有影响。这样,为了提高磁盘存取速度而采用Cache也就顺理成章了。硬盘Cache无需使用高速的SRAM,它只需在内存(DRAM)中划出一个区域,作为专用的磁盘缓冲区,采用一定的数据结构,即可实现磁盘存取的Cache技术。它的过程也是把即将访问的数据整块地拷贝到高速缓存区中,然后内存再到高速缓存中去逐个读取数据。由于数据在RAM空间内部传送要比在RAM与磁盘间传送快得多,系统由此提高了存取速度。
  硬盘的Cache可以放在常规内存中。不过,为了不占用宝贵的用户程序空间,通常是把它设在扩展内存或扩充内存里。硬盘Cache是由人们共知的SMARTDRIVE.EXE文件自动建立的,用户只需在AUTOEXEC.BAT与CONFIG.SYS中加入相应的命令行就成了。
  在较慢速的其它外围设备和内存的数据交换中,在网络通讯中,都需要使用Cache技术。推而广之,凡是在传输速度有较大差异的设备之间,都可以利用Cache的速度匹配技术。

结束语

  PC中的Cache主要是为了解决高速CPU和低速DRAM内存间速度匹配的问题,是提高系统性能,降低系统成本而采用的一项技术。随着CPU和PC的发展,20年来,现在的Cache已成为CPU和PC不可缺少的组成部分,是广大用户衡量系统性能优劣的一项重要指标。据预测,在21世纪初期,CPU主频加快发展的趋势,加上内存DRAM的存取时间也会提高,从系统的性价比考虑,Cache的配备仍然是重要的技术之一。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多