Innovations // Memory // Storage

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

By Luca Bert - 2023-09-28

Large capacity SSDs (i.e.(30TB+)带来了一系列新的挑战. The two most relevant are:

  1. 大容量ssd是通过高密度NAND实现的, 比如QLC(四电平单元NAND,每个单元存储4位数据), 与TLC NAND(三能级电池)相比,哪些带来了更多的挑战, storing 3 bits per cell).
  2. SSD容量的增长要求本地DRAM内存的同等增长,传统上是1:1000的比例(DRAM与存储容量)。.

目前,我们正处于1:1000的比例不再可持续的地步. But do we really need it? Why not a ratio of 1:4000? Or 1:8000? 它们将把DRAM需求分别减少4倍或8倍. What prevents us from doing this?

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

首先,为什么DRAM需要与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. 请注意,非常大的容量需要比这更多一点, for simplicity, 我们将坚持这个比例,因为它使推理更简单,不会实质性地改变结果.

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

然而,从长远来看,这可能站不住脚. 相反,如果我们每4个lba有一个地图条目呢? or 8, 16, 32+ LBAs? 如果我们每4个lba使用一个地图条目(i.e.(每16KB写入一个条目)我们可以节省DRAM的大小,但是当系统想要写入4KB时会发生什么呢? Given the entry is every 16KB, SSD需要读取16KB的页面, 修改将要写入的4KB, 并回写整个16KB的页面. 这将影响性能(“读取16KB, modify 4KB, write back 4KB”, rather than just “write 4KB”) but, most of all, 这将影响持久性(系统写入4KB,但SSD最终将向NAND写入16KB),从而将SSD寿命减少4倍. 当这种情况发生在具有更大续航能力的QLC技术上时,这是令人担忧的. 对于QLC来说,如果有一样东西是不能浪费的,那就是耐力!

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

虽然以上都是正确的,但是系统真的以4KB粒度写入数据吗? And how often? 当然可以买一个系统,只运行FIO与4KB RW配置文件,但现实, people don’t use systems this way. 他们购买它们来运行应用程序、数据库、文件系统、对象存储等. Do any of them use 4KB Writes?

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

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

4KB写入将创建“写入16K以修改4K”,因此写入放大系数(WAF)为4倍. But what if we get an 8K write? 假设在相同的IU内,它将是“写16K修改8K”,因此WAF=2. A bit better. And if we write 16K? 它可能根本不会对WAF做出贡献,因为“写入16K来修改16KB”。. 因此,只有少量的写入对WAF有贡献.

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

The chart below shows this trend:

Luca Blog IU Figure 1

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

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

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

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

如果我们应用上面的WAF图表,假设所有这些IOs都是不对齐的, 我们得到的是“最坏情况”一栏中报告的情况:大多数WAF位于1.x range, a few in the 2.x and very exceptionally in the 3.x range. 比预期的4倍要好得多,但不足以让它可行.

然而,并不是所有的IOs都是错位的. Why would they be? 为什么现代文件系统创建的结构与如此小的粒度不一致呢? Answer: They don’t.

我们针对每个基准测试测试了超过1亿个IOs,并对它们进行了后处理,以确定它们如何与16KB IU保持一致. 结果在最后一栏“测量”WAF中. It is generally less than 5%, i.e., WAF >=1.这意味着一个人可以将国际单位大小增加400%, 利用QLC NAND和现有技术制造大型固态硬盘, smaller DRAM technologies at a life cost that is >5% and not 400% as postulated! These are astonishing results.

有人可能会说“有很多4KB和8KB的小写入,他们确实有400%或200%的个人WAF贡献. 由于IOs的贡献虽小但数量众多,聚合WAF不应该更高吗?”. True, they are many, but they are small, 所以它们的有效载荷很小, in terms of volume, is minimized. In the above table, 4KB的写入和256KB的写入都算作一次写入,但后者携带的数据量是前者的64倍. 如果我们调整上表的IO卷(i.e., 考虑每个IO大小和移动的数据), not by IO count, 我们的陈述如下:

As we can see, 更强烈的IOs的颜色分级现在向右倾斜, 这意味着大型IOs正在移动大量数据,因此WAF的贡献很小.

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

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

Impact of Different IU sizes

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

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

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

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

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

     

Luca Bert

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