按理说,没有人愿意为自己不曾使用的东西付钱,但在过去相当长的一段时间里,企业的存储系统管理者却不得不这样做。传统磁盘存储设备购买和配置的方式非常死板,导致存储设备的空间利用率始终在低水平徘徊。因此过去十年间,如何提升存储效率一直是业内的热点主题,并成为大多数存储专家研究的目标。但迄今为止,只有自动精简配置技术在这方面实现了突破,产生了实实在在的效益。
自动精简配置的概念也许很容易理解,但它事实上却是一项复杂的技术。如果一个磁盘阵列仅仅针对实际的数据分配存储空间,那么它就能比传统存储保存多得多的数据量。而传统存储会占用所有未来才可能用到的空间(从自动精简配置的角度看,其实没有任何必要)。此外,从磁盘阵列上移除那些应用程序创建和使用的数据有相当多的步骤,到目前为止还没有一种标准的通信机制能帮助存储识别应用层的数据到底有没有被使用。
各存储厂商针对这些问题所用的方法五花八门,但那些最有效的机制往往很难用在过去的存储阵列上。这就是为什么新一代存储系统往往来自于那些小公司,包括了高效的自动精简配置技术,且已经发展了较长的时间。而那些行业领导型公司,也许直到最近才开始增加此类功能。
精简写分配
在传统存储设备里,磁盘与服务器端的可见容量是一一对应的。对于块存储技术而言,服务器端看到的是一个固定大小的盘、卷或者LUN,而且空间中的每一个(数据)位都指向后端磁盘阵列中相应的磁盘驱动器。比如Windows Server中C盘的空间是100GB,那么磁盘阵列里就一定会有几块磁盘组成RAID组,并提供这100GB的可访问预留空间。
最基本的自动精简配置应用是从传统的空间分配方式直接演化而来的。所有的存储空间汇集到一个资源池中,并使用统一大小的“页面”将空间分块,最终,按需分配给服务器的是资源池中的“页面 “而不是最初的存储空间。在我们提及的例子中,100GB大小的C盘可能只包含10GB的文件数据,而映射到后端磁盘阵列中的实际使用空间也仅仅10GB而已。如果服务器端有新的文件写入,阵列端则会从空闲资源池中划拨新的空间给服务器。
这种“随写随分配”的自动精简配置方式今天已经相当普及。多数中端和企业级存储阵列以及一些小型设备都包含这种功能。其中,有些产品是内置的原生功能;有的产品需要通过附加选件实现。不过,这个方式也有一定的问题。
一个显而易见的问题在于,这样的系统只能精简一次。在写入新文件时,大多数文件系统倾向于使用新的空间,以避免出现碎片;在删除内容时,只会在文件系统层简单的将该文件打上不可用标记,而不会写零擦除或将空间释放给后端的磁盘阵列。这些文件系统最终会吞噬掉全部预分配给它们的空间,即使并没有太多的额外数据写进来。这不仅仅降低了系统的效率,而且会带来过量使用(over-commit)的风险,一旦磁盘阵列不能响应空间增加的请求,写操作将陷入停顿。
这里我们要表达的观点是,没有精简空间回收功能的自动精简配置是没有价值的,因为长期使用下来,用户并不会获得太多的收益。另外,多数的存储管理员主观上认为“精简的存储”必须始终保持“精简”,所以有效地回收闲置空间正在迅速成为新的功能需求。
精简回收的挑战
对于自动精简配置技术来说,回收闲置空间是比准确分配空间更难实现的部分。在各种自动精简配置的实践中,是否能让闲置空间返回空闲存储池是差异的关键,而且到目前为止,在这一点上业内各公司仍然处于各行其是的状态。
难以实现精简回收功能的根源在于应用程序和存储系统之间缺乏沟通。像上文提到的那样,文件系统不会有精简的“意识”,当一份空间不在被使用时,没有现成的机制去通报这些情况。而有效自动精简配置的关键就是要发现回收闲置空间的机会。这里有两种方法可以从底层实现这一机制:
· 存储阵列可以侦听其接收和保存的数据,并且当出现回收空间的机会时,阵列能够尝试去实现这个操作。
· 修改服务器端的设置,当空间不在使用时,从服务器端发信号给后端的磁盘阵列,提示阵列实行空间回收。
前一种方法技术上较难实现,但可能更有效,因为操作系统厂商似乎对为其产品增加精简功能并没有太多的热情。像Data Robotics公司的Drobo存储系统就可以侦听某些常见的分区和文件系统类型,并判定出哪些磁盘块是空闲的,之后进行回收和再利用。但是,考虑到可用的操作系统、应用程序和卷管理器软件的数量十分庞大,因此这种技术实现起来是极其困难的。
而对于那些采用后一种精简配置方法的企业来说,关键的话题则是改进服务器和存储系统之间的通讯机制。
全零页回收
最有名的精简使能技术也许就是“全零页回收(zero page reclaim)”。磁盘阵列以页面为单位划分存储空间,并且按着存储数据的需要分配页面。如果发现某个页面的内容全部为0,那么这个页面将被回收到空闲资源池。未来发生的任何“读请求“都会产生出全零页面,而任何的”写请求“都会触发另一个页面被分配出去。当然了,技术实现不可能像说的这么简单。
事实上全部写零可能是有问题的。毕竟,写一个0与写一个1需要消耗的CPU和I/O资源是一样的,而服务器和存储系统为此损耗的效率也不亚于容量的浪费。为此,负责SCSI存储接口标准的“T10技术委员会“已经指定了一个叫做“WRITE_SAME”的SCSI命令,用以消除重复的I/O,而且,该命令还衍生出所谓的“丢弃位(discard bit)”,用来通知磁盘阵列它们不再需要保存那些全零数据。
大多数磁盘阵列还不具备在写操作过程中发现全零页的能力。相反,它们会先将数据写入磁盘,随后通过一个扫描进程找出并丢弃那些全零的数据页。因此,只有在完成扫描和丢弃操作之后,空间才能释放出来。这个进程可以通过后台策略自动运行,亦可让管理员手动开启。有些磁盘阵列能在做卷镜像或迁移的时候发现全零页,进一步改进了空间的利用率。
原文地址:http://www.searchstorage.com.cn/showcontent_52818.htm