聊聊QD=1:下一代非易失性存储(NG-NVM)对PCIe SSD和SSD驱动器意味着什么

聊聊QD=1:下一代非易失性存储(NG-NVM

PCIeSSDSSD驱动器意味着什么

 Stephen Bates (@stepbates)

聊聊QD=1:下一代非易失性存储(NG-NVM)对PCIe SSD和SSD驱动器意味着什么_第1张图片

简介

      我热爱SSDSSD提供了高性能、低延迟的存储访问,从而彻底变革了数据中心。低延迟改变了数据中心的软件堆栈。我在随后的若干博文中将深入讨论延迟的问题,从驱动的延迟开始。

      评测NVMeSSDQD=1的条件下的随机读延迟比想象的更难。但可以将其分解如下:

  • 介质延迟
  • 控制器延迟
  • 网格延迟
  • 驱动程序/操作系统延迟/CPU延迟

      在随后的几篇博文中,我将分别展开阐述这四种延迟。本篇博文将从第四点:驱动程序/操作系统延迟/CPU延迟开始。其中涉及的变量非常多,因此讨论会很有意思。选择哪个操作系统呢?假设选择Linux内核的哪个版本?哪一种CPUx86,ARMPowePCSparc?多少个CPU?多少个HW线程、存储子系统?如何处理中断?是采用轮询还是中断驱动?等等问题均需要一一面对。

NVMe驱动——速度是很快,但够快了吗?

      包括PMC在内的许多公司煞费苦心地将NVMe设计得速度很快,比传统的存储协议(看看单个PCIeSSD如何在OTLP数据库应用中胜出8块和4块SATA盘的配置)要快得多,但是对下一代NVMNG-NVM)而言是否够快呢?为了测试这一点,我们在一块Intelx86 CPUPMCFlashtec NVRAM加速卡之间插入了一台PCIe逻辑分析仪,进行了测量并取得了若干很有意思的结果。

      随机读延迟由几个部分构成,可以分为两部分:SSD控制的一部分和主机控制的一部分。

       对SSD而言,延迟控制得非常好。下图中可以看出,我们如何将延迟控制得非常低(平均低于9us)且范围非常窄(总是优于11us)。

        对于主机而言,延迟则并不总是控制得那么好。可以看到,非SSD造成的延迟平均数只有5us,但测量期间的最大值则超过了30us

聊聊QD=1:下一代非易失性存储(NG-NVM)对PCIe SSD和SSD驱动器意味着什么_第2张图片

      SSD造成的延迟如此大的变化幅度来源于何处呢?经过深入分析,我们发现,它的根源是处理MSI-X中断及其将此中断传递回OS。许多因素可能影响到这个步骤所花费的时间,从而影响到延迟和服务质量。

修理驱动程序!

      那么,我们怎么处理中断带来的延迟问题呢?有意思的是,当前有几件互不相干的事正好解决了这个问题。

      Intel刚刚发布了存储高性能开发者程序包(SPDK),试图改善NVMeSSD的性能。此处可以了解更多关于SDPK的详情。SPDK从两个方面来试图解决我此前提出的问题:

  • 它采用轮询的方式查询完成队列,而不是采用MSI-X中断的方式。
  • 在用户空间中运行,避免了从内核空间跳跃到用户空间涉及到的上下文切换

      此外,还有在Linux内核的块层对块设备(包括NVMe设备)增加轮询的相关工作正在进行中。此处可以查阅现有的代码库。

      我们将这两种方法(SPDK和轮询驱动)与传统的驱动进行了比较。下表总结了延迟、CPU负载和吞吐量(QD=1)的结果。

聊聊QD=1:下一代非易失性存储(NG-NVM)对PCIe SSD和SSD驱动器意味着什么_第3张图片

      从中可见,SPDK和轮询驱动得到的IOPS和延迟QoS结果优于传统方案,代价是CPU负载的增加。轮询驱动比SPDK的结果略为逊色,但优点在于它与Linux内核中的块层相连,因此可以提供SDPK无法提供的服务。此外,在将轮询驱动集成到上游内核之前,Linux内核的工作群体正在努力对其进行改进。

结论

      随着SSD的速度也日益提升,开始利用NG-NVM(比如PMCFlashtec NVRAMIntelOptaneSSD),在驱动程序和操作系统中提供I/O服务的开销也日渐显著。由于过去对存储速度较慢(中断),而现在的存储速度可能非常之快,从前的做法不再适用。这对整个计算机软件堆栈都有影响,涵盖了高速缓存,到分级存储,再到快速主要外部存储多各个领域。该一根本性的转变也带来了前所未有的机会。相关的工作正逐渐渗透到操作系统当中、应用当中,甚至电脑硬件当中。我将在下一篇博文中谈及此事。



你可能感兴趣的:(存储博文)