创新//内存//存储

现实生活中的工作负载允许更高效的数据粒度,并支持非常大的SSD容量

作者:卢卡·伯特 - 2023-09-28

大容量ssd (1).e.(30TB+)带来了一系列新的挑战. 最相关的两个是:

  1. 大容量ssd是通过高密度NAND实现的, 比如QLC(四电平单元NAND,每个单元存储4位数据), 与薄层色谱与非(三能级电池)相比,哪些带来了更多的挑战, 每单元存储3位).
  2. SSD容量的增长要求本地动态随机存取记忆体内存的同等增长,传统上是1:1000的比例(动态随机存取记忆体与存储容量)。.

目前,我们正处于1:1000的比例不再可持续的地步. 但我们真的需要它吗? 为什么不是1:400的比例呢? Or 1:8000? 它们将把动态随机存取记忆体需求分别减少4倍或8倍. 是什么阻止了我们这么做?

这篇博客探讨了这种方法背后的思考过程, 并尝试为大容量ssd绘制一条前进的道路.

首先,为什么动态随机存取记忆体需要与NAND容量成1:1000的比例? SSD需要将来自系统的逻辑块地址(LBA)映射到NAND页,并且需要保留所有这些地址的实时副本,以便知道可以向何处写入数据或回读数据. LBA大小为4KB,映射地址通常为32位(4字节)。, so we need one entry of 4 bytes every LBA of 4KB; hence the 1:1000 ratio. 请注意,非常大的容量需要比这更多一点, 为简单起见, 我们将坚持这个比例,因为它使推理更简单,不会实质性地改变结果.

为每个LBA提供一个映射条目是最有效的粒度,因为它允许系统编写(i.e.(创建一个映射条目)以尽可能低的粒度. 这通常以4KB随机写作为基准, 通常用来衡量和比较SSD写性能和耐用性的是什么.

然而,从长远来看,这可能站不住脚. 相反,如果我们每4个lba有一个地图条目呢? 或者8 16 32+ LBAs? 如果我们每4个lba使用一个地图条目(i.e.(每16KB写入一个条目)我们可以节省动态随机存取记忆体的大小,但是当系统想要写入4KB时会发生什么呢? 假设条目是每16KB, SSD需要读取16KB的页面, 修改将要写入的4KB, 并回写整个16KB的页面. 这将影响性能(“读取16KB, 修改4 kb, 回写4KB”, 而不仅仅是“写4KB”),而是, 最重要的是, 这将影响持久性(系统写入4KB,但SSD最终将向NAND写入16KB),从而将SSD寿命减少4倍. 当这种情况发生在具有更大续航能力的QLC技术上时,这是令人担忧的. 对于QLC来说,如果有一样东西是不能浪费的,那就是耐力!

So, 常见的理由是,映射粒度(或更正式的术语“IU”)不能更改,否则SSD寿命(持久时间)将严重下降.

虽然以上都是正确的,但是系统真的以4KB粒度写入数据吗? 多久一次? 当然可以买一个系统,只运行FIO与4KB RW配置文件,但现实, 人们不会这样使用系统. 他们购买它们来运行应用程序、数据库、文件系统、对象存储等. 它们中有使用4KB写入的吗?

我们决定测量一下. 我们选择了一组不同的应用程序基准, 从TPC-H(数据分析)到YCSB(云运营), 在各种数据库(Microsoft®SQL Server®)上运行, RocksDB, Apache Cassandra®), 各种文件系统(EXT4), XFS)和, 在某些情况下, 完整的软件定义存储解决方案,如Red Hat®Ceph®storage, 并测量发出了多少次4KB写入,以及它们对写入放大的贡献, i.e.,额外的写入会降低设备寿命.

在深入分析的细节之前,我们需要讨论为什么写入大小在持久性受到威胁时很重要.

4KB写入将创建“写入16K以修改4K”,因此写入放大系数(WAF)为4倍. 但如果我们有8K的写入? 假设在相同的IU内,它将是“写16K修改8K”,因此WAF=2. 好一点了. 如果我们写16K? 它可能根本不会对WAF做出贡献,因为“写入16K来修改16KB”。. 因此,只有少量的写入对WAF有贡献.

还有一种微妙的情况是,写操作可能没有对齐, 所以总是会有不对齐导致WAF,但它也会随着尺寸的增加而迅速减少.

下图显示了这一趋势:

Luca 博客 IU图1

大的写操作对WAF的影响最小. 例如,256KB如果对齐,可能没有影响(WAF=1x),或者影响很小(WAF=1).06x)如果没有对齐. 比4KB写入带来的可怕的4x要好得多!

然后,我们需要分析所有写入SSD的操作,并在IU中查找它们的一致性,以计算每个操作对WAF的贡献. 而且越大越好. 为此,我们对系统进行了测试,以跟踪IOs的几个基准测试. 我们获得20分钟的样本(每个基准通常在1亿到3亿个样本之间),然后对它们进行后处理以查看大小, IU对齐, 并将每个IO贡献添加到WAF中.

下表显示了每种尺寸的IOs数量:

如图所示, 大多数写操作要么适合4-8KB(坏)的小桶,要么适合256KB以上(好)的桶.

如果我们应用上面的WAF图表,假设所有这些IOs都是不对齐的, 我们得到的是“最坏情况”一栏中报告的情况:大多数WAF位于1.X范围内,一些在2.X和非常特别的3.x范围. 比预期的4倍要好得多,但不足以让它可行.

然而,并不是所有的IOs都是错位的. 为什么呢?? 为什么现代文件系统创建的结构与如此小的粒度不一致呢? 答案:他们没有.

我们针对每个基准测试测试了超过1亿个IOs,并对它们进行了后处理,以确定它们如何与16KB IU保持一致. 结果在最后一栏“测量”WAF中. 一般小于5%.e., WAF >=1.这意味着一个人可以将国际单位大小增加400%, 利用QLC NAND和现有技术制造大型固态硬盘, smaller 动态随机存取记忆体 technologies at a life cost that is >5% and not 400% as postulated! 这些都是惊人的结果.

有人可能会说“有很多4KB和8KB的小写入,他们确实有400%或200%的个人WAF贡献. 由于IOs的贡献虽小但数量众多,聚合WAF不应该更高吗?”. 真正的, 有很多, 但是它们很小, 所以它们的有效载荷很小, 就体积而言, 是最小. 在上表中, 4KB的写入和256KB的写入都算作一次写入,但后者携带的数据量是前者的64倍. 如果我们调整上表的IO卷(i.e., 考虑每个IO大小和移动的数据), 不按IO计数, 我们的陈述如下:

我们可以看到, 更强烈的IOs的颜色分级现在向右倾斜, 这意味着大型IOs正在移动大量数据,因此WAF的贡献很小.

最后要注意的一点是,并非所有SSD工作负载都适合这种方法. 最后一行, 例如, 表示Ceph存储节点的元数据部分,它执行非常小的IO, 造成高WAF=2.35x. 大型IU驱动器不适合单独用于元数据. 然而, 如果我们在Ceph中混合数据和元数据(NVMe ssd的一种常见方法),数据的大小和数量将超过元数据的大小和数量,因此合并后的WAF受到的影响最小.

我们的测试表明,在实际应用程序和最常见的基准测试中, 移动到16K IU是一个有效的方法. 下一步是说服业界停止用FIO对4K RW的ssd进行基准测试,这从来都是不现实的, 此时此刻, 对进化是有害的.

不同IU大小的影响

一个最明显的后续问题是:为什么是16KB IU大小? 为什么不是32KB或64KB,这有什么关系吗?

这是一个非常公平的问题,需要具体的调查,应该变成一个更具体的问题:不同的IU大小对任何给定基准的影响是什么?

因为我们已经有了不受IU大小影响的痕迹, 我们只需要在适当的模型中运行它们,看看影响. 图4显示了IU大小对WAF的影响:

从图表中可以看出一些结果:

  • 国际单位大小很重要,WAF随国际单位大小而降解. 解决方案没有好坏之分, 每个人都必须根据自己的需求和目标做出不同的权衡. 
  • WAF的退化并不像我们在上面看到的许多情况下所担心的那样糟糕. 即使在最坏的情况下64KB IU和最激进的基准, 它小于2倍,而不是人们担心的16倍
  • 元数据, 如前所述, 大的国际单位总是一个不好的选择,国际单位越大, 情况越糟.
  • JESD 219, 对WAF进行基准测试的行业标准概要, 不是很好,但在4KB IU下可以接受,额外的3% WAF通常是可以容忍的,但在较大的IU下变得不寻常,在64K IU时几乎是9倍 

     

卢卡·伯特

Luca是SSD系统架构的杰出成员,拥有超过30年的企业存储经验. 他主要关注创新特性及其在系统中的应用,以进一步提高SSD的价值. 他拥有都灵大学(意大利)固体物理学硕士学位。.
+