服务器之 ECC 内存的工作原理

这篇具有很好参考价值的文章主要介绍了服务器之 ECC 内存的工作原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是飞哥!

在开始今天的分享之前,我先给大家看两个 1R * 8 的内存条。

现在的 CPU 都是 64 位的,每次和内存通信都要传输 64 比特的数据。1R * 8 类型的内存中的 1R 指的是该内存条只有一个 rank,8 指的是在每一次 64 比特的内存 IO 过程中,每个内存颗粒分别提供 8 比特的数据。这样计算一下,64 比特的数据就需要 8 个内存颗粒共同来组成。

内存ecc纠错原理,服务器,运维

内存ecc纠错原理,服务器,运维

这两个内存条中,为什么一个是 8 个颗粒,另一个是 9 个颗粒呢?这个故事还要从比特翻转说起。

一、比特翻转和 ECC 内存

我们的电脑在运行的时候,CPU 一直都需要和内存进行数据交互。但在交互的过程中,由于周围电磁场的干扰,会有概率发生比特翻转。

内存ecc纠错原理,服务器,运维

据统计,一根 8 GB 的内存条平均大约每小时会出现 1 - 5 个这样的错误。

内存ecc纠错原理,服务器,运维

我们使用个人电脑在办公的时候,由于内存主要都用来处理图片、视频等数据。即使内存出现了比特翻转,可能影响的只是一个像素值,很难感觉出来,没有太大的影响。即使是比特翻转真的发生在关键的系统代码导致运行出问题,也不是什么大事,重启一次就解决了。

但在服务器应用中,处理的一般都是非常重要的计算,可能是一笔订单交易,也可能是一笔存款。另外就是服务器经常是连续要运行几个月甚至是几年,没有办法通过重启的方式来解决问题。因此服务器对比特翻转错误的容忍度很低。需要有技术方案能够一定程度解决比特翻转问题所带来的影响。

内存ecc纠错原理,服务器,运维

ECC 就是这样一种内存技术。它的英文全称是 “Error Checking and Correcting”,对应的中文名称就叫做“错误检查和纠正”。从它的名称中我们可以看出,ECC 不但能发现内存中的错误,而且还可以进行纠正。

相比没有使用 ECC 技术的个人电脑内存,内存颗粒中全部都用来存储数据即可。在 ECC 内存中每 64 比特的数据都需要额外的 8 比特数据作为校验位,用来辅助发现或者纠正错误。

内存ecc纠错原理,服务器,运维

所以,开篇的问题我们就有答案了。普通的内存条中全部颗粒都用来存储真正的数据。而 ECC 内存中除了数据外,还需要存储 8 比特的校验位。

在普通的 1R * 8 的内存中需要 64 / 8 = 8 个颗粒就够了。但是 ECC 内存中一次 IO 要传输 72 比特的数据,所以总共需要 72 / 8 = 9 个内存颗粒。

问题已经弄明白了。但是咱们「开发内功修炼」公众号的风格是不光要知道,还要弄懂原理。所以我们再接着看 ECC 纠错算法是如何工作的。

二、ECC 纠错原理

那么为什么 ECC 内存有了额外的 8 比特的冗余校验数据就能够发现和纠正错误了呢?我们先来看下最简单的奇偶校验。

2.1 简单的奇偶校验

简单的奇偶校验可以用来发现单比特翻转。注意重点关键字是“发现”和“单比特”。该算法只能用作发现,无法纠错。而且也只针对单比特翻转有效,无法处理两个比特同时翻转的情况。

其原理是在要监测的数据前面加入 1 比特的数据,用来保证整个二进制数组中(包括校验位)的 1 的个数是偶数。

例如下面是一个 8 比特的二进制数组。

内存ecc纠错原理,服务器,运维

对于情况1:假设原始数据中已经是偶数个 1 了,所以校验位设置为 0 就可以了,这样整体上 1 的个数是偶数个。

对于情况2:假设原始数据中 1 的个数为奇数个,所以校验位需要设置为 1 ,以保证整个数组中 1 的个数是偶数个。由于校验位并不是真正的用户数据,所以并不影响数据的正确读取。

总的来说,在加完 1 比特校验位的二进制数组中,正确的情况下 1 的个数永远是偶数个。

如果有 1 比特位发生了翻转的话,必然会导致二进制数组中 1 的个数变成了奇数个。这样,我们通过观察数据中 1 的个数是不是偶数个就可以知道有没有单比特翻转发生了。

了解完原理你也就知道前面提到的简单奇偶校验的两个局限性了

  • 一是只能发现出错了,但并不知道哪个位置出错,所以无法纠错。

  • 二是只能发现单比特翻转,对于两个比特的翻转无能为力。

2.2 海明码介绍

为了解决纠错和两个数据出错的问题,Richard Hamming 于 1950 年在简单奇偶校验算法的基础上提出了也叫海明校验码算法。Richard Hamming 本人也因为该算法获得了 1968 年的图灵奖。该虽然至今已经过去了 70 多年,但至今仍然广泛应用在服务器的 ECC 内存上。

首先要说的是海明码是有局限性的。对于以下几种情况:

  • 如果 64 比特数据中发生了单比特翻转的话,海明码不但能够发现发生了错误,还能够找到错误的位置并纠正。

  • 如果发生了两个比特翻转,海明码只能够发现出了错误。但无法定位到具体的位置无法纠错,只能通过重传的方式来解决。

  • 如果发生了 3 个或者以上的比特翻转的话,海明码就无能为力了。

在实际中,内存中 64 比特数据中 3 个或者更多比特同时发生的概率非常非常的低。另外就是内存在运行上要求速度要足够的快,海明码用硬件实现起来性能损耗大约只有 2% - 3%。所以虽然海明码不能应对 3 比特以上的比特翻转,但目前仍然广泛地应用在服务器端的内存的错误检查和纠正上。在 SSD 硬盘中由于应用场景的不同,采用的是支持多比特翻转校验和纠错的 LDPC 码。

因为基于海明码的 ECC 内存不能处理 3 比特或以上的比特翻转,所以在安全对抗领域里有个专门的方向是研究如何实现在内存中人为故意制造 3 比特翻转实现攻击行为。以及如何对抗 3 比特翻转攻击。

2.3 海明码算法设计

海明校验码算法设计的核心思想就是多设置几个校验位,然后采用交叉验证的方式来实现错误比特位的定位。

海明码中包含 64 比特的用户数据和 8 比特的冗余校验码,所以总共有 72 比特的数据。这 72 比特的数据可以看做一个 9 行 8 列的二维矩阵。

第一层校验是矩阵最左上角的比特校验位,这个是用来实现整个矩阵的奇偶校验的。

第二层校验是列分组校验。在列上,采用了 3 种方式对 8 列进行不同方式的二分法分组,每种分组都设计一个校验比特位,用来实现整个分组的奇偶校验。

第一个列分组方式是将 2、4、6、8 列看做一个分组,在这个分组中安排一个比特作为校验码

内存ecc纠错原理,服务器,运维

第二个列分组方式是将 3、4、7、8 列看做一个分组,在这个分组中再安排一个比特作为校验码

内存ecc纠错原理,服务器,运维

第三个列分组方式是将 5、6、7、8 列看做一个分组,在这个分组中再安排一个比特作为校验码

内存ecc纠错原理,服务器,运维

这样这三个分组方式犬牙交错,互相都包含了另外一个分组的部分列。

内存ecc纠错原理,服务器,运维

第三层是行分组校验。在行上由于比列多了一行,所以采用了 4 个分组进行简单奇偶校验。

第一个行分组方式是将 2、4、6、8 行看做一个分组,在这个分组中安排一个比特作为校验码

内存ecc纠错原理,服务器,运维

第二个行分组方式是将 2、3、7、8 行看做一个分组,在这个分组中再安排一个比特作为校验码

内存ecc纠错原理,服务器,运维

第三个行分组方式是将 5、6、7、8 行看做一个分组,在这个分组中再安排一个比特作为校验码

内存ecc纠错原理,服务器,运维

第三个行分组方式是把剩下的第 9 行单独看做一个分组,在这个分组中也安排一个比特作为校验码

内存ecc纠错原理,服务器,运维

以上就是海明码算法的设计原理。

2.4 海明码单比特翻转纠错

接下来我们看下海明码算法是如何实现对单比特翻转的发现和纠错的。我们假设在这些数据中出现了单比特翻转。再具体一点,比如说第 30 号用户数据比特位出错了。

这时候第一层所有比特位的校验能够发现有比特错误发生。但还不知道发生在哪里。

接着再采用第二层列分组校验。

内存ecc纠错原理,服务器,运维

根据 3 个列分组分别校验的时候,发现第一个列分组方式校发现错误,第二个列分组方式校验通过,第三个列分组方式校验发现错误。根据各个分组之间的包含关系,就可以推断出是错误是发生在第 6 列

接着再进行第三层行分组校验。

内存ecc纠错原理,服务器,运维

第一行分组校验通过、第二行分组校验通过、第三行分组校验失败、第四行分组校验通过。那么根据行分组的交叉关系,就可以推断出出错数据发生在第 5 行

再结合上面列分组的校验结果,就能推断出是第 5 行,第 6 列位置的数据出错了。由于二进制数据只有 0 和 1 两种取值,那么发现错误就可以将其纠正过来。这就是海明码对单比特错误检查和纠错的实现原理。

2.4 海明码两比特错误发现

海明码对于单比特错误可以实现纠错,但对于两比特同时发生错误就只能发现错误,没有办法定位错误的位置,也就无法实现纠错了。

我们假设用户数据的第 29、第 30 比特位发生了错误。那么由于是同时发生了两个错误,那么整个矩阵中的校验肯定是无法发现的,校验通过。

内存ecc纠错原理,服务器,运维

我们再来看列校验结果。

内存ecc纠错原理,服务器,运维

第一分组发现错误、第二分组校验正确、第三分组校验正确(简单奇偶校验无法发现两个比特的错误),那么列分组交叉验证得出的结论是在第 2 列发生错误。很明显,两个比特翻转的错误导致列分组校验结论出错了。

在来看行校验结果。

内存ecc纠错原理,服务器,运维

行分组的校验结论是全部正确。两个比特翻转导致行校验也失效了。

那么1)全矩阵校验的结论是没有错误、2)列分组校验结论是第 2 列发生错误,3)行分组校验结论也是没有错误。

三个校验结论不符,说明发生了错误,但不止一个

海明码发现了有了错误,但无法知道错误的具体位置。出现这种情况,本次内存 IO 返回数据作废,重新读取就好了。

需要提的是,海明码在 3 比特或者更多比特出现错误的情况下,可能会误判为正确。但因为在 64 比特中有 3 比特同时出现错误的概率太低了,所以海明码仍然广泛地应用在服务器的 ECC 内存中。

总结

开篇我们看到了两个内存条,一个有 8 个黑色颗粒,另外一个有 9 个内存颗粒。这是因为 ECC 内存除了每次提供给 CPU 64 位的用户数据以外,还需要额外提供 8 比特的数据作为冗余校验位。这些冗余校验位的功能是用来实现对单比特错误的发现和纠错,对于两个比特的错误能做到发现错误,但无法纠错。

由于需要额外的 8 比特冗余校验位,所以 ECC 内存中的颗粒数比普通内存要多。对于 1R * 8 的内存来说,ECC 内存需要 9 个颗粒。对于 1R * 4 的内存来说,由于一个内存颗粒的位宽是 4 ,所以需要多两个颗粒才够。

欢迎大家把本文转发给你的同学朋友一起学习!

内存ecc纠错原理,服务器,运维文章来源地址https://www.toymoban.com/news/detail-839408.html

到了这里,关于服务器之 ECC 内存的工作原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • openssl SM2(ECC)自签服务端和客户端证书

    参考文章:https://www.golinuxcloud.com/openssl-generate-ecc-certificate/#5_Create_CA_certificate_with_ECC_Key (228条消息) openssl 制作SM2多级证书链_酷ying的博客-CSDN博客_openssl sm2 sm3 csr 1、在当前目录创建存储证书文件夹,配置openssl.cnf所需要的文件,将openssl.cnf文件放到当前目录(编译openssl源码包会

    2024年02月11日
    浏览(31)
  • Web服务器的工作原理

    很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它们是怎样处理来自全世界的http请求的?它们在幕后做了什么动作?Java Servlet API(例如ServletContext,ServletRequest,ServletResponse和Session这些类)在其中扮演了什么角色?这些都是web应用开发者或者

    2024年02月08日
    浏览(28)
  • VPN服务器的工作原理以及搭建过程

    简单叙述: 当你使用VPN连接后访问一个网站时,你的请求会首先通过VPN客户端加密后传送到代理服务器,然后由VPN服务器代表你向目标网站的服务器发送请求。在目标服务器看来,收到请求的IP地址是VPN服务器的IP地址,因此目标服务器只能看到VPN服务器的IP地址,而无法直接

    2024年04月13日
    浏览(32)
  • Linux下Web服务器工作模型及Nginx工作原理详解

    在Linux环境下,Web服务器处理并发连接请求的工作模型主要有阻塞、非阻塞、同步、异步等方式。以下是对各种工作模型的浅析: 同步阻塞 I/O: 类比于在餐厅等饭,需要在取餐处等待,期间不能进行其他事情。 同步非阻塞 I/O: 类比于在餐厅等饭,可以进行其他事情,但需

    2024年02月03日
    浏览(31)
  • Linux的DHCP工作原理和dns服务器

    目录 一、DHCP原理 1.DHCP的好处 2.DHCP的分配方式 3.实验 二、dns服务器 1.什么是dns 2.dns域名解析 3、在内网搭建dns DCHP工作原理使用C/S架构  (1)第一步,客户端广播发送一个discover报文寻找DHCP服务器。 (2)第二步,DHCP服务器收到discover报文后广播返回一个offer报文,里面包括

    2024年01月17日
    浏览(41)
  • 概述、搭建Redis服务器、部署LNP+Redis、创建Redis集群、连接集群、集群工作原理

    Top 案例1:搭建redis服务器 案例2:常用命令限 案例3:部署LNP+Redis 案例4:创建redis集群 1.1 具体要求如下 在主机redis64运行redis服务 修改服务运行参数 ip 地址192.168.88.64 服务监听的端口6364 redis服务的连接密码为 tarenaplj 1.2 方案 准备1台新虚拟机,要求如表-1所示。   1.3 步骤 实

    2024年02月12日
    浏览(51)
  • ECC椭圆曲线入门

    https://web3study.club/ ECC(Ellipse Curve Cryptography)又称椭圆曲线密码体制、椭圆曲线加密算法等。 椭圆曲线加密算法在比特币、区块链上有着广泛的应用。 公式: y^2 = x^3 + ax + b 这里使用简单易懂的方式对大家介绍这部分内容,让大家有个简单的理解 公私钥加密内容​ 公钥未公开部

    2023年04月09日
    浏览(31)
  • ECC算法学习(一)算法公式

    ECC全称为“Ellipse Curve Ctyptography”,是一种基于椭圆曲线数学的公开密钥加密算法。与传统的基于大质数分解难题的加密算法不同,该加密方式基于 “离散对数” 这种数学难题。 椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。 优缺点 优点:

    2024年04月22日
    浏览(52)
  • 数字签名验签 — ECC算法

    ​ 前段时间,项目上有需求对于重要文件的传输接收时,接收端需要对文件进行安全校验,采用数字签名的方式确保数据来源的安全性以及数据完整性。之前未接触过密码安全方面的知识,现将实施过程中所遇所学记录下来~ ​ 本文将按照以下知识内容来记录: ​ 1 数字签

    2024年02月05日
    浏览(28)
  • 椭圆曲线加密算法(ECC)——计算问题

    椭圆曲线加密算法,简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法。 一般情况下,椭圆曲线可用下列方程式来表示,其中a,b,c,d为系数。 E:y2=ax3+ bx2+cx+d 题目:已知点G=(2,7)在椭圆曲线E11(1,6)上,计算2G的值。 ! 1这里设Q为椭圆曲线上的一个点,叫做基点

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包