QSAN XCubeSAN存储系统中SSD缓存的实现

基于SSD的使用并广泛应用于存储系统的提高性能的技术早已被发明。 首先,是采用SSD作为存储空间,100%有效,但价格昂贵。 因此,使用了疲劳和缓存技术,其中SSD仅用于最流行(“热”)的数据。 分层适用于长期(数天至数周)使用“热”数据的场景。 相反,缓存是供短期(分钟到小时)使用的。 这两个选项都在存储系统中实现 QSAN XCubeSAN。 在本文中,我们将看看第二种算法的实现 - SSD缓存.

QSAN XCubeSAN存储系统中SSD缓存的实现

SSD缓存技术的本质是利用SSD作为硬盘和控制器RAM之间的中间缓存。 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 缓存,则变为零)。

QSAN XCubeSAN存储系统中SSD缓存的实现

如果缓存用于读 + 写操作,则池中 SSD 的数量应为 1 的倍数,因为内容镜像在成对的驱动器上(使用 NRAID 1+ 结构)。 复制缓存是必要的,因为它可能包含尚未写入硬盘的数据。 在这种情况下,缓存池中的 SSD 发生故障将导致信息丢失。 在 NRAID XNUMX+ 的情况下,SSD 发生故障只会导致缓存转为只读状态,未写入的数据将转储到硬盘阵列上。 更换故障SSD后,缓存将恢复到原来的运行模式。 顺便说一下,为了提高安全性,您可以将专用热备件分配给读+写缓存。

QSAN XCubeSAN存储系统中SSD缓存的实现

在XCubeSAN中使用SSD缓存功能时,对存储控制器的内存量有很多要求:系统内存越多,可用的缓存池就越大。

QSAN XCubeSAN存储系统中SSD缓存的实现

与大多数存储系统制造商只提供打开/关闭 SSD 缓存的选项不同,QSAN 提供了更多选项。 特别是,您可以根据负载的性质选择缓存操作模式。 预置了三个与对应服务的操作最接近的模板:数据库、文件系统、Web 服务。 此外,管理员可以通过设置所需的参数值来创建自己的配置文件:

  • 块大小(缓存块大小) – 1/2/4 MB
  • 读取块以便将其复制到缓存的请求数(读取时填充阈值) – 1..4
  • 写入块以便将其复制到缓存的请求数(写入时填充阈值) – 0..4

QSAN XCubeSAN存储系统中SSD缓存的实现

配置文件可以即时更改,但是,当然,随着缓存重置的内容及其新的“预热”。

考虑到SSD缓存的工作原理,我们可以重点介绍一下使用它时的主要操作:

QSAN XCubeSAN存储系统中SSD缓存的实现

当数据不在缓存中时读取数据

  1. 来自主机的请求到达控制器;
  2. 由于请求的数据不在SSD缓存中,因此从硬盘中读取;
  3. 将读取到的数据发送给主机。 同时,检查这些块是否“热”;
  4. 如果是,则将它们复制到 SSD 缓存以供进一步使用。

QSAN XCubeSAN存储系统中SSD缓存的实现

当数据存在于缓存中时读取数据

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

QSAN XCubeSAN存储系统中SSD缓存的实现

使用读缓存时写入数据

  1. 来自主机的写请求到达控制器;
  2. 数据写入硬盘;
  3. 向主机返回录音成功的响应;
  4. 同时,检查该块是否是“热”的(比较Populate-on-Write Threshold参数)。 如果是,则将其复制到 SSD 缓存以供以后使用。

QSAN XCubeSAN存储系统中SSD缓存的实现

使用读+写缓存时写入数据

  1. 来自主机的写请求到达控制器;
  2. 数据写入SSD缓存;
  3. 向主机返回录音成功的响应;
  4. SSD缓存中的数据在后台写入硬盘;

检查行动

测试台

2 台服务器(CPU:2 x Xeon E5-2620v3 2.4Hz / RAM:32GB)通过两个端口通过光纤通道 16G 直接连接到 XCubeSAN XS5224D 存储系统(16GB RAM/控制器)。

我们使用 16 个 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 缓存

固态硬盘缓存

  • I/O类型:定制
  • 缓存块大小:4MB
  • 读取时填充阈值:1
  • 写入时填充阈值:0

输入/输出模式

  • 工具:IOmeter V1.1.0
  • 工人:1
  • 杰出(队列深度):128
  • 访问规格:4KB、100% 读取、100% 随机

QSAN XCubeSAN存储系统中SSD缓存的实现

QSAN XCubeSAN存储系统中SSD缓存的实现

理论上来说,缓存池中的SSD越多,性能就越高。 实践中,这一点已得到证实。 仅有少量卷的SSD数量大幅增加并不会带来爆炸性的影响。

测试2. SSD缓存读+写模式,2-8个SSD

固态硬盘缓存

  • I/O类型:定制
  • 缓存块大小:4MB
  • 读取时填充阈值:1
  • 写入时填充阈值:1

输入/输出模式

  • 工具:IOmeter V1.1.0
  • 工人:1
  • 杰出(队列深度):128
  • 访问规格:4KB、100% 写入、100% 随机

QSAN XCubeSAN存储系统中SSD缓存的实现

QSAN XCubeSAN存储系统中SSD缓存的实现

相同的结果:随着 SSD 数量的增加,性能呈爆炸式增长并可扩展。

在这两个测试中,工作数据量均小于总缓存大小。 因此,随着时间的推移,所有块都被复制到缓存中。 事实上,这项工作已经在 SSD 上进行,几乎没有影响硬盘。 这些测试的目的是清楚地证明根据 SSD 数量预热缓存和扩展其性能的有效性。

现在让我们回到现实,检查一个更现实的情况,当数据量大于缓存大小时。 为了让测试在合理的时间内通过(缓存“预热”时间随着卷大小的增加而大大增加),我们将卷大小限制为 120GB。

测试3.数据库模拟

固态硬盘缓存

  • I/O 类型:数据库
  • 缓存块大小:1MB
  • 读取时填充阈值:2
  • 写入时填充阈值:1

输入/输出模式

  • 工具:IOmeter V1.1.0
  • 工人:1
  • 杰出(队列深度):128
  • 访问规格:8KB、67% 读取、100% 随机

QSAN XCubeSAN存储系统中SSD缓存的实现

判决书

当然,显而易见的结论是使用 SSD 缓存可以提高任何存储系统的性能。 应用于 QSAN XCubeSAN 这句话完全适用:SSD缓存功能实现完美。 这涉及到对读和读+写模式的支持、任何使用场景的灵活设置以及整个系统的整体性能。 因此,以非常合理的成本(许可证价格相当于 1-2 个 SSD 的成本),您可以显着提高整体性能。

来源: habr.com

添加评论