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

2024-01-05 00:44

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

此前小编关于QLC SSD有过多篇文章,具体参考如下:

  • 为什么QLC NAND才是ZNS SSD最大的赢家?

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

  • QLC SSD在数据中心的发展前景如何?

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

最近看到一篇厦门大学最近发表的关于QLC SSD无效编程的论文,有很多非常有意思的数据对比,这里分享给大家。存储随笔的论文解读,不是直接翻译,是小编先研读一遍后,再结合自己的理解再解读分享,可能讲述顺序与原始论文架构可能会有差异,如果不当之处,还望见谅。想直接阅读原文的朋友也可以后台私信关键词invalidQLC获取论文。也欢迎各位朋友给小编推荐更多有趣的论文!

在QLC闪存中采用的两步编程方法是为了应对高密度存储带来的挑战。QLC NAND闪存是一种每单元可存储4比特数据的存储技术,它将阈值电压细分为16个电压状态以实现这一目标。然而,由于每个电压状态分布非常窄且紧凑,相邻单元之间的编程干扰和早期电荷损失会对最终编程电压分布产生显著影响,从而导致高比特错误率。

图片

为了解决这个问题,3D QLC NAND闪存采用了两步编程策略:

  1. 粗略编程(Coarse Programming):首先对某一层中的一个字线(WL)进行粗略编程,将单元编程到比目标电压稍低的16个电压级别中。这个阶段的主要目的是快速地将数据写入闪存单元,但由于相邻单元间的影响,实际写入的电压可能与目标电压存在一定的偏差。

  2. 精调编程(Fine Programming):在完成同一层下一个字线或下一层对应字线的粗略编程之后,再返回来对先前粗略编程过的WL进行精调编程,将单元精确地编程到最终的目标电压状态。这种过程能够减少相邻单元间的编程干扰,并允许更准确地控制单元的电压水平,从而提高数据的可靠性

通过这种方式,虽然牺牲了一定的编程速度和增加了操作复杂性,但有效缓解了QLC NAND闪存中由于电压状态过多而引发的程序干扰问题,提高了整体的数据稳定性和存储系统的寿命。

Invalid-Programming Issue无效编程问题在3D QLC NAND闪存中,源于其采用的两步编程机制。具体来说,在该机制中,对某一层的一个字线(WL)进行精调编程之前,必须等待下一层对应位置的字线完成粗略编程。这种顺序要求导致了同一WL两次编程步骤之间存在一段实质性的等待时间

假设数据被写入WL𝑖,1并存储在缓存中,为了执行WL𝑖+1,1的粗略编程,需要缓存四个页面的数据。假定页面21已被写入缓存,并且有三个已粗略编程的新页面(8, 12, 20)现在又被更新。这会导致这三个页面在其对应的WL上失效,它们将与页面21一起被编程到WL𝑖+1,1。之后,WL𝑖,1可以进行精调编程,并从缓存中移除。但在WL𝑖,1的精调编程过程中,有一个页面已经无效,但所有四个页面都被进行了精调编程。这种情况会发生在其他字线上,第二次编程步骤中的无效页面数量可能不止一个。

图片

这一问题的核心在于,在两次编程步骤之间的时间间隔内,原本在缓存中等待精调编程的数据由于新的写入请求而被更新,即变为无效数据,但是按照原有的编程流程,这些无效数据依然会被进行精调编程,造成了时间和能源的浪费。

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



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

相关文章

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu