NVMe SSD性能影响因素一探究竟(下)

3.2 io pattern对性能的影响
io pattern会对ssd的性能产生严重影响,主要表现在如下几个方面:
1, 不同的io pattern会产生不同的写放大系数,不同的写放大系数占用后端nand flash带宽不同。当前端应用对ssd采用完全顺序的方式进行写入时,此时是最佳的io pattern,对于ssd而言写放大系数接近1,ssd内部的背景流量基本可以忽略,前端性能达到最佳。在实际应用中,很难采用这种完全顺序的数据写模型,但可以通过优化逼近顺序写入。
2, 不同请求大小的io之间会产生干扰;读写请求之间会产生干扰。小请求会受到大请求的干扰,从而导致小请求的延迟增加,这个比较容易理解,在hdd上同样会存在这种情况。由于nand flash介质存在严重的读写不对称性,因此读写请求之间也会互相干扰,尤其是写请求对读请求产生严重的性能影响。
3.2.1 顺序写入pattern对ssd性能优化的奥秘
在针对闪存系统的设计中,需要考虑io pattern对性能产生的影响,通过软件的优化来最优化ssd的使用。在实际应用中完全顺序写入的io pattern基本上是不存在的,除非用作顺序写入的日志设备。对于顺序写入优化性能这个结论,需要从ssd内部实现来深入理解,知道根源之后,可以采用合理的方式来逼近顺序写入的模式,从而最优化ssd的性能。
ssd内部采用log-structured的数据记录模式,并发写入的io数据按照时间顺序汇聚成大数据块,合并形成的大数据块以page stripe的方式写入nand flash。多个page stripe会被写入同一个gc单元(chunk orsuperblock),当一个gc单元被写完成之后,该gc单元进入sealed模式(只读),分配新的gc单元写新的数据。在这种模式下,如果多个业务的数据流并发随机地往ssd中写入数据,那么多个应用的数据就会交错在一起被存储到同一个gc单元中。如下图所示,不同应用的数据生命周期不同,当需要回收一个gc单元的时候,会存在大量数据的迁移,这些迁移的数据就会形成写放大,影响性能和使用寿命。
不同应用的数据交错存储在同一个gc单元,本质上就是不同冷热程度的数据交错存储的问题。从gc的角度来讲,相同冷热程度的数据存储在同一个gc单元上是最佳的,为此三星推出了multi-stream ssd,该ssd就允许不同应用的数据存储到不同的stream单元(gc单元),从而提升gc效率,降低写放大。multi-stream是一种显式的设计方式,需要更改ssd接口以及应用程序。
从io pattern的角度考虑,可以通过顺序大块的方式也可以逼近类似的效果。假设操作ssd只存在一个线程,不同的应用都采用大数据块的方式写入数据,那么在一个时间片段内只存在一个应用的数据往ssd中写入数据,那么在一个gc单元内存储的数据会变得有序和规则。如下图所示,采用上述方法之后,一个gc单元内存储的数据将会变得冷热均匀。在gc过程中会大大减少数据的搬移,从而减少背景流量。
在实际应用中,上述io pattern很难产生,主要是应用很难产生非常大粒度的请求。为此在存储系统设计过程中,可以引入optane高性能存储介质作为ssd的写缓存。前端不同业务的写请求首先写到optane持久化介质中,在optane持久化介质中聚合形成大数据块。一旦聚合形成大数据块之后,再写入ssd,通过这种方式可以最大程度地逼近ssd顺序写入过程,提升ssd的性能和使用寿命。
3.2.2 读写冲突pattern对性能的影响
如下图所示,nand flash介质具有很强的读写不对称性。block erase和page program的延迟会远远高于page read所耗费的时间。那么在这种情况下,如果read请求在同一个flash channel上和erase、program操作冲突,那么read操作将会被erase/program操作影响。这是在读写混合情况下,读性能会受到影响的重要因素。
在实际应用过程中,经常会发现应用的测试结果和ssd spec对不上,会比spec给出的值要来的低。spec给出的值通常为纯读或者纯写情况下的性能指标,在读写混合的场景下,性能表现和spec给出的值就会存在非常大的出入。
对于不同的ssd,通过测试可以发现在读写混合情况下的性能表现差距会比较大。在ssd处于稳态条件下,应用随机读的情况下,如果引入一个压力不是很大的顺序写,那么会发现不同ssd的抗干扰能力是不同的。有些ssd在写干扰的情况下,读性能会急剧下降,延迟快速上升,qos性能得不到保证。下图是两个ssd在相同情况下的测试结果,从结果来看,有些ssd的抗写干扰能力比较强,读性能不会急剧下降。
为什么有些ssd会具备比较强的抗写干扰能力呢?其中的奥秘就在于ssd内部的io调度器。io调度器会对write、read 和erase请求进行调度处理,该调度器算法的不同就会表现出不同的抗干扰能力。目前很多nandflash可以支持program/erase suspension的功能,在io调度处理的过程中,为了提升读性能,降低读请求延迟,可以采用suspension命令对program/erase命令暂停,对read请求优先调度处理。
读写冲突是ssd内部影响io qos的重要因素。在ssd内部通过io调度器的优化可以提升ssd性能的qos能力,但是还是无法与存储软件结合来协同优化qos。为了达到最佳的ssd性能qos,需要关注openchannel技术。openchannel其实只是一种软硬件层次划分的方法,通常来讲,ssd内部的逻辑可以划分为面向nand资源的物理资源管理层以及面向数据布局的资源映射层。物理资源管理由于和nand flash密切相关,因此可以放到ssd内部。
传统的nvme ssd需要对外暴露标准的块设备接口,因此需要在ssd内部实现资源映射层。从端至端的角度来看,资源映射层可以与存储软件层结合起来,为此将资源映射层从ssd内部剥离出来,集成至存储软件层。一旦资源映射层从ssd内部剥离之后,需要定义一个新的ssd接口,其中的一种接口方式就是openchannel。
盘古分布式存储针对ssd qos问题进行了大量研究,提出了object ssd的概念,object ssd也是一种新的ssd接口方式,其采用对象方式对ssd进行读写删操作,每个对象采用append write操作方式。这种接口方式可以很好的与分布式存储无缝结合。采用object ssd之后,ssd内部的大量工作被简化,io的调度会更加灵活,存储软件与ssd协同配合,达到io性能的最优化,以及qos的最大化。
4 ssd写性能分析模型
ssd内部的数据流分成两大类,一类为前端用户数据流;另一类为内部背景数据流。前端用户数据流和背景数据流会汇聚成nand flash后端流量。当背景数据流不存在时,nand flash带宽会被用户数据流全部占据,此时ssd对外表现的性能达到最佳。当ssd具有较大写放大时,会产生很大的背景数据流,背景流会抢占nandflash带宽,导致前端用户io性能降低。为了稳定前端io性能,在ssd内部的调度器会均衡前端和背景流量,保证前端性能的一致性。背景流量的占比反应了ssd的写放大系数,因此,站在nand flash带宽占用的角度可以分析ssd在稳态情况下的性能。
下图是intel p4500和samsung pm963随机写延迟和推导公式之间的对比。结果非常吻合。
由此可以推出,随机写性能由ssd内部后端带宽以及写放大系数来决定。因此,从存储软件的角度出发,我们可以通过优化io pattern的方式减小写放大系数,从而可以提升ssd的随机写性能。
5 小结
闪存存储技术正在飞速发展,闪存介质、ssd控制器、存储系统软件、存储硬件平台都在围绕闪存日新月异的发展。闪存给数据存储带来的价值显而易见,数据中心闪存化是重要发展趋势。nvme ssd性能受到很多因素的影响,在软件层面可以通过io pattern优化ssd的性能,使得整体存储系统的性能达到最佳。


采埃孚首发运动控制高性能计算平台 OMNIVISION推出汽车摄像头系统
智能云防雷,信号浪涌保护器防雷接地方案
如何在Linux系统上安装软件
几款大功率精确电流控制的H桥电机驱动芯片
现代汽车推由AI驱动的儿童玩具电动车
NVMe SSD性能影响因素一探究竟(下)
是德科技最新 5G 测试解决方案确保为移动运营商、网络公司提供精确的 5G 规划建模和覆盖,加快产品的上市
晶圆生产工艺流程
人工肌肉——石墨烯液晶弹性体纤维
基于IP设计的8位SoC微微器ET44M210
爱司凯3D打印中心启动,助力中原制造业发展
电动汽车充电桩中的漏电保护应用分析 RCD的分类和选型
maven配置镜像及修改仓库地址
PLC系统柜的零部件都有哪些
中国一汽董事长、党委书记徐留平一行到访中兴通讯,携手推动新能源汽车发展
DIY一个超大容量移动电源
这家企业的LED显示屏助力多个卫视跨年晚会
CAN应用层协议详解之DeviceNet协议
集成温度传感器ILPC616构成的摄氏温度检测电路
桥式整流电容滤波电路的输出电压的算法