为什么缓解延迟异常值十分重要?
在 2015 年的一篇论文中,Meta 介绍了 Facebook 使用的社交图谱的一些实际实施细节。1作者首先假设,Alice 发布了两个帖子,好友 Bob 和 Carol 都对这两个帖子进行了评论和点赞。当 Alice 拿起手机打开 Facebook 时,新闻推送需要识别她的好友有哪些,他们发布了什么帖子,还要设置查询,告诉 Alice,Bob 和 Carol 给她的帖子点了赞,并发表了评论。
首先,我们来考虑一个解决方案(图 1),其中一个工作器执行 n 个子查询。在这种情况下,执行时间将是 O(n),并且大致等于平均(而非最坏情况)查找延迟。
超大规模用户会采用另一种方法(图 2)。他们采用 n 个工作器,每个工作器进行一次查找,总共得到 n 个结果。在这种情况下,执行时间为 O(1),但执行时间成为 n 个节点中任意一个的最大延迟。
Meta 论文继续探讨,在具有数十层深关键路径 fork/join 的成千上万个子查询中,使用多个 fork/join 子查询的情况实际上更糟(图 3)。即使是一个异常值(在本例中为三个九)(99.9%)也会影响几乎每个查询的性能。这一结果表明,至少要考虑四个九(99.99%)级别的延迟,甚至六个九(99.9999%)或七个九(99.99999%)级别(图 6 显示了六个九的延迟)。
这种情况远远超出了 Meta 及其社交图谱的范围,并且包括许多数据库密集型应用程序。在另一篇美光博客中有一个很好的讨论,其中对比了 YCSB 数据库应用程序在各种存储解决方案(包括美光 7450)中的表现。2、3
至少,应考察读取密集型工作负载,这类工作负载包含大量的写入操作(例如 70% 的读取、30% 的写入)并且深度排队,以确保 NAND 阵列和控制器承受充分的压力。检查各种压力下的读取尾部延迟也很重要,因为它们更接近典型的日常服务器体验。
什么原因导致了延迟变化?如何缓解?
用 CPU 架构领域的术语来说,SSD 既是深度流水线化(有许多阶段),又是超标量(有许多并行阶段)。关注管线停滞对于 CPU 和 SSD 的性能至关重要。对于 SSD(图 4),管线停滞可能来自多个源头,我们将在下面进行讨论。
对于这种理想化延迟而言,一些最低阶的影响源自于尝试在芯片或 NAND 总线正忙于处理另一个管线阶段的请求时读取数据,这种情况通常称为平面、芯片或通道冲突。当一个读取与另一个读取发生冲突时,通常会让管线在后面发生的读取上停滞,先完成正在进行的读取。
同时集成主机写入(在本例中为 30%)及其相关的垃圾回收,不但会产生额外的读取,而且会对 NAND 进行编程和擦除。编程延迟可能是 NAND 读取延迟的 5 到 10 倍,而 NAND 擦除延迟可能比 NAND 读取延迟高一个数量级。图 5 以比较幽默的方式展示了垃圾回收对主机活动的影响,而图 6 则详细说明了在没有暂停的情况下出现读取管线停滞的情况。
这是管线“暂停”以进行编程和擦除的地方,从而允许处理主机读取。NAND 组件工程师、片上系统工程师和固件工程师密切合作,发明了一种编程和擦除暂停,以帮助缓解这些延迟。如今,我们看到,对于上述工作负载,五个九的延迟影响远小于 2 毫秒,这一结果至少改进了五倍。
如何解决管线停滞问题?
我们回到图 5,看看高速公路的视觉效果。具有深度排队读写以及相关垃圾回收功能的 SSD 就像一条多车道高速公路。高速公路上的延迟异常值(又称交通堵塞)与 SSD 中的延迟异常值非常相似。通过类比防止高速公路交通堵塞,可以更好地理解一些延迟异常值策略。
类比 1:不要让货运列车堵塞繁忙的高速公路(我不是在开玩笑)
显然,在交通高峰期,让一列货运列车阻塞繁忙高速公路上的所有车道一定会造成交通堵塞(图 7)。其实,SSD 设计师花了一些时间才充分认识到这个事实。虽然这看起来很明显,但 OCP 数据中心 NVMe™ SSD 规范不止一次明确指出需要避免货运列车穿过繁忙的高速公路,这很可能源于 OCP 设计者先前的设计经验:
- 智能 IO 不应阻塞任何主机 IO(SLOG-6)
- 其他定期监控的日志(LMLOG-4 和 TEL-5)应将 IO 阻塞限制在约 1 毫秒以内。
类比 2:采用高速公路入口匝道控制
防止交通堵塞的另一个实用工具是高速公路入口匝道信号控制(图 8)。我们可能都遇到过使用这种方法的情况,它似乎与直觉相悖,但却是一种提高效率的方法。美国交通部的数据显示,交通时间(延迟)减少了 20% 或更多。5SSD 遵循相同的理念来防止导致延迟异常的拥塞。我们不仅限制写入,还限制总体 I/O(包括垃圾回收),以确保峰值性能,同时避免出现 SSD 内部交通堵塞导致的令人沮丧的延迟。
为什么美光致力于在尾部延迟缓解方面达到前沿水平?
如前所述,在编程和擦除暂停出现之前的六到七年前,业界一直疲于应付延迟异常值。这种方法加上入口限制,以及 NAND 和控制器交互的优化,促使美光 SSD(图 9)不断发展。时至今日,我们认为与同类产品相比,已具备一定优势。
因此,下次您拿起移动设备浏览社交媒体时,不妨用心体会一下快速的响应速度所带来的出色最终用户体验,欣赏成千上万台服务器运行数千个深度 fork/join 的并行查询带来的奇迹。即使您运行的服务器场规模较小,拥有一致且可预测的性能也是确保为客户提供一致服务的关键。这种性能正是美光主流数据中心 SSD 的亮点。
1 在大规模采用更强一致性时面临的挑战,2015 年 Meta 研究
2 识别工作负载测试中的延迟异常值 | 美光 2023 年
3 美光 7450、三星 PM9A3 和 Solidigm D5-P5430 比较 | 美光 2023 年
4 通过 I/O 确定性避免 SSD 中代价高昂的读取延迟变化,FMS 2017 年,Wells
5 匝道信号控制:久经验证且具有成本效益的运营策略,美国交通部 2014 年