主存储器
主存储器(Mainmemory,MM)是指中央处理器 (CPU)可以直接访问的、存放当前正在使用的(即执行中)程序和数据的存储器,简称主存。目前,主存主要采用半导体存储器。主存的存取速度和容量对整个计算机系统的性能有重要的影响。
概况
主存储器,指的就是主板上的存储部件,是CPU直接与之沟通,并用其存储数据的部件,存放当前正在使用的(即执行中)的数据和程序,它的物理实质就是一组或多组具备数据输入输出和数据存储功能的集成电路,内存只用于暂时存放程序和数据,一旦关闭电源或发生断电,其中的程序和数据就会丢失。主存储器从70年代起,已逐步采用大规模集成电路构成。用得最普遍的也是最经济的动态随机存储器芯片(DRAM)。1995年集成度为64Mb(可存储400万个汉字)的DRAM芯片已经开始商业性生产,16MbDRAM芯片已成为市场主流产品。DRAM芯片的存取速度适中,一般为50~70ns。有一些改进型的DRAM,如EDODRAM(即扩充数据输出的DRAM),其性能可较普通DRAM提高10%以上,又如SDRAM(即同步DRAM),其性能又可较EDODRAM提高10%左右。1998年SDRAM的后继产品为SDRAMⅡ(或称DDR,即双倍数据速率)的品种已上市。
在追求速度和可靠性的场合,通常采用价格较贵的静态随机存储器芯片(sram),其存取速度可以达到了1~15ns。无论主存采用DRAM还是SRAM芯片构成,在断电时存储的信息都会“丢失”,因此计算机设计者应考虑发生这种情况时,设法维持若干毫秒的供电以保存主存中的重要信息,以便供电恢复时计算机能恢复正常运行。鉴于上述情况,在某些应用中主存中存储重要而相对固定的程序和数据的部分采用“非易失性”存储器芯片(如EPROM,快闪存储芯片等)构成;对于完全固定的程序,数据区域甚至采用只读存储器(ROM)芯片构成;主存的这些部分就不怕暂时供电中断,还可以防止病毒侵入。
工作原理
它在工作时,中央处理器将地址送到地址寄存器( MAR),并发出“ 读出” 或“ 写 入”命令。地址译码器对地址进行译码,以选择相应的存储单元。主存接收到读出命令,则将存储单 元的数据读出,送往存储器数据寄存器(MDR),接收到写入命令,则将MDR中的数据写入存储单元。地址寄存器、数据寄存器逻辑上属主存储器,物理位置在中央处理器芯片中。
结构构成
通常,主存储器由只读存储器(ROM)和随机存 取存储器(RAM)两部分组成。ROM中存储的内容只能读不能写,并且断电后信息仍保留,一般用于存放系统程序;RAM可读可写,但断电后信息会丢失。主要用于存储正在运行的用户程序和数据。RAM和ROM共享主存的地址空间。
由于单个存储芯片的容量有限,为了提供更大的主存容量,主存储器通常由一定数量的存储芯片组合而成。目前,主存储器常以内存条的形式实现。内存条是在一个条形的印制电路板上,用若干个存储芯片组成一定容量的存储模块。主板中通常有多个内存条的插槽,因此可以很方便地扩充主存的容量。按内存条的接口形式,常见内存条有两种:单列直插内存条(SIMM)和双列直插内存条(DIMM)。
技术指标
容量
在一个存储器中容纳的存储单元总数通常称为该存储器的存储容量。存储容量用字数或字节数(B)来表示,如64K字,512KB,10MB。外存中为了表示更大的存储容量,采用MB,GB,TB等单位。其中1KB=2^10B,1MB=2^20B,1GB=2^30B,1TB=2^40B。B表示字节,一个字节定义为8个二进制位,所以计算机中一个字的字长通常为8的倍数。存储容量这一概念反映了存储空间的大小。
时间
又称存储器访问时间或读∕写时间,是指从启动一次存储器操作到完成该操作所经历的时间。具体讲,从一次读操作命令发出到该操作完成,将数据读入数据缓冲寄存器为止所经历的时间,即为存储器存取时间。
周期
是指连续启动两次独立的存储器操作(如连续两次读操作)所需间隔的最小时间。通常,存储周期略大于存储时间,其时间单位为ns。
连接及控制
主存容量的扩展 由于存储芯片的容量有限,主存储器往往要是由一定数量的芯片构成的位扩展:位扩展是指只在位数方面扩展(加大字长),而芯片的字数和存储器的字数。位扩展的连接方式是将各存储芯片的地址线、片选线和读写线相应地并联起来,而将各芯片的数据线单独列出字扩展:字扩展是指仅在字数方面扩展,而位数不变。字扩展将芯片的地址线、数据线、读写控制线并联,而片选信号来区分各个芯片字和位同时扩展:当构成一个容量较大的容器时,往往需要在字数方向和位数方向上同时扩展
存储芯片的片选
CPU要实现对存储单元的访问,首先要选择存储芯片,即进行片选;然后再从选中的芯片中依地址码选择出相应的存储单元,以进行数据的存取,这称为字选。片内的字选是由CPU送出的N条低位地址线完成的,地址线直接接到所有存储芯片的地址输入端,而存储芯片的片选信号则大多是通过高位地址译码后产生的。
线选法:
线选法就是用除片内寻址外的高位地址线直接分别接至各个存储芯片的片选端,当某地址线信息为0时,就选中与之对应的存储芯片。这些片选地址线每次寻址时只能有一位有效,不允许同时有多位有效,这样才能保证每次只选中一个芯片。线选法不能充分利用系统的存储器空间,把地址空间分成了相互隔离的区域,给编程带来了一定困难
全译码法:
全译码法将除片内寻址外的全部高位地址线都作为地址编译器的输入,译码器的输出作为各芯片的片选信号,将它们分别接到存储芯片的片选端,以实现对存储芯片的选择。全译码法的优点是每片芯片的地址范围是唯一确定的,而且是连续的,也便于扩展,不会产生地址重叠的存储区,但全译码法对译码电路要求较高
部分译码法:所谓部分译码法即用除片内寻址外的高位地址的一部分来译码产生片选信号,部分译码法会产生地址重叠。
CPU与主存储器的连接主存与CPU之间的硬连接:主存与CPU的硬连接有三组连线:地址总线(AB)、数据总线(DB)和控制总线(CB)。把主存看作一个黑盒子,存储器地址寄存器(MAR)和存储器数据寄存器(MDR)是主存和CPU之间的接口。MAR可以接收由程序计数器(PC)的指令地址或来自运算器的操作数的地址,以确定要访问的单元。MDR是向主存写入数据或从主存读出数据的缓冲部件。MAR和MDR从功能上看属于主存,但通常放在CPU内。
CPU对主存的基本操作:CPU对主存进行读写操作时,首先CPU在地址总线上给出地址信号,然后发出相应的读写命令,并在数据总线上交换信息。读写基本操作如下:
读:读操作是指从CPU送来的地址所指定的存储单元中取出信息,再送给CPU,其操作过程如下:
地址——\u003eMAR——ABCPU将地址信号送至地址总线
ReadCPU发读命令
WaitForMFC等待存储器工作完成信号
M(MAR)——\u003eDB——\u003eMDR读出信息经数据总线至CPU
写:写操作是指将要写入的信息存入CPU所指定的存储单元中,其操作过程是:
地址——\u003eMAR——\u003eABCPU将地址信号送至地址总线
数据——\u003eMDR——\u003eDBCPU将要写入的数据送至数据总线
WriteCPU发写命令
WaitForMFC等待存储器工作完成信号
CPU与主存之间的速度匹配:同步存储器读取和异步存储器读取。异步存储器读取:CPU和主存间没有统一的时钟,由主存工作完成信号(MFC)通知CPU“主存工作已完成”
同步存储器读取:CPU和主存采用统一时钟,同步工作,因为主存速度较慢,所以CPU与之配合必须放慢速度,在这种存储器中,不需要主存工作完成信号。
主存优化
市场上并不缺少提高数据存储效率的新技术,然而这些新技术绝大多数都是关注备份和存档的,而非主存储。但是,当企业开始进行主存储数据缩减时,对他们来说,了解主存储优化所要求的必要条件十分重要。
主存储,常常被称为1级存储,其特征是存储活跃数据――即经常被存取并要求高性能、低时延和高可用性的数据。主存储一般用于支持关键任务应用,如数据库、电子邮件和交易处理。大多数关键应用具有随机的数据取存模式和不同的取存要求,但它们都生成机构用来运营它们的业务的大量的数据。因此,机构制作数据的许多份拷贝,复制数据供分布使用,库存数据,然后为安全保存备份和存档数据。
绝大多数数据是起源于主数据。随着数据存在的时间增加,它们通常被迁移到二级和三级存储保存。因此,如果机构可以减少主数据存储占用空间,将能够在数据生命期中利用这些节省下来的容量和费用。换句话说,更少的主存储占用空间意味着更少的数据复制、库存、存档和备份。
试图减少主存储占用空间存储管理人员可以考虑两种减少数据的方法:实时压缩和数据去重。
直到不久前,由于性能问题,数据压缩一直没有在主存储应用中得到广泛应用。然而,Storwize等厂商提供利用实时、随机存取压缩/解压技术将数据占用空间压缩15:1的解决方案。更高的压缩率和实时性能使压缩解决方案成为主存储数据缩减的可行的选择。
在备份应用中广泛采用的数据去重技术也在被应用到主存储。目前为止,数据去重面临着一大挑战,即数据去重处理是离线处理。这是因为确定数量可能多达数百万的文件中的多余的数据块需要大量的时间和存储处理器做大量的工作,因此非常活跃的数据可能受到影响。当前,推出数据去重技术的主要厂商包括NetApp、DataDomain和OcarinaNetworks。
主存部署
零性能影响
与备份或存档存储不同,活跃数据集的性能比能够用某种形式的数据缩减技术节省的存储容量更为关键。因此,选择的数据缩减技术必须不影响到性能。它必须有效和简单;它必须等价于“拨动一个开关,就消耗更少的存储”。
活跃存储缩减解决方案只在需要去重的数据达到非活跃状态时才为活跃存储去重。换句话说,这意味着实际上只对不再被存取但仍保存在活跃存储池中的文件――近活跃存储级――进行去重。
去重技术通过建议只对轻I/O工作负载去重来避免性能瓶颈。因此,IT基础设施的关键组件的存储没有得到优化。数据库排在关键组件清单之首。由于它们是1级存储和极其活跃的组件并且几乎始终被排除在轻工作负载之外,去重处理从来不分析它们。因此,它们在主存储中占据的空间没有得到优化。
另一方面,实时压缩系统实时压缩所有流经压缩系统的数据。这导致节省存储容量之外的意外好处:存储性能的提高。当所有数据都被压缩时,每个I/O请求提交的数据量都有效地增加,硬盘空间增加了,每次写和读操作都变得效率更高。
实际结果是占用的硬盘容量减少,总体存储性能显着提高。
主存储去重的第二个好处是所有数据都被减少,这实现了包括数据库在内的所有数据的容量节省。尽管Oracle数据库环境的实时数据压缩可能造成一些性能问题,但迄今为止的测试表明性能提高了。
另一个问题是对存储控制器本身的性能影响。人们要求今天的存储控制器除了做伺服硬盘外,还要做很多事情,包括管理不同的协议,执行复制和管理快照。再向这些功能增加另一个功能可能会超出控制器的承受能力――即使它能够处理额外的工作负载,它仍增加了一个存储管理人员必须意识到可能成为潜在I/O瓶颈的过程。将压缩工作交给外部专用设备去做,从性能问题中消除了一个变数,而且不会给存储控制器造成一点影响。
高可用性
许多关注二级存储的数据缩减解决方案不是高可用的。这是由于它们必须立即恢复的备份或存档数据不像一级存储中那样关键。但是,甚至在二级存储中,这种概念也逐渐不再时兴,高可用性被作为一种选择添加到许多二级存储系统中。
可是,高可用性在主存储中并不是可选的选项。从数据缩减格式(被去重或被压缩)中读取数据的能力必须存在。在数据缩减解决方案中(其中去重被集成到存储阵列中),冗余性是几乎总是高可用的存储阵列的必然结果。
在配件市场去重系统中,解决方案的一个组件以数据的原始格式向客户机提供去重的数据。这个组件就叫做读出器(reader)。读出器也必须是高可用的,并且是无缝地高可用的。一些解决方案具有在发生故障时在标准服务器上加载读出器的能力。这类解决方案经常被用在近活跃的或更合适的存档数据上;它们不太适合非常活跃的数据集。
多数联机压缩系统被插入系统中和网络上,放置(逻辑上)在交换机与存储之间。因此,它们由于网络基础设施级上几乎总是设计具有的高可用性而取得冗余性。沿着这些路径插入联机专用设备实现了不需要IT管理人员付出额外努力的无缝的故障切换;它利用了已经在网络上所做的工作。
节省空间
部署这些解决方案之一必须带来显着的容量节省。如果减少占用容量的主存储导致低于标准的用户性能,它没有价值。
主数据不具有备份数据通常具有的高冗余存储模式。这直接影响到总体容量节省。这里也有两种实现主数据缩减的方法:数据去重和压缩。
数据去重技术寻找近活跃文件中的冗余数据,而能取得什么水平的数据缩减将取决于环境。在具有高冗余水平的环境中,数据去重可以带来显着的ROI(投资回报),而另一些环境只能取得10%到20%的缩减。
压缩对所有可用数据都有效,并且它在可以为高冗余数据节省更多的存储容量的同时,还为主存储应用常见的更随机的数据模式始终带来更高的节省。
实际上,数据模式冗余度越高,去重带来的空间节省就越大。数据模式越随机,压缩带来的空间节省就越高。
独立于应用
真正的好处可能来自所有跨数据类型(不管产生这些数据是什么应用或数据有多活跃)的数据缩减。虽然实际的缩减率根据去重数据的水平或数据的压缩率的不同而不同,但所有数据都必须合格。
当涉及存档或备份时,应用特有的数据缩减具有明确的价值,并且有时间为这类数据集定制缩减过程。但是对于活跃数据集,应用的特殊性将造成性能瓶颈,不会带来显着的容量缩减的好处。
独立于存储
在混合的厂商IT基础设施中,跨所有平台使用同样的数据缩减工具的能力不仅将进一步增加数据缩减的ROI好处,而且还简化了部署和管理。每一个存储平台使用一种不同的数据缩减方法将需要进行大量的培训,并造成管理级上的混乱。
互补
在完成上述所有优化主存储的工作后,当到了备份主存储时,最好让数据保持优化的格式(被压缩或去重)。如果数据在备份之前必须扩展恢复为原始格式,这将是浪费资源。
为备份扩展数据集将需要:
使用存储处理器或外部读出器资源解压数据;
扩展网络资源以把数据传送给备份目标;
把额外的资源分配给保存备份数据的备份存储设备。