在QSAN XCubeSAN存储中实施SSD缓存

长期以来,已经发明了广泛用于存储系统中的基于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缓存时的主要操作:







不在缓存中时读取数据


  1. 来自主机的请求发送到控制器;
  2. 由于所请求的内容不在SSD缓存中,因此它们是从硬盘驱动器读取的;
  3. 读取的数据将发送到主机。 同时,正在检查这些块是否“热”。
  4. 如果是这样,它们将被复制到SSD缓存中以备将来参考。





读取缓存中存在的数据


  1. 来自主机的请求发送到控制器;
  2. 由于请求的数据在SSD缓存中,因此从那里读取数据。
  3. 读取的数据将发送到主机。





使用读取缓存时写入数据


  1. 来自主机的写请求发送到控制器;
  2. 数据被写入硬盘驱动器;
  3. 主机返回有关成功录制的响应;
  4. 同时,检查该块是否“热”(比较“写入时填充阈值”参数)。 如果是这样,它将被复制到SSD缓存中以备将来使用。





使用读/写缓存时写数据


  1. 来自主机的写请求发送到控制器;
  2. 数据写入SSD缓存;
  3. 主机返回有关成功录制的响应;
  4. 后台来自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的成本相提并论),您可以显着提高整体性能。

Source: https://habr.com/ru/post/zh-CN432366/


All Articles