内存ECC基础纠错算法有哪些?

3.1 基础纠错算法

3.1.1 SECDED纠错算法

SECDED(Single Error Correction Double Error Detection)是一种经典的ECC方案,能够纠正单比特错误并检测出双比特错误。在图4(a)中,展示了SECDED的编码过程。在这个过程中,使用了原始奇偶校验位P、数据位D以及计算出来的校验位P'。例子中,数据位D有16位,而奇偶校验位P'有5位,形成一个编码词组(16,11),意味着原始数据加上校验位共21位。

编码公式如下:

  • P′0 = P0异或D1异或D2异或D4异或D5异或D7异或D9异或D11

  • P′1 = P1异或D1异或(D3异或D4)异或(D6异或D7)异或(D10异或D11)

  • P′2 = P2异或(D2异或D3异或D4)异或(D8异或D9异或D10异D11)

  • P′3 = P3异或(D5至D11的全部异或)

  • P′4 = (P0至P4的全部异或)异或(D1至D11的全部异或)

这些公式说明了如何基于原始数据位和初始奇偶校验位P0至P4(均设为0)计算出校验位P'0至P'4。如果数据位的每行比特数之和为偶数,则对应的奇偶校验位为0;否则为1。通过这个过程,得到的校验位序列P′4P′3P′2P′1P′0为01100,与图4(a)中的数据值相对应。

图片

图4(b)展示了当第三位数据错误变为1时的情况,这导致E1、E2和E4位产生错误。此时,通过应用SECDED编码,可以检测并纠正这个单比特错误,恢复原始数据的完整性。该例证展示了SECDED在数据保护中的有效性,即使在数据传输或存储过程中出现单个比特的错误,也能确保数据的正确性。

3.1.2 SSCDSD纠错算法

SSCDSD(Single symbol correction double symbol detection )是一种纠正方法,它将4至8位视为一个符号单位进行处理,相较于SECDED,提供了更为强大的错误纠正能力。在多数情况下,SSCDSD能够修正一个符号内所有位的错误。基于SSCDSD的纠错码在某些情况下相比SECDED能提供高达42倍更好的错误避免能力。

图片

图5(a)展示了SSCDSD的实现方式。采用18个符号组成的码字,即(144,128)编码格式,其中包括128位数据和16位ECC,这16位ECC中又包含了8位CRC和8位奇偶校验。四个这样的码字组成一条缓存行。这样的设计使得SSCDSD能够在单一符号内纠正多种位错误,无论8位符号内的错误模式如何,如图5(b)所示。然而,如果错误跨越两个符号,则会被识别为一个不可纠正的符号错误(UE),类似于SECDED处理双比特错误的方式。如果错误影响到两个符号,则只能检测到错误而无法纠正。

SSCDSD能够根据DRAM的类型,将数据和奇偶校验信息以4位符号为单位进行划分。使用这种4位符号单元的ECC类型被称为“chipkill校正”。这种方法特别有效于处理DRAM芯片级别的错误,即使整个芯片失效也能纠正错误,从而增强系统的容错能力。

SSCDSD的实施依赖于CPU的架构和代际。不同的CPU架构可能需要不同的错误纠正覆盖范围和内存配置,以启用高级ECC功能。这意味着在设计支持SSCDSD的系统时,需要考虑CPU的具体型号和其所支持的内存错误纠正机制,确保内存子系统的可靠性和效率。

3.1.3 CRC纠错算法

循环冗余校验(CRC)是一种用于检测计算机数据中意外错误的技术,常应用于数字信号的发送/接收器和存储设备中。它通过利用除法运算和特定的多项式生成器来工作。

图片

图6形象地展示了CRC的工作流程。具体步骤如下:

  • CRC发送端处理(图6a):首先,在发送端,数据被除以一个预定的多项式比特序列(例如,多项式p(x) = x^3 + x + 1,对应的二进制形式为1011)。此过程会产生一个余数,然后将这个余数添加到原始数据的末尾,形成一个新的数据序列进行传输。

  • 传输与接收:经过这样处理的数据被发送给接收端,接收端再次用同样的多项式比特序列对收到的数据进行除法运算。

  • 错误检测:如果除法运算的结果全为0,则表明在传输过程中没有发生错误,数据被接受;反之,则认为数据在传输中出现了错误。

  • 编码示例(图6b):假设使用多项式p(x) = 1011,数据1001进行编码时,除法运算后余数为110。因此,编码后的数据为1001110。

  • 解码示例(图6c):接收到的1001110数据同样除以多项式1011,如果结果全为0,则确认数据无误。

3.1.4 Chipkill纠错算法

SECDED技术能够纠正单个比特的错误并检测出两个比特同时出错的情况,但面对多比特错误时就无能为力了。为了解决这一局限性,可以采用一种名为“Chipkill”的纠错方法。

Chipkill 是一种增强型纠错码(ECC)技术,专为解决单个DRAM芯片完全故障或多比特错误而设计。与传统SECDED不同,它能够纠正整个内存芯片失效所导致的错误,而不仅仅局限于单个或双个比特错误。

图片

  • 四个72比特的ECC字(包含数据和纠错码)均匀分布在四个DIMMs上。每个DIMM代表了系统内存的一部分,这样的分布增强了错误容忍度。

  • SECDED编码同时应用于这四个不同的数据字,使得理论上每次最多可以纠正四个独立的单比特错误,或是一些组合的错误模式,包括一个DIMM内的多比特错误或一个整个DIMM的失效。

  • 服务器需要能够同时利用这四个DIMMs进行数据处理和错误纠正,意味着系统设计上要有相应支持。

  • 使用的编码方案为(72, 64)码,意味着在72比特的代码中,有64比特用于实际数据存储,剩余8比特用于纠错码。这种配置提供了至少12.5%的冗余率,即额外的校验比特占总数据量的比例。

Chipkill技术显著提升了系统对于内存错误的抵抗能力,特别是在服务器和高性能计算环境中,能够提高系统的稳定性和可靠性,减少因内存错误导致的数据丢失或系统崩溃的风险。Chipkill通过增加数据冗余和采用特殊的编码及分布策略,克服了SECDED技术不能处理多比特错误的限制,是提升系统内存错误纠正能力的有效手段。

完整分析解读参考:数据中心内存RAS技术全景剖析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/799849.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32之八:IIC通信协议

目录 1. IIC协议简介 1.1 主从模式 1.2 2根通信线 2. IIC协议时序 2.1 起始条件和终止条件 2.2 发送一个字节 2.3 接收一个字节 2.4 应答信号 1. IIC协议简介 IIC协议是一个半双工、同步、一主多从、多主多从的串行通用数据总线。该通信模式需要2根线:SCL、…

mysql(5.5)启动服务和环境配置

正常启动 参考:Javaweb基础之mysql回溯笔记(一) 总的来说就是在mysql的安装目录下,找到bin下面的msyqld.exe,双击即启动了mysql服务; 启动方式二 也可以直接找到windows的服务项进行启动,操作如下: 打开…

opencascade AIS_InteractiveContext源码学习8 trihedron display attributes

AIS_InteractiveContext 前言 交互上下文(Interactive Context)允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是,对于已经被交互上下文识别的交互对象,必须使用上下文方法进行…

MySQL集群、Redis集群、RabbitMQ集群

一、MySQL集群 1、集群原理 MySQL-MMM 是 Master-Master Replication Manager for MySQL(mysql 主主复制管理器)的简称。脚本)。MMM 基于 MySQL Replication 做的扩展架构,主要用来监控 mysql 主主复制并做失败转移。其原理是将真…

linux高级编程(网络)(www,http,URL)

数据的封包和拆包 封包: 应用层数据(例如HTTP请求)被传递给传输层。传输层(TCP)在数据前添加TCP头部(包含端口号、序列号等)。网络层(IP)在TCP段前添加IP头部&#xff…

解读InnoDB数据库索引页与数据行的紧密关联

目录 一、快速走进索引页结构 (一)整体展示说明 (二)内容说明 File Header(文件头部) Page Header(页面头部) Infimum Supremum(最小记录和最大记录) …

多模态大模型 - MM1

1. 摘要 本文主要通过分析模型结构和数据选择讨论如何构建一个好的多模态大模型(MLLM),并同时提出了MM1模型,包括30B dense版本和64B的MoE版本。 具体贡献: 模型层面:影响效果的重要性排序为:…

昇思25天学习打卡营第10天|NLP-RNN实现情感分类

打卡 目录 打卡 任务说明 流程 数据准备与加载 加载预训练词向量(分词) 数据集预处理 模型构建 Embedding RNN(循环神经网络) LSTM 全连接层 损失函数与优化器 训练逻辑 评估指标和逻辑 模型训练与保存 模型加载与测试 自定义输入测试 …

周报(1)<仅供自己学习>

文章目录 一.pytorch学习1.配置GPU2.数据读取问题1(已解决问题2(已解决 3.卷积的学习 二.NeRF学习1.介绍部分问题1(已解决 2.神经辐射场表示问题2(已解决问题3(已解决问题4(已解决问题5:什么是视…

1-5岁幼儿胼胝体的表面形态测量

摘要 胼胝体(CC)是大脑中的一个大型白质纤维束,它参与各种认知、感觉和运动过程。尽管CC与多种发育和精神疾病有关,但关于这一结构的正常发育(特别是在幼儿阶段)还有很多待解开的谜团。虽然早期文献中报道了性别二态性,但这些研究的观察结果…

Armv8-R内存模型详解

目录 1.内存模型的必要性 2.Armv8-R内存模型分类 2.1 Normal memory 2.2 Device Memory 2.2.1 Gathering 2.2.2 Reordering 2.2.3 Early Write Acknowledgement 3.小结 大家好,今天是悲伤的肌肉。 在调研区域控制器芯片时,发现了S32Z、Stellar …

从Centos7升级到Rocky linux 9后,网卡连接显示‘Wired connection 1‘问题解决方法

问题描述 从Centos7升级到Rocky9后, 发现网卡eth0的IP不正确。通过nmcli查看网卡连接,找不到name为eth0的连接,只显示’Wired connection 1’ 查看/etc/NetworkManager/system-connections/,发现找不到网卡配置文件。 原因分析 centos7使…

git取消合并:--hard 或 --merge

第一步:查了git日志 git reflog如下,运行上述命令后,可以看见所有的提交哈希(id) 第二步 查看到上述所有的提交记录后,有如下方法去回退 方法1:--hard 确定上一次提交的哈希值 git reset…

RK3568笔记三十八:DS18B20驱动开发测试

若该文为原创文章,转载请注明原文出处。 DS18B20驱动参考的是讯为电子的单总线驱动第十四期 | 单总线_北京迅为的博客-CSDN博客 博客很详细,具体不描述。 只是记录测试下DS18B20读取温度。 一、介绍 流程基本和按键驱动差不多,主要功能是…

内存RAS技术介绍:内存故障预测

故障预测是内存可靠性、可用性和服务性(RAS)领域中的一个重要方面,旨在提前识别潜在的不可纠正错误(UE),以防止系统崩溃或数据丢失。 4.1 错误日志记录与预测基础 错误一般通过Linux内核模块Mcelog记录到…

Matlab 判断直线上一点

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 判断一个点是否位于一直线上有很多方法,这里使用一种很有趣的坐标:Plucker线坐标,它的定义如下所示: 这个坐标有个很有趣的性质,我们可以使用Plucker坐标矢量构建一个Plucker矩阵: 则它与位于对应线上的齐次点…

鸿蒙语言基础类库:【@system.configuration (应用配置)】

应用配置 说明: 从API Version 7 开始,该接口不再维护,推荐使用新接口[ohos.i18n]和[ohos.intl]。本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import configurati…

uniapp启动图延时效果,启动图的配置

今天阐述uniapp开发中给启动图做延迟效果,不然启动图太快了,一闪就过去了; 一:修改配置文件:manifest.json "app-plus" : {"splashscreen" : {"alwaysShowBeforeRender" : false,"…

vue学习day09-自定义指令、插槽

29、自定义指令 (1)概念:自己定义的指令,可以封装一些dom操作,扩展额外的功能。 (2)分类: 1)全局注册 2)局部注册 3)示例: 让表…

前端Vue组件化实践:自定义银行卡号格式化组件的探索与应用

在前端开发中,随着业务逻辑的复杂化和应用规模的扩大,传统的一体式开发方式逐渐显露出其局限性。任何微小的改动或新功能的增加都可能牵一发而动全身,导致整体逻辑的修改,进而增加了开发成本和维护难度。为了解决这一问题&#xf…