1.2 计算机存储系统概述
应用推进了存储系统的发展,这使得我们有必要对计算机存储系统的内涵和外延进行全面的分析,进而为设计新型存储系统提供更加清晰的思路。
1.2.1 计算机存储系统
现代计算机以图灵机为基本计算模型,以冯·偌依曼的"存储程序式计算机"为基本实现模型。其数据处理依赖于数据存取的过程,表现在两个方面,首先数据计算部件和数据存储是分开的,只有在需要时处理器才按照指令要求把所需的数据从存储设备读入处理器内部寄存器进行处理,在运算完成后把无需立即使用的数据写回存储设备进行保存;另一方面,所有的程序也是以数据的形式存放在存储器上,在执行时把每条指令依次读到处理器执行。
计算机存储系统是用来保存数据,并能够按照用户请求提供相应数据的部件、设备和计算机系统。事实上存储设备在本质上也是一种计算机系统,例如内存条本身也具有计算部件和寄存器。本质上,存储系统使得信息在时间上得以延续,而不会消逝,而计算机存储系统使得数字化信息得以保持在介质之中,在需要的时候能够提供及时的存取。
揭开存储系统的抽象"外壳",可以发现计算机系统中存储系统具有层次性的结构,存储系统根据和CPU的距离可分为多个层次,每层存储器的数据存取时间、数据传输带宽和容量是不同的。第0层一般是指处理器内部的寄存器组和一级、二级cache,第一层是指主板上的cache和随机存储器,这两层构成第一级存储,也被习惯称为主存储器。CPU可以通过指令直接访问主存储器中的数据。第二层是外存储器,相对于主存储器,二级存储系统不能直接被CPU访问,必须通过输入/输出(I/O,Input/Output)通道进行存取并且提供大容量和非易失的数据存储能力,典型的二级存储设备就是磁盘。第三级存储往往通过mount和dismount操作连接到计算机系统中,它们具有离线存储的特征,典型第三级存储设备是磁带库。第0层的存取时间以纳秒计算,其容量为KB级;而第二层的存取时间以毫秒计算,其容量为TB级。存储系统层次化的主要原因在于满足成本约束的情况,平衡存储容量和性能,得到容量接近最下层而性能接近最上层。存储空间层次化的不利之处在于必须设计复杂的数据管理机制保证数据正确的在不同层次间上下流动。
广义的存储设备包括CPU中的寄存器、多级Cache、内存和外部存储系统。前者也称为内存系统(Memory System),而后者称为存储系统(Storage System)。狭义的存储系统通常就是仅仅指外部存储系统。在本书中如果没有特别说明,存储系统就指外部存储系统。相对于内存系统,存储系统必须提供大容量和非易失性的数据存储能力,非易失性使得存储系统在掉电或者断连主机的情况下能够正确地保存数据。
存储网络的出现,使得存储的层次更加复杂,一个远地存储系统可以为主机提供存储服务,极大地扩充主机可以使用的存储空间,但同时引入了存储空间管理的复杂性。因为每个存储设备总是要提供相应的存储空间供系统存取数据,必须把这些独立的、基础的物理存储空间构成统一使用的逻辑存储空间,这也是存储虚拟化所做的工作,但随着数据存储系统中存储设备和存储层次的增加,这种统一过程的复杂度和难度也相应地增加。
在讨论存储系统层次性之后,存储系统得以使用的前提是必须对于存储空间和存储对象进行编址和标识,逻辑上通过对于标记对象的地址操作实现存储过程。以二进制形式存在的比特数据是计算机系统处理的基本对象,文字、数字、图像、声音和其他各种形式的信息被转化为比特。计算机本质上就是对数据的存储和运算。为了使得计算机能够方便得到数据的存储地址,存储设备必须能够提供数字地址空间,使得处理器通过计算地址读取所需数据或者存放结果数据到相应的存储位置。也就是存储器中的地址信息也是以数字的形式编址的。另一方面使用以数字标识的逻辑地址空间可以有效屏蔽底层存储设备的差异,例如磁盘和光盘在物理结构和存储原理上有很大的不同,但都能够提供寻址空间供计算机存取数据。也就是地址信息作为一种数据和其他的数据是同构的,计算机可以统一处理,这就为间接寻址提供了可能。其中线性编址是最简单的存储空间组织方式,也是计算机最容易理解和处理的。作为主要的存储设备,内存和磁盘都是通过提供线性的存储空间供计算机进行数据存储的。
间接寻址可以保证层次性存储结构的正确使用。寻址方式可以通过执行特定的程序能够产生更多变化,例如文件系统本质上也完成了寻址功能。在现代计算机层次性存储结构中,各层的存储容量有很大的不同。Cache以KB为单位,内存以MB为单位,而磁盘等存储设备是以GB为单位,海量存储系统是以TB为单位。在内存中存取数据的最小单位是机器位长,而磁盘中存取数据的最小单位是数据块,都是线性编址。磁盘等块设备是以LBA的形式提供线性地址的,网络存储系统一般提供数据块和文件两种操作接口。
网络存储系统出现和发展以前,存储系统主要为单个计算机系统提供存放数据的功能,由于存取过程的指令通过CPU发出,因此存储子系统往往依附于CPU和内存子系统为核心的主机系统,提供低速、大容量(相对于内存系统而言)和非易失的基本存储功能,其数据整个存取过程基本上由主机的操作系统控制,这种存储系统称之为DAS结构(Direct-Attached Storage)。事实上,在这种结构中存储系统数据管理和组织功能由本机操作系统实现。在使用存储系统方面也分为两种方式,一种是存储子系统作为层次内存结构的第三级载体,实现和内存交换页的虚拟内存器功能,页的大小是固定的,虚拟内存模块通过在磁盘上开辟一段连续空间保存置换出内存的页;另一种方式就是通过文件系统管理和存取磁盘系统上的数据,其基本方式是通过文件目录树的方式组织数据,而文件通过相应的文件分配表记录数据在磁盘上的物理存放。
数据量的大幅增长对于存储系统设计带来新的挑战,第一,需要更多的存储设备存放不断增加的数据;第二,需要在多个用户之间共享数据,以提高存储系统的利用率;第三,海量数据管理的复杂性必须占用相应服务器的大部分处理能力,这三方面的需求推动独立于单个主机的存储系统的出现。在充分吸收网络技术的基础上,具有大容量、可共享和可扩展的网络存储系统应运而生。这种存储系统具有高性能的处理部件、高速的内外部传输部件和大容量、可扩展的存储能力,事实上它已经成为提供大容量数据存储服务的独立计算机系统。
存储系统虽然在过去几十年内无论在功能还是在规模方面都有了极大的发展,计算机存储系统最为基本的功能依然是保存数据,并提供存取数据的操作集。存储系统通过存储介质存放数据,每种存储介质有其自身的物理存储机理,例如磁盘通过磁记录方式保持二进制数据,并能通过磁头的读写过程实现数据在物理介质的存取。作为存储系统的设计者往往并不需要了解物理存储过程的全部细节,例如磁介质中每个磁簇的磁场变化的具体物理过程。但必须知道实际存储过程的一些宏观特征和操作特征,包括容量、数据布局、性能和可靠性等,例如在磁盘驱动器中,数据是如何按照磁道和扇区分布,磁头的寻找磁道和定位扇区过程及其相应的时间开销。因为这些存取特性直接决定了存储系统的性能和可靠性等设计参数。
另一方面存储系统必须提供一系列存取操作实现对于存储系统中数据的访问,存取操作包括访问接口及其相应的存取操作集。访问接口也提供了用户对于存储系统访问的操作语义集,例如很多块存储设备采用SCSI的访问接口,这种接口提供了以固定大小块为单位的线性空间,请求按照存储单元的块地址进行访问。访问接口事实上抽象存储系统实际存取过程,屏蔽存储系统内部的复杂结构。而对应的存取操作依赖于设备的实际存储机制,例如上述块存储设备提供逻辑块地址到物理地址的映射。事实上在标准的存取接口下,不断优化存储系统中实际的存取操作一直是一个重要的设计方法,另一方面如何设计更加灵活和高效的存取接口也受到越来越多的关注。
数据存储系统就是以提供良好存储服务为目的的计算机软硬件系统。数据存储系统从结构上可以分为物理结构和逻辑结构,前者指数据存储系统中物理设备及其组成方式,包括存储设备、计算设备、连接设备以及相应的拓扑结构等;后者指的是存储系统数据存取和管理的逻辑结构,及其相应的管理软件系统。需要说明的是数据存储系统包括传统上的计算机存储系统,同时比后者具有更丰富的内涵。因为计算机存储系统更主要的是从计算机系统物理组成的角度研究数据存储系统,也即是偏重于物理存储结构设计;而数据存储系统考虑到物理存储结构的同时,也包括在物理基础上设计相适应的逻辑存储结构,而这种逻辑结构必须考虑到数据的应用背景和特征,以及相应的要求对存储系统设计产生的重要影响,另外应用级的存储服务软件也属于数据存储系统的有机组成部分。