SSD Wear Leveling磨损均衡,并不是一直有效,甚至有负面作用!--part2

2023-12-13 10:36

本文主要是介绍SSD Wear Leveling磨损均衡,并不是一直有效,甚至有负面作用!--part2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为了测试不同WL算法的性能影响,论文中在随机写压力下设定了两个参数:r,写IO比例;h,热数据比例。后续的测试基本采用的r/h=0.9/0.1的IO负载。

图片

在这种工作负载压力下,PWL算法的在80遍写盘后的写放大增加了11.49,这个写放大已经非常严重了。

图片

上图,根据CDF(Cumulative Distribution Function,即累积分布函数)曲线来看,在不同的工作负载(r/h=0.9/0.1 vs r/h=0.5/0.5)情况下,WL不同的算法效果相差很大,同时也有可能带来负面的效果,加速了寿命消耗!

图片

上图,减少了数据占用空间,再结合前两张图的对比,发现上面四种情况:只有数据访问相对均衡且占用空间较小时,WL磨损均衡算法才是有效的。其他场景磨损均衡效果不大,甚至可能产生负面影响

图片

最后,论文中提出了一种可变容量SSD的概念(类似ZNS SSD也可以通过zone来调整容量),可变容量是如何延长SSD的寿命的呢?

  • 首先,由于容量变化可以有效地提高存储效率,这就意味着在相同的物理存储空间内可以存储更多的数据。这样就可以减少SSD的写入次数和擦除次数,从而延长其寿命。

  • 其次,容量变化还可以平衡SSD内部各个区块的磨损程度。由于不同区块的存储空间是动态调整的,那些经常被写入的区块可以得到更多的存储空间,从而延长其寿命。

为了验证效果,论文设计了8个SSD模拟器,分别在9种workload负载种进行实际测量:

(1)8个SSD模拟器

图片

(2)9种workload负载

图片

实验数据表明:

  • 可变容量SSD相比容量固定的SSD,寿命平均提升86%,最大提升了2.94倍。 

  • 可变容量SSD的场景下,WL反而起了负面作用,没有WL磨损均衡算法效果更好,写放大更低。

图片

论文解读后评

  • 该论文作者,看到了目前WL磨损均衡的一些弊端,并提出一些思路,可变容量这个想法,实施过程还需要上层文件系统的配合(比如,逻辑空间的重新映射),这个实施难度个人觉得还是挺大的。

  • 论文至少提醒大家一个观点WL磨损均衡,并不是所有场景都是有效的,还有可能出现负面影响。SSD从业者在设计WL磨损均衡算法时,也需要进行通盘考虑,给出最优方案。

小编每日撰文不易,如果您看完有所受益,欢迎点击文章底部左下角“关注”并点击“分享”、“在看”,非常感谢!

精彩推荐:

  • 大容量疯了!居然想把磁带放到硬盘,100TB+是否可以实现?

  • NAND Vpass对读干扰和IO性能有什么影响?

  • HDD与QLC SSD深度对比:功耗与存储密度的终极较量

  • 小米14魔改存储芯片多出8GB空间背后的秘诀

  • SSD IO性能优化是一项复杂但很有趣的工程

  • 双11即将来临,挑选SSD硬盘最全避坑指南

  • 性能领域:你知道的越多,不知道的也就越多

  • NVMe SSD:ZNS与FDP对决,你选谁?

  • 如何通过优化Read-Retry机制降低SSD读延迟?

  • 关于硬盘质量大数据分析的思考

  • 存储系统性能优化中IOMMU的作用是什么?

  • 全景解析SSD IO QoS性能优化

  • NVMe IO数据传输如何选择PRP or SGL?

  • 浅析nvme原子写的应用场景

  • 多维度深入剖析QLC SSD硬件延迟的来源

  • 浅析PCIe链路LTSSM状态机

  • 浅析Relaxed Ordering对PCIe系统稳定性的影响

  • 实战篇|浅析MPS对PCIe系统稳定性的影响

  • 浅析PCI配置空间

  • 浅析PCIe系统性能

  • 存储随笔《NVMe专题》大合集及PDF版正式发布!

这篇关于SSD Wear Leveling磨损均衡,并不是一直有效,甚至有负面作用!--part2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/488134

相关文章

C++ move 的作用详解及陷阱最佳实践

《C++move的作用详解及陷阱最佳实践》文章详细介绍了C++中的`std::move`函数的作用,包括为什么需要它、它的本质、典型使用场景、以及一些常见陷阱和最佳实践,感兴趣的朋友跟随小编一起看... 目录C++ move 的作用详解一、一句话总结二、为什么需要 move?C++98/03 的痛点⚡C++

JAVA transient 关键字作用详解

《JAVAtransient关键字作用详解》Java的transient关键字用于修饰成员变量,使其不参与序列化过程,通过自定义序列化方法,可以手动控制transient变量的序列化行为,本文给大... 目录一、transient关键字作用二、原理详解三、典型使用场景四、代码示例五、注意事项六、与 stat

Spring Boot/Spring MVC核心注解的作用详解

《SpringBoot/SpringMVC核心注解的作用详解》本文详细介绍了SpringBoot和SpringMVC中最常用的15个核心注解,涵盖了请求路由映射、参数绑定、RESTfulAPI、... 目录一、Spring/Spring MVC注解的核心作用二、请求映射与RESTful API注解系列2.1

MySQL数据库读写分离与负载均衡的实现逻辑

《MySQL数据库读写分离与负载均衡的实现逻辑》读写分离与负载均衡是数据库优化的关键策略,读写分离的核心是将数据库的读操作与写操作分离,本文给大家介绍MySQL数据库读写分离与负载均衡的实现方式,感兴... 目录读写分离与负载均衡的核心概念与目的读写分离的必要性与实现逻辑读写分离的实现方式及优缺点读负载均衡

C#中的sealed修饰符的作用详解

《C#中的sealed修饰符的作用详解》在C#中,sealed修饰符的作用是“密封”用来阻止类被继承,或者阻止方法/属性在派生类中被重写,接下来通过本文给大家介绍C#中的sealed修饰符的作用详解,... 目录✅ 1.sealed用于类(class)作用:示例:✅ 2.sealed用于方法或属性(必须与

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

java中反射Reflection的4个作用详解

《java中反射Reflection的4个作用详解》反射Reflection是Java等编程语言中的一个重要特性,它允许程序在运行时进行自我检查和对内部成员(如字段、方法、类等)的操作,本文将详细介绍... 目录作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re