NVMe SSD性能影响因素分析

nvme ssd 厂商spec给出的性能非常完美,前面也给出了nvme ssd和磁盘之间的性能对比,nvme ssd的性能的确比磁盘高很多。
但在实际应用过程中,nvme ssd的性能可能没有想象中的那么好,并且看上去不是特别的稳定,找不到完美的规律。和磁盘介质相比,ssd的性能和很多因素相关,分析ssd的性能影响因素,首先需要大体了解ssd构成的主要部分。
如下图所示,其主要包括主机cpu、pcie互连带宽、ssd控制器及ftl软件、后端nand flash带宽、nand flash介质。影响ssd性能的主要因素可以分成硬件、软件和客观环境三大部分,具体分析如下。
1, 硬件因素
a) nand flash本身。不同类型的nand flash本身具有不同的性能,例如slc的性能高于mlc,mlc的性能优于tlc。选择不同的工艺、不同类别的nand flash,都会具有不同的性能。
b) 后端通道数(ce数量)及总线频率。后端通道数决定了并发nand flash的数量,决定了并发能力。不同的ssd控制器支持不同数量的通道数,也决定了ssd的后端吞吐带宽能力。nand flash channel的总线频率也决定了访问flash的性能。
c) ssd控制器的处理能力。ssd控制器中会运行复杂的ftl(flash translation layer)处理逻辑,将逻辑块读写映射转换成nand flash 读写请求。在大数据块读写时,对处理器能力要求不是很高;在小数据块读写时,对处理器能力要求极高,处理器能力很容易成为整个io系统的性能瓶颈点。
d) ssd控制器架构。通常ssd控制器采用smp或者mpp两种架构,早期的控制器通常采用mpp架构,多个小处理器通过内部高速总线进行互连,通过硬件消息队列进行通信。内存资源作为独立的外设供所有的处理器进行共享。这种架构和基于消息通信的分布式系统类似。mpp架构的很大优势在于性能,但是编程复杂度较高;smp架构的性能可扩展性取决于软件,编程简单,和在x86平台上编程相似。不同的控制器架构会影响到ssd的总体性能,在ssd设计时,会根据设计目标,选择不同类型的ssd控制器。
e) 内存支持容量。为了追求高性能,ssd内部的映射资源表会常驻内存,映射表的内存占用大小是盘容量的0.1%,当内存容量不够大时,会出现映射表换入换出的问题,影响到性能。
f) pcie的吞吐带宽能力。pcie前端带宽体现了ssd的前端吞吐能力,目前nvme ssd采用x4 lane的接入方式,上限带宽为3gb/s,当后端nand flash带宽和处理器能力足够时,前端pcie往往会成为性能瓶颈点。nandflash具有很高的读性能,目前来看,ssd的读性能在很大程度上受限于pcie总线,因此需要快速推进pcie4.0标准。
g) 温度对性能造成影响。在nand flash全速运行的情况下,会产生较大的散热功耗,当温度高到一定程度时,系统将会处于不正常的工作状态,为此,ssd内部做了控温系统,通过温度检测系统来调整ssd性能,从而保证系统温度维持在阈值之内。调整温度会牺牲性能,本质上就是通过降低ssd性能来降温。因此,当环境温度过高时,会影响到ssd的性能,触发ssd内部的温度控制系统,调节ssd的性能。
h) 使用寿命对性能造成影响。nand flash在不断擦除使用时,flash的bit error会不断上升,错误率的提升会影响到ssd的io性能。
2, 软件因素
a) 数据布局方式。数据布局方法需要充分考虑nand flash中的并发单元,如何将io操作转换成nand flash的并发操作,这是数据布局需要考虑的问题。例如,采用数据交错的方式在多通道page上进行数据布局,通过这种方式可以优化顺序带宽。
b) 垃圾回收/wear leveling调度方法。数据回收、wear leveling、data retention等操作会产生大量的nandflash后端流量,后端流量直接反应了ssd的写放大系数,也直接体现在后端带宽的占用。垃圾回收等产生的流量也可以称之为背景流量,背景流量会直接影响到前端用户性能。因此需要对背景流量和用户流量之间进行合理调度,使得用户io性能达到最佳。
c) op预留。为了解决坏块、垃圾回收等问题,在ssd内部预留了一部分空闲资源,这些资源被称之为op(overprovisioning)。op越大,gc过程中平均搬移的数据会越少,背景流量会越小,因此,写放大降低,用户io性能提升。反之,op越小,性能会越低,写放大会越大。在ssd容量较小的时代,为了提升ssd的使用寿命,往往op都设置地比较大。
d) bit error处理影响性能。在ssd内部采用多种机制来处理nand flash所产生的bit error。ecc纠错、readretry、soft ldpc以及rain都是用来纠正bit翻转导致的错误。当bit错误率增加时,软件处理的开销越大,在bit控制在一定范围之内,完全可以通过硬件进行纠正。一旦软件参与到bit纠正的时候,会引入较大的性能开销。
e) ftl算法。ftl算法会影响到ssd性能,对于不同用途的ssd,ftl的设计与实现是完全不同的,企业级ssd为了追求高性能,通常采用flat mapping的方式,采用大内存缓存映射表;消费级ssd为了追求低成本,通常采用元数据换入换出的方式,并且采用pslc+tlc的组合方式进行分层存储,也可以采用主机端内存缓存元数据信息,但是这些方式都会影响到性能。
f) io调度算法。nand flash具有严重的性能不对称性,flash erase和program具有ms级延迟,flash read的延迟在us级。因此,如何调度erase、program以及read是ssd后端设计需要考虑的问题。另外,前端io以及背景io之间的调度也是需要权衡考虑,通过io调度可以达到最佳性能表现。在io调度过程中,还需要利用nandflash的特性,例如program suspension,通过这些特性的利用,最优化ssd前端io性能。
g) 驱动软件。驱动软件运行在主机端,通常分为内核态和用户态两大类,内核态驱动会消耗较多的cpu资源,存在频繁上下文切换、中断处理,因此性能较低;用户态驱动通常采用polling io处理模式,去除了上下文切换,可以充分提升cpu效率,提升整体io性能。
h) io pattern对性能产生影响。io pattern影响了ssd内部的gc数据布局,间接影响了gc过程中的数据搬移量,决定了后端流量。当io pattern为全顺序时,这种pattern对ssd内部gc是最为友好的,写放大接近于1,因此具有最好的性能;当io pattern为小块随机时,会产生较多的gc搬移数据量,因此性能大为下降。在实际应用中,需要通过本地文件系统最优化io pattern,获取最佳性能。
3, 客观因素
a) 使用时间越长会导致ssd性能变差。使用时间变长之后,ssd内部nand flash的磨损会加重,nand flash磨损变大之后会导致bit错误率提升。在ssd内部存在一套完整的bit错误恢复机制,由硬件和软件两大部分构成。当bit错误率达到一定程度之后,硬件机制将会失效。硬件机制失效之后,需要通过软件(firmware)的方式恢复翻转的bit,软件恢复将会带来较大的延迟开销,因此会影响到ssd对外表现的性能。在有些情况下,如果一块ssd在掉电情况下放置一段时间之后,也可能会导致性能变差,原因在于ssd内部nand flash中存储电荷的漏电,放置一段时间之后导致bit错误率增加,从而影响性能。ssd的性能和时间相关,本质上还是与nand flash的比特错误率相关。
b) 环境温度也会对性能造成影响。为了控制ssd温度不能超过上限值,在ssd内部设计有一套温度负反馈机制,该机制通过检测的温度对nand flash后端带宽进行控制,达到降低温度的效果。如果一旦温度负反馈机制开始工作,那么nand flash后端带宽将会受到限制,从而影响前端应用io的性能。下面从软件的角度出发,重点阐述gc以及io pattern对ssd性能的影响。
3.1 gc对性能的影响
ssd内部有一个非常厚重的软件层,该软件层用来解决nand flash的问题,采用log-structured的方式记录数据。log-structured方式引入了gc的问题,对于前端业务来讲,gc流量就是背景噪声。gc流量不是时时刻刻存在的,因此,ssd对外体现性能大幅度波动。当ssd为空盘时,性能会非常好,为最佳性能;当ssd被用过一段时间之后,性能会大幅降低。其中gc起到了很重要的作用。企业级ssd在发布spec的时候,都会发布ssd盘的稳态性能。在性能测试的时候,需要对盘进行老化预处理。通常预处理的方法是顺序写满盘,然后再随机两遍写盘,预处理完成之后,再对盘进行随机读写测试,得到spec中定义的值。稳态值基本可以认为是盘的下限性能。
上图所示是多个厂商的盘在空盘和稳态情况下的性能对比,由此可见稳态情况和空盘情况下的性能差距很大。在稳态情况下,ssd内部的gc会全速运行,会占用较多的nand flash后端带宽。背景流量和前端数据流的比例也就体现了ssd盘的写放大系数,写放大系数越大,背景流量占用带宽越多,ssd对外体现的前端性能也就越差。写放大系数很多因素相关,例如op、应用io pattern等。如果应用io pattern比较好,那么可以降低写放大系数,背景噪声流就会减少,前端业务的性能会提升。例如,在ssd完全顺序写入的情况下,写放大系数可以接近于1,此时gc产生的数据流很少,背景流量基本没有,后端带宽基本被业务数据流占用,因此对外体现的性能会很好。
gc是影响性能的重要因素,除了影响性能之外,gc会增大写放大,对ssd的使用寿命产生影响。从软件层面的角度考虑,可以通过优化应用io pattern的方式优化ssd内部gc,从而进一步提升ssd的性能,优化使用寿命。对于下一代更为廉价的qlc ssd介质,就需要采用这种优化思路,否则无法很好地满足实际业务的应用需求。


IT配电系统在医疗领域的应用
滤波电抗器和普通电抗器的区别
线性稳压器的工作原理及应用
荣耀终端公司公开封装结构、芯片及设备专利
立创·梁山派开发板-21年电赛F题-送药小车-K210更换固件-运行基础颜色识别例程
NVMe SSD性能影响因素分析
高通第二代骁龙4芯片发布,传由台积电转单三星代工
锂电池的安全特性
使用555定时器构建一个升压转换器电路
MAX14780E ESD保护的RS-485/RS-422收
开关电源的防雷要害
ADI公司扩充恒定导通时间、同步降压型控制器产品线
格物致智,焕新而来!全新第二代中科广电CASAIM-IS自动化智能检测系统正式上市!
电池电芯制造中箔片发生断裂怎么办?
电荷放大器和电压放大器各有何特点
天惠微2.4G蓝牙双模昆腾KT1200定制蓝牙DSP耳机收发模块PCBA
一种利用表面微加工和真空封装制造传感器的新颖工艺流程
基于全新Stellar E1微控制器的22KW OBC-DC/DC ST系统解决方案
网站安全系统都有哪些方面的安全保障
浅谈RFID的工作原理及其技术参数