多年来,我们这些存储行业人士依赖于各种标杆来衡量存储系统在不同条件下的相对性能。随着存储系统包含新的技术,包含数据缩减技术和作为高速缓存或自动分层的闪存记忆体,我们现有标杆组合的报告结果开始不能直接用于比较新一代存储系统在实际世界中的性能。
最常用的存储标杆是IOmeter。这个标杆原来是英特尔开发的,从2001年开始成为SourceForge上的开源项目。IOmeter可以执行不同大小的随机和顺序I/O操作,汇报IOPs(每秒输入输出)数字、吞吐率和系统延迟时间。IOmeter的优点是免费和便于使用。因此,我们已经开发出各种IOmeter访问模式,混合了不同大小的IO请求以及随机/顺序访问模式来模仿文件、网络和数据库服务器。
这几年我们听到应用程序厂商告诉我们说存储系统高速缓存的影响应该减少到最小,我们调整了我们的测试套件来衡量实际的磁盘性能,将存储系统RAM(随机存取记忆体)高速缓存的影响最小化。由于即使今天的RAM高速缓存也只有数GB而已,因此在数据集或卷上运行几次高速缓存大小的标杆测试可以确保我们不会将一个快速的高速缓存看成一个快速的存储系统。
可是一旦我们开始测试以闪存为高速缓存或自动存储层的存储系统,系统将不再提供测试数据集上持续的性能。在运行实际应用程序的时候,数据一些部分,比如索引,将成为“热数据”并由闪存提供访问服务,而数据集的其他部分,比如事务日志或销售记录,只会被访问一次或两次。这些更冷的数据将由磁盘提供访问服务。
问题是当IOmeter进行随机IO操作的时候,它的IO请求是平均分布在被测试卷上的。和实际的应用程序不同,IOmeter不会创建热点,因此,IOmeter的结果不会显示出实际应用程序加入闪存后显著的性能提升。
为了从复合存储系统中获得有意义的测试结果,我们的标杆需要按照实际应用程序访问存储的方式来访问存储。TPC-C和SPECsfs这样的标杆基于的是实际用户和应用程序的IO模式,因此它们会在测试数据上创建热区域和冷区域,它们的结果比起IOmeter与真实世界的性能更加具有相关性。问题是这些标杆的获取和运行很贵,因此厂商们一般都倾向于只汇报专门调整过的使用大量小型磁盘驱动器的高端存储系统或其他在真实世界中比较罕见的配置方案的测试结果。
万一这还不够让人沮丧的话,那么另一个令人沮丧的情况是即使最先进的标杆也是写入同样的或随机的数据来创建整个数据集。虽然磁盘驱动器和大多数SSD固态硬盘(固态驱动器)无论你给它们写入什么数据都是一样的性能,但是万一存储系统配置有数据缩减技术(比如数据压缩或重复数据删除)的话,情况就不一样了。万一我们测试一个执行在线重复数据删除的存储系统,比如来自Pure Storage、Nimbus Data或Solidfire的新一代全固态系统,那么使用一个持续按固定数据模式写入的标杆,系统会在几MB的记忆体里存储到100GB的测试文件,排除几乎所有到后端磁盘驱动器或闪存的IO,提供从理论上来说毫不实际的性能数据。
我们在Demartek的竞争对手最近贴出了由几个流行标杆创建的数据文件,你可以看到问题的严重性。
创建一个可以在实际地点存储实际数据的标杆是一个重要的任务。这个标杆必须从某种形式的目录中读取数据然后将数据写入到测试系统。为了给一个500GB闪存的企业级存储阵列创建足够的传输流,我们将必须让几个服务器协同工作,让它们从一个存储系统中读取源数据,而这个源数据存储系统的速度至少必须和运行标杆测试的系统的顺序IO速度一致。我确实很希望有人可以很快提出一个好解决方案。