详细解读QLC SSD无效编程问题-3

2024-01-05 09:36

本文主要是介绍详细解读QLC SSD无效编程问题-3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图片

数据块大小Block Size对无效编程(Invalid Programming)比率的影响。研究范围内Block Size大小从128 Pages到2048 Pages不等。实验结果显示,随着块大小的增加,无效比率也呈现上升趋势,但增长速率较小。

这种现象的原因在于,每个Open Block的最后一部分页面可以立即进行精调编程而无需等待,因为这些页面在第一步粗调编程操作中没有后续页面。当缓存大小和Open Block数量固定时,单个Block中的Pages数量增多将会降低“无需等待”进行精调编程的Page数量,从而导致无效比率增加。然而,能够立即精调编程的页面仅占块内总页面的一小部分,因此即使块大小增大,无效比率也不会有显著变化。

在NAND闪存阵列中,同时等待精调编程的最大页面数量取决于可以并行写入Block(即Open Block)的数量。一般来说,等待第二步精调编程的同时进行的页面数量越多,无效比率就越高。

图片

实验结果显示,在不同Open Block数量(从4个到64个)下,各种工作负载的无效比率表现各异。对于诸如Mds_0和Prxy_0这样的工作负载,随着Open Block数量的增加,无效比率显著上升。这是因为更多Open Block数量意味着在相同时间内写入单个开放块的数据量减少。然而,在其他一些工作负载上,当开放块数量从4个增加到16个时,无效比率也可能下降。

在NAND闪存系统中,LRU列表用于区分热数据和冷数据,从而决定数据应被放置到SLC还是QLC存储区域。相比于热数据,写入QLC的冷数据更新频率更低,对无效编程问题的敏感度也较低。

图片

通过延长LRU列表的长度,更多的数据将被分类为热数据并随后写入SLC,这会导致无效比率显著下降。实验结果显示,在不同LRU长度(从32到512)下,对于大多数工作负载,随着LRU长度的增加,无效比率会降低。

图片

值得注意的是,对于Proj_0工作负载,其无效比率略有上升。这是因为随着LRU长度的扩展,粗调编程页面所需的平均时间也会延长,这使得这些页面更有可能提前失效。

在3D QLC NAND闪存中,采用两步编程策略,一次会对四个页面同时进行编程。因此,在第二次编程步骤中,无效页面的数量可能从0到4不等

图片

实验结果显示,不同工作负载表现出不同的行为特征,但对于所有的工作负载来说,在第二次编程步骤中有相当大比例的WL存在无效页面。例如,在Web_1工作负载中,少于50%的WL在第二次编程时其四个页面都是有效的。而在遭受无效编程的WL中,大多数WL有一到两个页面在精细编程之前就被无效化了。然而,也有一些WL的情况是所有四个页面都被无效化。

这篇关于详细解读QLC SSD无效编程问题-3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

springboot3.4和mybatis plus的版本问题的解决

《springboot3.4和mybatisplus的版本问题的解决》本文主要介绍了springboot3.4和mybatisplus的版本问题的解决,主要由于SpringBoot3.4与MyBat... 报错1:spring-boot-starter/3.4.0/spring-boot-starter-

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告:

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

关于Nginx跨域问题及解决方案(CORS)

《关于Nginx跨域问题及解决方案(CORS)》文章主要介绍了跨域资源共享(CORS)机制及其在现代Web开发中的重要性,通过Nginx,可以简单地解决跨域问题,适合新手学习和应用,文章详细讲解了CO... 目录一、概述二、什么是 CORS?三、常见的跨域场景四、Nginx 如何解决 CORS 问题?五、基

Rust中的注释使用解读

《Rust中的注释使用解读》本文介绍了Rust中的行注释、块注释和文档注释的使用方法,通过示例展示了如何在实际代码中应用这些注释,以提高代码的可读性和可维护性... 目录Rust 中的注释使用指南1. 行注释示例:行注释2. 块注释示例:块注释3. 文档注释示例:文档注释4. 综合示例总结Rust 中的注释

MySQL安装时initializing database失败的问题解决

《MySQL安装时initializingdatabase失败的问题解决》本文主要介绍了MySQL安装时initializingdatabase失败的问题解决,文中通过图文介绍的非常详细,对大家的学... 目录问题页面:解决方法:问题页面:解决方法:1.勾选红框中的选项:2.将下图红框中全部改为英

Java集合中的List超详细讲解

《Java集合中的List超详细讲解》本文详细介绍了Java集合框架中的List接口,包括其在集合中的位置、继承体系、常用操作和代码示例,以及不同实现类(如ArrayList、LinkedList和V... 目录一,List的继承体系二,List的常用操作及代码示例1,创建List实例2,增加元素3,访问元

解读Pandas和Polars的区别及说明

《解读Pandas和Polars的区别及说明》Pandas和Polars是Python中用于数据处理的两个库,Pandas适用于中小规模数据的快速原型开发和复杂数据操作,而Polars则专注于高效数据... 目录Pandas vs Polars 对比表使用场景对比Pandas 的使用场景Polars 的使用