-- 作者:大猫 -- 发布时间:2004-11-6 14:06:11
--
内存基本知识(续) 如何识别Cache存储器芯片标志 目前微机系统中,常用的静态RAM的容量有8K×8位(64Kbit)、32K×8(256Kbit)位以及64K×8(512Kbit)位三种芯片,存取时间(周期)为15ns到30ns。以上参数在静态SRAM芯片上常标注为:XX64-25(XX65-25)、XX256-15(XX257-15)、XX512-15等。以XX256-15为例,其中“256”表示容量(单位为Kbit),“15”表示存取时间(单位为ns)。在表示SRAM存储器容量的数值中,“64”与“65”相同,都表示该芯片的容量为64Kbit,即8KB。同理,“256”与“257”的含义也相同,即该芯片的容量为32KB。例如在华硕PVI686SP3主板上使用的SRAM芯片为W24257AK-15,即该芯片的容量为32K×8位,存取速度为15ns。如何用软件的方法检测Cache?检测;高速缓存;Cache介绍用软件检测Cache的方法主板上Cache的大小和有无很难用一般方法判断,尤其是有的主板连BIOS都被不法经销商修改过以方便作假。486时代常用的拔插法现在也不灵了——奔腾主板上很多标称256K的Cache芯片都是直接SMT(表面安装)上去的,无法拔插。测试Cache的软件确实有一些,如CCT等,但普通用户很难得到这些专业软件。 什么是内存? 内存最小的物理单元是位,从本质上来讲,位是一个位于某种二值状态(通常是0和1)下的电气单元。 八位组成一个字节,这样组合的可能有256种(2的8次方)。字节是内存可访问的最小单元,每个这样的组合可代表单独的一个数据字符或指令。ASCII码字符集实际上只使用了7位,因此支持128种可能的字符。对于所有的26个英文字母(包括大小写)、数字和特殊字符来说,这个数目完全够用。某些语种的字符数目比较庞大,因此它们可能会使用“双字”字符集(例如汉字)。 PC机上所使用的内存可以分为两大类,分别是只读内存(ROM)和随即访问内存(RAM)。从它们的名字上可以看出,ROM数据不能随意更新,但是在任何时候都可以读取。即使是断电,ROM也能够保留数据。至于RAM则在任何时候都可以读写,因此RAM通常用作操作系统或其他正在运行的程序的临时存储介质(可称作系统内存)。不幸的是,掉电时RAM不能保留数据,如果需要保存数据,就必须把它们写入到一个长期的存储器中(例如硬盘)。正因为如此,有时也将RAM称作“可变存储器”。 RAM内存可以进一步分为静态RAM(SRAM)和动态内存(DRAM)两大类。由于实现方法上的差异,DRAM要比SRAM慢。SRAM由逻辑晶体管组成,数据采用触发的方式进行存储。因此改变和读取内存单元格的速度非常快。而DRAM使用电容存储数据。由于电容会逐渐放电,所以必须周期性的对它重新充电(即:刷新)。由于在执行读操作时电容也会放电,因此每次读操作之后也必须重新充电。刷新操作需要占用时钟周期,这可能会影响到其他的操作。虽然SRAM比DRAM的速度要快近10倍,但是它的价格也要比DRAM贵许多—事实上,SRAM要比DRAM贵近10倍。
内存的使用 使用ROM内存来保存PC上的BIOS程序非常理想,后者是一个基本的引导程序。这个引导程序非常小,可以驻留在较小的内存中(小于2MB)。ROM内存包括可编程ROM(PROM)、可擦写可编程ROM(EPROM)、电可擦写可编程ROM(EEPROM)等等。目前BIOS一般使用EEPROM,由于它可以通过加电擦除改写,由此能够对BIOS进行程序升级,从而在芯片中置入新的引导程序。这就是所谓的“闪写BIOS”。 起初的微机都是朝着廉价低档方向设计,其组件的成本也很低,系统内存也一直使用廉价(因此速度也慢)的DRAM。在PC出现时,DRAM的速度足够处理8086/8088 4.77MHz的总线速度,甚至在较快的80286处理器(总线速度可达12MHz,或80ns)上也是如此。 随着80386的出现,时钟速度可以达到20MHz、25MHz、甚至33MHz时,当时现有的DRAM就不能满足速度的要求。 为了消除处理器和主存速度之间的不一致,设计人员开始在主板上使用少量的SRAM内存,它们运行在系统总线速度下,用来保存最近使用过的数据。尽管SRAM的速度要比DRAM快很多,但是没过多久处理器的速度就再次超过了主板缓存的速度。在80486出现时,其芯片内部已经置入了8K的SRAM缓存,因为它运行在CPU速度下,因此被称作第一层(L1)缓存,而主板上的缓存则被称作L2。今天高性能的系统仍在沿用这种“内存层次结构”。 内存方面值得关注的问题 所有的DRAM的基本内核都相同,因此内部速度也相同,而等待时间也都相对比较大。在过去几年中,人们设计出了许多方案来优化或消除这些局限,然而结果往往是某个方面得到了改善,而另外某个方面却不如以前。由于SRAM的成本相对较高,行业的竞争相当激烈,因此DRAM仍然是大容量系统内存唯一可行的选择,包括在图形子系统中常常也是如此。SRAM内存通常仅用作缓存:外部缓存(位于主板上)或者内部缓存(内置到处理器或DRAM芯片中很少量的一部分)。 处理器主频的发展速度是相当惊人的,因此内存设计人员不得不在不显著提高其成本的前提下大力提高DRAM的速度。如果处理器需要一个以上的时钟周期来执行一条指令,而内存子系统可以以慢两到三倍的速度运行,那么内存还能够和CPU速度相协调。随着处理器性能越来越优良,已经可以在一个时钟周期内执行一条甚至多条指令。不幸的是,虽然处理器目前的速度可以达到500MHz,但是主存的速度却局限于100MHz(在某些情况下可能会达到133MHz)。这时内存和处理器之间的速度就存在失调现象。造成这种失调的主要原因是,主存通常使用DRAM,这种类型的内存本身就太慢了。 人们提出了许多设计SRAM和DRAM的方法并付诸实施。每种方法都希望能够着解决一定情况下的速度问题。然而不幸的是,我们还没有找到一种“理想”的内存体系结构来解决所有的问题。因为任何人都没有能够做到显著的提高DRAM的速度而不用显著的提高其成本。 目前的发展方向 处理器的速度仍在飞速的增长。大约在2000年主流处理器的速度将达到1GHz。现在正在使用的内存很快就会显得太慢,当然很快也会出现新的设计方案。在过去的一些年中,人们提出了许多种设计方案,但是由于营销和公司政策方面的原因,它们或被舍弃,或局限于很小的应用范围。 SRAM和DRAM内存经历了一个逐步演变的过程,从单芯片、异步、单排结构发展到多芯片、同步的多排结构,同时还采用了更多的先进技术,例如流水线操作、脉冲模式访问以及数据预取。此外还专门为图形、通信以及其他应用设计了专用的DRAM。有一点似乎是确定的——处理器和内存都将渐渐变得越来越廉价,生命周期也会相对变短许多。最终我们可能会看到这样一个局面:不仅L2缓存被嵌入到了芯片中,整个系统RAM也被嵌入了进来。到那时由于DRAM可以运行在,或者接近于,处理器速度下,因此没有必要再使用SRAM缓存。内存的升级也就是处理器的升级,然而总价格仍然维持在一个相对较低的水平上。 内存子系统 PC由下面几个基本的部分组成:中央处理单元、内存子系统、I/O子系统、可能还包括图形子系统。 在有关如何提高计算机性能的的论述中,大多数都集中讨论如何提高CPU的速度,而忽略了其他方面。虽然提高CPU的速度的确会在一定程度上提高系统的性能,但是从主存中获取数据也是一个不可忽视的问题。 内存控制器处于CPU和I/O子系统(包括图形子系统)之间。你可能会(正确的)猜到,所有的数据都必须经过内存——无论它们是进入还是离开处理器。如果处理器必须等待内存子系统发送或写入数据,那么就会浪费处理器的时钟周期,从而降低系统的总性能。 为了形象的说明这一点,我们可以考察一下一个CPU速度为500MHz、SDRAM速度为100MHz的系统。为了简化起见,我们假定处理器每个时钟周期内可以执行一条指令,在每个时钟周期内内存都可以发送/接收数据。同时不考虑可能会出现其他需要CPU去处理的操作。在这个简单的例子中,CPU每秒可以处理5亿条指令(和/或数据),而内存每秒只能传送一亿个数据。结果是在每5个CPU时钟周期中就有4个浪费在了等待上。即使CPU这个时候还可能会去处理某些中断,控制某些I/O操作等等,但是仍然还是有许多时间浪费在了等待数据上。 虽然已经出现了(或者可以开发出)高速内存来克服这个问题,但是就PC而言它们的成本往往显得过于高昂。在考虑这个问题的解决方案时,设计人员必须充分考虑可能的附加成本,考虑消费者是否愿意追加这个成本。正因为如此,许多先进的技术都被忽略了,而那些性能可接受但成本要低的多的设计大受欢迎。 采用缓存来提高性能 实际上的操作要比前面的例子复杂得多,尽管如此,我们仍能够感受到处理器的速度远远的超过了DRAM内存的速度。在内存中加入少量的SRAM缓存有助于消除速度不匹配的问题。随着时间的推移,缓存从最初的几个KB增加到了譬如桌面系统上的2MB缓存。某些高价品的服务器系统甚至包括了更多的缓存,对它们来说,价格不是最重要的考虑因素。 缓存是一个非常重要的临时存储区域,用来保存少量的数据位,这些数据相对CPU比较“近”。缓存理论的基本原理是所谓的时间和空间局部性。时间局部性简单的说就是被访问过一次的数据很快再次被访问的可能性很高,空间局部性的意思是,下一个被访问的数据区域将靠近于刚被访问过的数据。 我们可以用律师事务所来打个比方,在这里,文件一般都被放在文件柜里。当要处理一个案例时,可能会取出全部的案例文件并放入律师的公文包中。于是所有相关的文件都“伸手可及”(空间局部性)。在研究中,可能会有许多文件被多次查阅(时间局部性)。与此相比较,如果律师每次需要文件时都到文件柜里去取单个的文件——这样做将会花很多时间。 就大多数应用程序而言,使用缓存的效果非常好,研究也表明,正常工作时缓存可以满足CPU 98%的数据请求。然而不幸的是,随着处理器速度的进一步提高,主流应用程序变得越来越大,我们不得不不断的修改或调整所使用的缓存。实际上缓存理论的运用已经到达了极限,关于这一点我们将在后面的文章中作出论述。 从某种程度上来讲,简单的加入更多的缓存(或者更多的缓存层次)迟早会到达一个收益递减点,甚至有可能开始降低系统性能。还是使用前面那个类比,如果在律师的公文包中不是一个或两个案例文件,而是40或50个,你会发现问题依然会存在。某些应用程序的工作集非常大,甚至超过了2MB缓存,而指令集中的SSE会完全忽略缓存。这时,就必须采用其他的方法来从DRAM和/或SRAM中向CPU中快速的读取数据。 系统的总线速度 系统的总线速度是DRAM和CPU通信的速度,它也有可能成为制约系统高速的一个瓶颈问题。最初改善系统性能的基本方法都瞄准了它。实际上,在采用缓存技术之前,总线速度在很短的时间内从4.77MHz提高到了33MHz(从8088到80386)。尽管处理器的速度也在飞速的增长,但是在当时DRAM的速度足够快,仍足以匹配CPU的速度。 虽然最初的80486处理器的速度只有25MHz和33MHz,但是速度很快就达到了50MHz、66MHz、100MHz甚至133MHz。缓慢的DRAM速度将总线速度限制在最大50MHz下。这意味着处理器不得不双倍、三倍、或四倍分频时钟来获得更快的速度,因为在每个内存时钟周期内可以有两个或三个CPU时钟周期,于是造成速度明显的不匹配。采用SRAM缓存成为系统设计中重要的一环。 Pentium处理器采用了超标量体系结构,在每个周期内可以执行多条指令。同时,系统的总线速度提高到了60MHz,接着又增加到了66MHz。这样使得对快速DRAM的需求更加迫切。随着技术的飞速发展,处理器很快超过了200MHz,这时CPU不得不采用3x甚至更大的倍频因子。 系统的总线速度也在不断提高,先是增加到75MHz(最早用在Cyrix处理器上),然后增加到了100MHz。很快就又提高到了133MHz。我们还可以进一步提高总线的速度。 带宽 带宽实质上指的是给定时间内可以发送的最大数据量,通过总线速度乘以总线宽度可以得到带宽的大小。总线宽度指的是可以同时发送的数据位数。你可以把总线宽度看成系统高速公路上的车道数。使总线宽度加倍可以提高数据发送量两倍而不用提高总线速度。 早期的IBM PC(8086)的总线宽度为8位,到PC AT(80286)时就增加到了16位。很快在80386上增加到了32位。到出现Pentium?处理器时,又增加到了64位,目前仍在使用64位总线宽度。 从8位到64位的演变,以及总线速度的增长,都是为了提高带宽。Intel?在Pentium? Pro(以及后来的CPU上)采用双重独立总线设计,将L2缓存移到了它自己的总线上,从而极大的提高了带宽,这就是所谓的背部总线。 从理论上将,处理器可以处理大小等于时钟速度乘以总线宽度的全部数据。这意味着一个内存总线宽度为64位的233MHz处理器在理想情况下处理数据的速度可以达到1.8GB/Sec,然而66MHz的系统总线限制却将带宽限制为533MB/Sec。 唯一使数据速率达到处理器可接受范围的方法是提高内存的总线速度,使其等于处理器的速度。然而在实际应用中,只有那些高负荷的多任务多用户系统才需要使用全部的带宽。大多数的桌面系统甚至很少用到可用带宽的50%。 粒度 粒度是系统内存扩展增量的最小值。它必须足够小,这样初始成本可以维持在一个较低的水平,但是它也必须足够大,以便支持合理的扩展量。 随着总线宽度的提高,粒度也逐渐成为一个重要的问题。对于相同的芯片制造工艺,双倍总线宽度意味着芯片数目的加倍——内存的大小也因此加倍。结果是模块数量比用户所需要的要大,这样他们要么不得不使用更小的内存,要么使用比他们实际需要更大的内存。值得庆幸的是,由于内存的价格很低,这个问题显得比较次要。目前很少有家用PC会安装64MB或者更大的内存。 等待周期 等待周期指的是开始数据请求之后到接受到数据所花的时钟周期数。地址的锁存和译码、队列交换、以及将数据发送到输出缓冲区都会影响DRAM的等待周期。在首次访问DRAM芯片时甚至还需要两到三个周期来设置芯片。对于那些需要大量的随机内存访问的应用程序来说,知道这一点非常关键。 许多DRAM操作的优化考虑都集中在消除首次访问后的等待周期上,而不是去显著的减小等待周期。虽然大多数设计人员(特别是Intel的)主要关心带宽问题,但是等待周期也越来越成为影响系统平均性能的重要瓶颈问题。现实是,当带宽翻了1000番的时候,DRAM等待周期可能却只翻了八番。 等待周期问题被忽略的主要原因是成本问题。增加带宽和加入SRAM缓存是提高性能相对便宜的两种方法。然而不幸的是,大多数“便宜”的改进手段已经耗尽,这意味着要么花费较高的成本来提高性能,要么只获得有限的性能提高——除非出现了某些新突破。 有关内存的知识要点 随着处理器的速度越来越快,内存子系统已经越来越成为一个重要的性能瓶颈问题。系统和内存设计人员不断的采用一些方法使内存速度的发展跟上CPU发展速度而同时维持较低的成本。在这个方面,提高总线速度和加入少量的SRAM缓存两种方法做得比较成功,但它们也仅仅只是具体实践的一个方面。 几年来,内存也有了很大的改进,尽管并不象处理器的进步那么显著。在后面的文章中,我们将探讨如何改进SRAM和DRAM来提高速度和优化系统性能。
|