本文发表于2020年1月
摘要
如今,由于固态驱动器(SSD)与硬盘驱动器(HDD)相比性能良好,因此越来越多地用于存储基础架构中。它们的内部体系结构由不使用机械运动的并行存储单元组成,因此为随机数据访问提供了极大的保护。但是,在此报告中,我们介绍了某些SSD存储对I/O模式敏感,在运行随机工作负载的情况下,I/O性能较低。当只有一个I/O进程和具有小块大小的I/O请求这种具有特定特征的工作负载,会发生性能降低。在对I/O堆栈和SSD存储器内部进行了大量研究之后,我们的结果表明,SSD的内部预读能力落后于顺序工作负载和随机工作负载之间的性能差距。的确,由于将下一个数据量预读到缓存中,因此在顺序访问的情况下激活内部预读会提高性能。相反,这对于随机的工作负载没有意义,因为即将到来的请求可能不依赖于已存储在缓存中的内容。
介绍
I/O操作以大数据系统为中心,在大数据系统中,应定期访问大量数据。 在数据访问期间保持可接受的I/O性能意味着不仅应对I/O堆栈而且应对存储设备本身在内的许多挑战。 由于硬盘驱动器(HDD)仍出现在当今的基础架构中,因此I/O堆栈进行了许多改进以增强其性能。 实际上,调整I/O堆栈上的某些参数(例如激活不同的I/O调度程序)可以在某种程度上减轻HDD对性能的影响,从而使IOPS有所增加。 但是,从当今的I/O工作负载的角度来看,这是次要的成就,这间接地推动了拥有更强大的存储设备的发展。 当然,拥有消除HDD机械移动的新一代存储设备将是一个好的解决方案。
由于固态硬盘(SSD)的设计和架构发生了彻底的变化,因此其性能要比HDD高。他们使用高性能存储单元(例如NAND闪存)来存储数据,从而减小了访问存储在RAM和外部存储上的数据之间的性能差距。但是,各种I/O工作负载使在所有情况中充分利用SSD的潜力具有挑战性。一方面,许多I/O工作负载仍然具有可用于改善对HDD上数据访问的功能,例如,具有约4 KB的I/O块大小(这是Linux中的内存页大小)。在SSD上执行此操作没有意义,因为SSD的内部页面大小在4 KB到4 MB之间。因此,以小块大小访问数据可能仍然会引起性能问题。另一方面,SSD控制器仍然是黑匣子,因此提取其内部配置以相应地调整工作负载特征是不可行的。当然,诸如从SSD行为中提取信息之类的方法可能会有用,但是每次具有不同工作负载时尝试这样做都是无穷的。而且,诸如大数据存储之类的系统不提供有关为其工作负载选择合适的SSD的支持。鉴于此,如果工作负载未考虑基础存储设备的特殊性,则迟早会出现性能问题。
为顺序和随机工作负载提供可比的性能是SSD的有前途的主张之一。由于大多数SSD设备都依赖于类似内存的存储单元,因此按顺序随机存储数据不会引起任何问题。实际上,由于在SSD上没有邻接或连续分配的意义,因此存储单元几乎需要花费相同的时间将数据存储在相邻或相距遥远的存储单元中。但是,在最近的一项评估NoSQL数据库性能的研究中,我们发现在运行随机工作负载的情况下,使用中的SSD存储执行时间延迟。实验的工作量仅由一个I/O进程启动,该I/O进程经常使用较小的I/O请求频繁访问海量数据。考虑到这样的工作负载不会利用已使用的SSD的并行性这一事实,因此逻辑上预期不会报告随机工作负载的性能下降。因此,我们有动机进行进一步的调查,以解释这种异常行为背后的主要原因。
在此报告中,我们对SSD存储进行了研究,以揭示对I/O模式更改的响应。 我们执行了几个实验,其中考虑到的工作负载的特征。 这里研究了可能影响I/O性能的几个潜在领域,试图了解是什么推动了SSD的研究,以报告随机工作负载的适度I/O性能。
这些领域有:
1)工作负载本身,例如I/O请求的大小,I/O进程的并发性2)I/O堆栈,例如I/O调度程序的影响
3)与存储设备本身的有关的内部参数,例如内部预读。
讨论
尽管上一部分的实验确认内部预读功能落后于顺序读取工作量和随机读取工作量之间的性能差距,但此发现仅涉及所研究的SSD模型(PX055MB040)。因此,我们需要通过试验其他SSD来确认这一点,以便抵消硬件对结果的影响。
我们对三种不同型号的SSD进行了进一步的实验,这些型号对于顺序和随机工作负载显示出不同的性能。这些固态硬盘的特性在表4中进行了描述。
尽管表4中显示的SSD报告了连续工作负载和随机工作负载之间的性能差距,但我们无法确认内部提前完成了该工作性能差距与我们使用PX055MB040 SSD所做的一样。不幸的是,并非总是可以像预读一样操作SSD的内部参数。这取决于目标SSD集成更改的能力。一方面,对于samsung MZ7KM240HMHQ0D3,使用sdparm禁用内部预读是不可行的,因为该SSD上的预读参数没有可变的状态,即我们只能读取其值。另一方面,对于两个Intel SSD(请参阅表4),sdparm都表明该参数是可更改的,但是所需的值无法保存到SSD中。似乎在接口不匹配的情况下,sdparm认为我们的参数是可更改的,但是不幸的是,当我们尝试更改其值时,SSD拒绝集成新值。鉴于此,如果无法调整其内部参数,则无法在此类SSD上找到导致I/O模式敏感度问题的主要原因。
总结
由于SSD的高性能存储单元并行排列,因此它们能够同时满足大量I/O请求。 但是,许多系统和应用程序仍然仅使用一个I/O进程来频繁访问小块数据。 在此报告中,我们显示了这种用例报告了顺序工作负载和随机工作负载之间的不同性能。
一方面,我们的实验证实,某些SSD的内部预读是该问题的根源,因为它不会像顺序存储那样提高随机工作负载的性能。
禁用预读功能会导致具有类似但适中的性能,因为不再需要顺序工作负载的数据访问。
另一方面,可以通过增加I/O块大小或增加并发I/O进程数来消除性能差距而不降低性能。 并发I/O进程数越多,无论工作负载是顺序访问还是随机访问数据,固态硬盘获得的性能都越高。未来的工作应考虑在开放通道SSD(例如与LightNVM兼容的SSD)上复制该研究。 其可访问的可编程控制器允许详细研究内部参数,从而消除了在黑匣子SSD上进行实验的现有限制。