长期以来,已经发明了广泛用于存储系统中的基于SSD的性能增强技术。 首先,这是将SSD用作存储空间,效率高达100%,但价格昂贵。 因此,使用对等和缓存技术,其中SSD仅用于最流行(“热”)数据。 撕裂对于长期(日-周)使用“热”数据的场景非常有用。 相反,缓存是用于短期(分钟数小时)的。 这两个选项都在QSAN XCubeSAN存储中实现。 在本文中,我们将考虑第二种算法的实现-SSD缓存 。
SSD缓存技术的本质是将SSD用作硬盘和控制器内存之间的中间缓存。 SSD的性能当然要比控制器自身的缓存的性能低,但其容量要高一个数量级。 因此,我们在速度和音量之间取得了折衷。
使用SSD读取缓存的指示:
- 读取操作胜于写入操作(通常是数据库和Web应用程序的特征);
- 以硬盘阵列的形式出现的瓶颈;
- 请求的数据量小于SSD缓存的大小。
除了操作的性质外,使用读/写SSD缓存的指示是相同的原因-混合类型(例如,文件服务器)。
大多数存储供应商在其产品中使用只读SSD缓存。 QSAN与它们之间的根本区别在于 ,还可以使用缓存进行写入。 要激活QSAN存储中的SSD缓存功能,需要单独的许可证(以电子形式提供)。
XCubeSAN中的SSD缓存在物理上实现为单独的SSD缓存池。 系统中最多可以有四个。 当然,每个池都使用自己的一组SSD。 并且已经在虚拟磁盘的属性中,我们确定它是否将使用缓存池以及使用哪个缓存池。 可以在不停止I / O的情况下在线完成对卷启用和禁用缓存的操作。 同样在“热”上,您可以将SSD添加到池中并将其从池中删除。 创建SSD池缓存时,必须选择将在哪种模式下工作:只读或读+写。 它的物理组织取决于它。 由于池的高速缓存可以是多个,因此功能可以有所不同(也就是说,系统可以具有用于同时读取和读取+写入的高速缓存池)。
如果使用只读池缓存,则它可以包含1-8个SSD。 磁盘不必具有相同的卷数和一个供应商,因为它们被组合为NRAID +结构。 池中的所有SSD都是共享的。 系统独立尝试并行化所有SSD之间的传入请求,以实现最佳性能。 如果其中一个SSD发生故障,则不会发生任何不良情况:毕竟,缓存仅包含存储在硬盘驱动器阵列上的数据的副本。 只是可用的SSD缓存数量会减少(如果您使用一个驱动器上的原始SSD缓存,则为0)。
如果将高速缓存用于读+写操作,则池中SSD的数量必须是2的倍数,因为内容是在驱动器对上镜像的(使用NRAID 1+结构)。 由于高速缓存可能包含尚未写入硬盘驱动器的数据,因此有必要复制高速缓存。 在这种情况下,高速缓存池中SSD的故障将导致信息丢失。 在NRAID 1+的情况下,SSD故障只会导致高速缓存过渡到只读状态,从而将未记录的数据从硬盘驱动器中转储到阵列中。 更换发生故障的SSD后,缓存将返回其原始操作模式。 顺便说一句,为了提高安全性,可以为专用于读取和写入的缓存分配专用的热备用。
在XCubeSAN中使用SSD缓存功能时,对存储控制器的存储容量有许多要求:系统内存越多,可用的缓存池就越大。
与大多数仅提供开/关选项作为SSD缓存设置的存储供应商不同,QSAN提供了更多选项。 特别是,您可以根据负载的性质选择缓存操作模式。 三个预定义的模板在工作上最接近相应的服务:数据库,文件系统,Web服务。 另外,管理员可以通过设置所需的参数值来创建自己的配置文件:
- 块大小(缓存块大小)-1/2/4 MB
- 读取块以将其复制到高速缓存的请求数(读取时存储阈值)为1..4
- 写入块以将其复制到缓存的请求数(写入时存储阈值)为0..4
| 
|
配置文件可以随时更改,但是当然可以将缓存的内容清零并对其进行新的“预热”。
考虑到SSD缓存的操作原理,我们可以区分使用SSD缓存时的主要操作:
不在缓存中时读取数据
- 来自主机的请求发送到控制器;
- 由于所请求的内容不在SSD缓存中,因此它们是从硬盘驱动器读取的;
- 读取的数据将发送到主机。 同时,正在检查这些块是否“热”。
- 如果是这样,它们将被复制到SSD缓存中以备将来参考。
读取缓存中存在的数据
- 来自主机的请求发送到控制器;
- 由于请求的数据在SSD缓存中,因此从那里读取数据。
- 读取的数据将发送到主机。
使用读取缓存时写入数据
- 来自主机的写请求发送到控制器;
- 数据被写入硬盘驱动器;
- 主机返回有关成功录制的响应;
- 同时,检查该块是否“热”(比较“写入时填充阈值”参数)。 如果是这样,它将被复制到SSD缓存中以备将来使用。
使用读/写缓存时写数据
- 来自主机的写请求发送到控制器;
- 数据写入SSD缓存;
- 主机返回有关成功录制的响应;
- 后台来自SSD缓存的数据将写入硬盘;
业务验证
试验台2个服务器(CPU:2个Xeon E5-2620v3 2.4Hz / RAM:32GB)通过两个端口通过16G光纤通道直接连接到XCubeSAN XS5224D存储系统(16GB RAM /控制器)。
使用16 x Seagate Constellation ES,ST500NM0001、500GB,SAS 6Gb / s,结合RAID5(15 + 1),用于数据阵列和8个HGST Ultrastar SSD800MH.B,HUSMH8010BSS200、100GB,SAS 12Gb / s作为缓存
创建了2个卷:每个服务器一个。
测试1.具有1-8个SSD的SSD只读缓存
SSD快取
- I / O类型:定制
- 缓存块大小:4MB
- 读取时填充的阈值:1
- 写时填充阈值:0
| I / O模式
- 工具:IOmeter V1.1.0
- 工人数:1
- 杰出(队列深度):128
- 访问规范:4KB,100%读取,100%随机
|
从理论上讲,缓存池中的SSD越多,性能就越高。 在实践中,这已得到确认。 数量很少的固态硬盘数量的唯一显着增加不会导致爆炸性影响。
测试2.使用2-8 SSD的读写模式下的SSD缓存
SSD快取
- I / O类型:定制
- 缓存块大小:4MB
- 读取时填充的阈值:1
- 写时填充阈值:1
| I / O模式
- 工具:IOmeter V1.1.0
- 工人数:1
- 杰出(队列深度):128
- 访问规范:4KB,100%写入,100%随机
|
结果相同:爆炸性的性能增长以及随SSD数量的增加而扩展。
在这两个测试中,操作数据量都小于总缓存大小。 因此,随着时间的流逝,所有块都被复制到缓存中。 实际上,该工作是使用SSD进行的,几乎不会影响硬盘驱动器。 这些测试的目的是清楚地展示根据SSD的数量预热缓存和扩展其性能的有效性。
现在,让我们从天堂回到大地,并在数据量大于缓存大小的情况下检查更重要的情况。 为了使测试在合理的时间内通过(高速缓存的“预热”术语随卷大小的增加而显着增加),我们将自己限制为120GB。
测试3.数据库仿真
SSD快取
- I / O类型:数据库
- 缓存块大小:1MB
- 读取时填充的阈值:2
- 写时填充阈值:1
| I / O模式
- 工具:IOmeter V1.1.0
- 工人数:1
- 杰出(队列深度):128
- 访问规范:8KB,67%读取,100%随机
|
判决
当然,显而易见的结论是,使用SSD缓存的良好效率表明它可以提高任何存储系统的性能。 对于QSAN XCubeSAN,此声明完全适用:SSD缓存功能实现完美。 这适用于对读写的支持,针对任何用例的灵活工作设置以及整个系统的最终性能。 因此,以非常合理的成本(许可证的价格可与1-2个SSD的成本相提并论),您可以显着提高整体性能。