QLC SSD:LDPC纠错算法的优化方案
随着NAND TLC和QLC出现,LDPC也在不断的优化研究,提升纠错能力。小编看到有一篇来自Microchip发布的比较详细的LDPC研究数据,根据自己的理解分析解读给大家,如有错误,请留言指正!
文档中测试LDPC(Low-Density Parity-Check)码是为了评估其在不同配置下对数据错误的有效纠正能力,并优化现代NAND设备所需的错误纠正解决方案。实验针对两种不同的码率(Code Rate, CR)进行了测试:一种为0.919,另一种为0.871,这两种码率下的数据块分别有不同的数据和校验位组合。
-
FEC(Forward Error Correction)块是一种数据结构,其中不仅包含用户实际要存储或传输的数据部分,还包含了用于错误检测和纠正的LDPC(Low-Density Parity-Check)校验位。在NAND闪存等存储技术中,通过添加这些校验信息可以提高数据的可靠性和鲁棒性。
-
码率(Code Rate, CR)是一个关键参数,它定义了有效数据量与整个编码块大小之间的比率。具体而言,CR等于数据大小除以(数据大小加上校验位大小)。例如,如果一个FEC块中有4352字节数据和384字节的LDPC校验位,则其码率为0.919,这意味着该编码方案中大约92%的空间被用来存储有效数据,而剩余8%的空间用于提供错误修正能力。
-
Bit-Error Rate(BER)描述的是在一个数据块内,每一个比特发生错误的概率是相同的。也就是说,在进行错误模拟时,每比特都独立且具有相同概率地发生错误。
-
Error Rate(Err)则是在一组数据块中,确保每个数据块内部含有相同数量的错误比特,这是一种不同的错误插入模型,关注的是整体错误分布的均衡性,而非单个比特的独立性。
-
Frame-Error Rate(FER)则是指经过LDPC译码后,一个FEC块出现错误的概率,即未能正确解码的FEC块所占的比例。它是衡量纠错编码系统性能的一个重要指标,理想情况下,FER应该尽可能低,以确保数据传输或存储过程中的高可靠性。
对于4k字节的数据块,实验采用了以下几种配置:
-
4352字节数据,4736字节数据和校验位,CR为0.919;
-
4352字节数据,4992字节数据和校验位,CR为0.871。
同样,对于16k字节的数据块,其大小恰好是4k字节块的四倍,并且也有相应的测试配置:
-
17408字节数据,18952字节数据和校验位,CR仍为0.919;
-
17408字节数据,19968字节数据和校验位,CR保持在0.871。
实验使用了一种通用的最小和解码算法对这些LDPC码词进行了解码,并对比了不同码率、不同数据块大小下的帧错误率(FER)与比特错误率(BER)的关系。

从LDPC FER与BER对比的图表(红色曲线代表CR为0.919,蓝色曲线代表CR为0.871,虚线表示4k字节块,实线表示16k字节块)中可以看出:
-
16k字节块的“瀑布曲线”更为陡峭,表明在同等BER水平下,16k字节块的FER表现更好,即需要更高的BER才会导致解码失败,意味着较大的数据块在采用相同LDPC编码时能更有效地抵抗随机比特错误。

此外,为了公平比较不同大小数据块的FER,将4k字节块的结果转换为等效于16k字节的FER值,通过公式16keq = 1-(1-FER)^4进行调整,结果显示在特定BER下(如BER=1e-4),16k等效FER的表现比原始4k字节块约提升了15%。
BER 4k Byte Error PDF 是关于4k字节数据块在不同比特错误率(Bit Error Rate, BER)下的错误分布概率密度函数(Probability Density Function, PDF)的图表。这个图表详细描述了在给定BER水平下,4k字节数据块中错误比特数目的概率分布状况。

BER模型表明,在分析每块数据时,其内部错误遵循高斯分布(Gaussian distribution),即随着BER的增加,错误数目的分布宽度也随之扩大。这意味着在较高的BER值下,数据块中可能会遇到更多数量的错误比特,分布范围更广。此外,对于16k字节的数据块,即便在相同的BER条件下,它们的错误分布更为紧密,即错误数目落在某特定区间的概率更高,这是因为在较大的数据块中,即使总体错误率不变,单个比特出错的概率会因为数据块内比特总数的增加而变得更加均匀分布。
下图不同码率对应的不同数据块大小的平均迭代次数随BER变化的曲线,可以帮助我们观察并量化不同条件下的纠错效率。在选择最优LDPC编码方案时,除了考虑平均迭代次数外,还需要满足其他性能要求,比如软触发率阈值,通常设定在FER(Frame Error Rate)为1e-2到1e-6之间。最优解决方案应当是在满足FER要求的同时,具有最低的平均迭代次数,从而实现最大的数据传输或存储吞吐量。

“LDPC FER vs. Err (Scaled)”图表显示:
-
在BER指标下,尤其是在BER较高区域,16k字节和4k字节数据块的性能差异较大。
-
但在统一错误率模型下,相较于按照BER标准评价时的情况,4k字节和16k字节数据块在处理相同数量错误比特时的性能差距有所缩小,这表明在某些应用场景下,特别是在存在均匀分布错误的情况下,16k字节数据块可能并不会因为其尺寸增大而带来明显的纠错劣势。同时这也体现出LDPC编码在处理不同类型的错误模式时具有较强的适应性和灵活性。

根据提供的样本NAND闪存错误分布的分析,揭示了实际NAND闪存设备中错误出现的统计特性。Y轴表示错误发生的概率,X轴表示错误率。每个数据块中的错误数量等于错误率乘以数据块大小。典型特征是大多数数据块的错误率都很低,但有一小部分数据块存在较高的错误率ÿ
相关文章:
QLC SSD:LDPC纠错算法的优化方案
随着NAND TLC和QLC出现,LDPC也在不断的优化研究,提升纠错能力。小编看到有一篇来自Microchip发布的比较详细的LDPC研究数据,根据自己的理解分析解读给大家,如有错误,请留言指正! 文档中测试LDPC(Low-Density Parity-Check)码是为了评估其在不同配置下对数据错误的有效…...
【Flutter 面试题】main()和runApp()函数在Flutter的作用分别是什么?有什么关系吗?
【Flutter 面试题】main()和runApp()函数在Flutter的作用分别是什么?有什么关系吗? 文章目录 写在前面解答补充说明 写在前面 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主&…...
ChatGPT高效提问——说明提示技巧
ChatGPT高效提问——说明提示技巧 现在,让我们开始体验“说明提示技巧”(IPT, Instructions Prompt Technique)和如何用它生成来自ChatGPT的高质量的文本。说明提示技巧是一个通过向ChatGPT提供需要依据的具体的模型的说明来指导ChatGPT输出…...
从零学算法41
41.给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 示例 2: 输入:nums […...
FPGA高端项目:FPGA基于GS2971的SDI视频接收+OSD动态字符叠加,提供1套工程源码和技术支持
目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收转HDMI输出应用本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI接收HLS多路视频融合叠加应用…...
UML-类图详解
UML中基本概念说明 UML类图中关系连接线说明 UML类图说明 号表示public、-表示表示private、#表示protected UML类关系详解 泛化(Generalization)关系 简单的讲就是类之间的继承关系。在UML中,泛化关系用空心三角形实线来表示&…...
Python 快速获取PDF文件的页数
有时在处理或打印一个PDF文档之前,你可能需要先知道该文档包含多少页。虽然我们可以使用Adobe Acrobat这样的工具来查看页数,但对于程序员来说,编写脚本来完成这项工作会更加高效。本文就介绍一个使用Python快速获取PDF文件页数的办法。 安装…...
uniapp开发小程序使用x-www-form-urlencoded; charset=UTF-8 编码格式请求案例
使用x-www-form-urlencoded,header要放在前面,第一行位置。 uni.request({ header: { content-type: application/x-www-form-urlencoded; charsetUTF-8},url: ,method:POST, //请求方式POST\GETdata:that.loginData,success: funct…...
酷开科技服务升级,酷开系统给消费者更好的使用体验!
看电视的时候你是不是也会有选择困难症?不知道要看哪个?不知道如何操作?体验不够顺畅?现在,有了酷开系统9.2,这些通通不再是问题!酷开科技,一直致力于服务升级,给消费者更…...
【leetcode热题】单词拆分
难度: 中等通过率: 33.7%题目链接:. - 力扣(LeetCode) 题目描述 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明&#…...
【论文阅读】MC:用于语义图像分割的深度卷积网络弱监督和半监督学习
【论文阅读】MC:用于语义图像分割的深度卷积网络弱监督和半监督学习 文章目录 【论文阅读】MC:用于语义图像分割的深度卷积网络弱监督和半监督学习一、介绍二、联系工作三、方法四、实验结果 Weakly- and Semi-Supervised Learning of a Deep Convolutio…...
读书·基于RISC-V和FPGA的嵌入式系统设计·第3章
72.8051单片机的弊端和指令集架构CISC的缺点 76.RV指令集的特征(⭐) 特权架构和特权指令集是相关但不完全相同的概念。 特权架构(Privileged Architecture)指的是计算机体系结构中用于实现特权级操作的硬件和软件机制。特权架构定…...
本地项目推送到腾讯云轻量应用服务器教程(并实现本地推送远程自动更新)
将本地项目上传到腾讯云轻量应用服务器并实现后续的推送更新,具体步骤如下: 在本地项目目录下初始化 Git 仓库: cd 项目目录 git init将项目文件添加到 Git 仓库并提交: git add . git commit -m "Initial commit"在…...
MacOS安装反编译工具JD-GUI 版本需要1.8+
Java Decompiler http://java-decompiler.github.io/ 将下载下来的 jd-gui-osx-1.6.6.tar 解压,然后将 JD-GUI.app 文件拷贝到 Applications 应用程序目录里面 1.显示包内容 2.找到Contents/MacOS/universalJavaApplicationStub.sh 3.修改sh文件 内容修改为下面…...
计算机大数据毕业设计-基于Flask的旅游推荐可视化系统的设计与实现
基于Flask的旅游推荐可视化系统的设计与实现 编程语言:Python3.10 涉及技术:FlaskMySQL8.0Echarts 开发工具:PyCharm 摘要:以Pycharm为旅游推荐系统开发工具,采用B/S结构,使用Python语言开发旅游景点推…...
java实现pdf转word
java实现pdf转word 前言pom文件启动入口过滤器对象ConvertPdfToWordWithFlowableStructure转换实现类 前言 1.java实现pdf转word。 2.纯免费开源。 3.pdf解析完会生成word文件和图片文件夹。 4.无页码限制,文本类型生成到word中,图片生成到图片文件夹中…...
【操作系统概念】 第4章:线程
文章目录 0.前言4.1 概述4.1.1 多线程编程的优点 4.2 多线程模型4.2.1 多对一模型4.2.2 一对一模型4.2.3 多对多模型 4.3 线程库4.4 多线程问题4.4.1 系统调用fork()和exec()4.4.2 取消4.4.3 信号处理4.4.4 线程池4.4.5 线程特定数据 0.前言 第3章讨论的进程模型假设每个进程是…...
STM32/GD32——I2C通信协议
芯片选型 Ciga Device — GD32F470系列 通讯规则 I2C协议(或称IIC)是由飞利浦(现在的恩智浦半导体)公司开发的一种通用的总线协议。它使用两根线(时钟线和数据线)来传输数据,支持多个设备共享…...
Apache Paimon 使用之Creating Catalogs
Paimon Catalog 目前支持两种类型的metastores: filesystem metastore (default),在文件系统中存储元数据和表文件。 hive metastore,将metadata存储在Hive metastore中。用户可以直接从Hive访问表。 1.使用 Filesystem Metastore 创建 Cat…...
IntelliJ IDEA分支svn
IntelliJ IDEA分支svn 【为何使用分支】 项目开发中经常会遇到这种情况,项目中功能开发完上线后,新的需求又来了,风风火火的在项目里开发, 突然有一天测试说有个很致命的bug需要紧急修改上线,完蛋了,原来…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...
rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...
