数据库管理-第218期 服务器内存(20240711)

news2024/9/20 16:40:43

数据库管理218期 2024-07-11

  • 数据库管理-第218期 服务器内存(20240711)
    • 1 内存
    • 2 ECC内存
    • 3 原理
      • 3.1 多副本传输
      • 3.2 纠错码
      • 3.3 汉明码
    • 总结

数据库管理-第218期 服务器内存(20240711)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、年度墨力之星,ITPUB认证专家、专家百人团成员,OCM讲师,PolarDB开源社区技术顾问,HaloDB外聘技术顾问,OceanBase观察团成员,青学会MOP技术社区(青年数据库学习互助会)技术顾问
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭

之前对CPU、SSD和网络等服务器涉及的硬件进行过讲解,除开主板承载了前面说的这些组件以外,还有一个非常重要的组件,那就是内存,相较于一般桌面级(一般家用PC)内存,服务器内存一把自带纠错功能,我们也称之为ECC(Error Checking and Correcting)内存。
本期就简单针对ECC内存如何工作的进行简单讲解。

1 内存

内存(Memory)是计算机的重要部件,它用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行。只要计算机开始运行,操作系统就会把需要运算的数据从内存调到CPU中进行运算,当运算完成,CPU将结果传送出来。
内存的出现主要是为了弥补外部存储与CPU内建缓存(即L1、L2、L3)之间巨大的带宽与延迟差异,本质上也是一个相较于CPU内建缓存更大但是一般远小于外部存储的中间数据转存设备,提前将数据从速度较慢的外部存储提前加速准备,减少甚至消除CPU获取数据等待时间。
我们现在在服务器上主要使用的内存是DDR内存,具体什么是DDR这里就不做深入讲解了,主流的内存代数为DDR4和DDR5。除了一般内存以外,还有基于内存接口(或PCIe接口)的非易失性内存PMEM(以Intel傲腾为例),在内存和外部存储之间提供了一块更大且速度接近于内存的数据缓存区域。

2 ECC内存

一般来说,服务器是承载重要的业务系统的,在电子设备运行过程中是存在大量电磁干扰的,这些电磁干扰是可能造成内存与CPU数据交互过程中发生比特翻转(即0和1互换),这样数据执行就会发生错误,如果是一般PC的软件或程序运行可能即使报错或者闪退,但是如果是重要系统出现该问题则会造成比较严重的后果(毕竟银行不想你的资产平白无故多几个0,你也不希望自己资产变少吧)。
那么ECC内存就应运而生了,主动发现数据中出现的数据错误,并予以纠正。

3 原理

这里先介绍两种比较原始的解决方案:

3.1 多副本传输

即一段数据传输3份,如果某一份的任意位置出现问题了,可以纠正:
image.png
但是问题也出现了,虽然出现的概率很低,如果有两份数据在同一个位置都发生了比特翻转,那么这份数据校验纠错就会出现问题:
image.png
而使用这种方式最大的问题还是浪费IO带宽。

3.2 纠错码

这种方式数据的开头添加一个纠错码,即在每一段数据前添加一个纠错码,当数据中1的数量为偶数则纠错码为0,奇数则纠错码是1。
image.png
如果纠错码与1的数量不匹配则重新传输这份数据。
image.png
这里也造成了一个问题,每次校验只能判断整份数据是否正常,理论上没有做到纠错,重新传输会增大延迟。
同时如果同时出现两位数据错误,则依然无法达到校验的目的。

3.3 汉明码

汉明码是目前ECC内存使用的主要校验纠错方式。
这里循序渐进一下,把一个16bit的数据按照下面的方式排布,假设2号位负责对右边部分进行奇偶校验,那么这份数据两个1,则2号位为0。如果数据出现错误,奇偶校验判定右半区没有问题,那么问题就在左半区了,反之问题就在右边。
image.png
如下图,1号位对2、4列进行奇偶校验,那么1号位存储则为1。如果2、4列奇偶校验出现问题,那么问题就在2、4列,反之是1、3列出现问题。
image.png
上面两种配合起来就能很好确认那一列数据出现了问题:
image.png
接下来使用类似的方式,用4号位校验2、4行,8号为校验下半区,通过行分列、分区奇偶校验就可以找到错误的具体位置,执行纠错(翻转)即可。
image.png
但是上面的判断前提是默认数据出现了问题,用上面的方法判断完成之后,0号的数据位是没有纳入保护中的,他的错误与否,不影响上面奇偶校验的结果。因此我们将0号位用3.2中的方式来校验整块数据。
image.png
这种情况下如果有两个错误,会出现全盘奇偶校验和分列分区奇偶校验结果相冲突,无法判断错误位置,但是可以判定位整块数据出现异常。重新传输数据即可。
image.png
但是当数据错误出现到3个时,就无法判断了。
image.png
换一种方式,我们会发现,校验码的位置都是2的N次方:
image.png
校验码只需要放在2的N次方位置上,那么块越大,纠错码占用的内容就更少,但是出现多位翻转的概率也就越大。一般的ECC传输块大小是72bit,64bit是数据,8bit是纠错码。因此一般8G容量的内存仅需要8块1G的内存颗粒,而ECC内存要达到8G容量就需要9块1G的内存颗粒,多的1G用于存储多出来的纠错码所占容量。
但是计算机校验纠错肯定不会如我们一般的“傻乎乎”的方式去计算错误位置,这里可以利用二进制的魅力来实现,我们把位置用二进制来表示:
image.png
我们将所有为1的位置拿出来,做个竖向二进制抑或运算,就可以直接得出有问题的位置:
image.png

附:还有一种LDPC(Low Density Parity-Check Code),即低密度奇偶校验码,具体实现原理这里就不做解释了,这种方式可以判断多位翻转的问题,常用于SSD的校验纠错。由于内存的高速和实现成本的特性,因此还是使用汉明码来实现ECC。

总结

本期简单介绍了ECC内存是如何实现校验纠错的。
老规矩,知道写了些啥。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP三次握手四次挥手原理

学习视频:TCP三次握手四次挥手 TCP报文格式 源端口号和目的端口号:同IP数据报中的源IP与目的IP唯一确定一条TCP连接 序号seq(4字节32位):用来标识TCP发端向TCP收端发送的数据字节流 确认序号(4字节32位)&a…

5.SpringBoot核心源码-启动类源码分析

目录 概述技巧spring boot 如何启动应用程序run方法里面核心逻辑 SpringApplicaiton.run(xxx.class,args)结束 概述 SpringBoot核心源码-启动类源码分析 技巧 如何给外部源码加注释,想要在源码中添加自己的注释,会弹出 file is read only,代…

光电门与电压放大器做电磁感应定律验证实验

根据上述原理可知,实验需要测量的量有两个:挡光时间间隔和挡光时的电压平均值。挡光时间可通过Arduino的数字输入端口采集光电门信号并计算得到,电压值可以通过Arduino的模拟信号输入端口采集。但是由于Arduino的模拟信号输入端只能精确到5mV…

【微信小程序开发】如何定义公共的js函数,其它页面可以调用

在微信小程序开发中,可以通过以下步骤定义和使用公共的 JS 函数,使得其它页面可以调用: 1. 创建一个公共的 JS 文件:在项目的 utils 目录下创建一个 JS 文件,例如 utils/util.js。 2. 定义公共函数:在 uti…

【Python从入门到进阶】60、Pandas中DataFrame对象的操作(一)

接上篇《59、Pandas库中Series对象的操作(二)》 上一篇我们讲解了Series对象的运算、函数应用、时间序列操作,以及Series的案例实践。本篇我们来讲解Pandas中DataFrame对象的操作。 一、DataFrame对象的基本概念及特点 在Pandas库中,DataFrame是一种非…

基于Python+Django+MySQL的心理咨询预约系统

心理咨询预约系统 DjangoMySQL 基于PythonDjangoMySQL的心理咨询预约系统 项目主要依赖Django3.2,MySQL 支持随机验证码生成与登录验证 简介 基于PythonDjangoMySQL的心理咨询预约系统通过连接数据库获取数据,登录新增随机数字验证码验证。具体可以看…

网络请求优化:如何让你的API飞起来

网络请求优化:如何让你的API飞起来 亲爱的开发者朋友们,你是否曾经遇到过这样的场景:用户疯狂点击刷新按钮,你的服务器却像老年人散步一样慢吞吞地响应。或者,你的应用像个贪吃蛇,疯狂吞噬用户的流量包。如果你对这些情况再熟悉不过,那么恭喜你,你正需要…

【Linux】进程间通信(IPC)——匿名管道

目录 为什么要进行进程间通信? 匿名管道的具体实现 pipe创建内存级文件形成管道 pipe的简单使用 匿名管道的四种情况和五种特性 四种情况 五种特性 PIPE_BUF 命令行管道 | 功能代码:创建进程池 为什么要进行进程间通信? 1.数据传输&…

1.27、基于径向基神经网络的曲线拟合(matlab)

1、基于径向基神经网络的曲线拟合简介及原理 1)原理简介 基于径向基神经网络(Radial Basis Function Neural Network, RBFNN)的曲线拟合是一种常用的非线性拟合方法,通过在输入空间中使用径向基函数对数据进行处理,实现对非线性关系的拟合。 RBFNN的基本原理是将输入空…

opencascade AIS_InteractiveContext源码学习8 trihedron display attributes

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

Hash表(C++)

本篇将会开始介绍有关于 unordered_map 和 unordered_set 的底层原理,其中底层实现其实就是我们的 Hash 表,本篇将会讲解两种 Hash 表,其中一种为开放定址法,另一种为 hash 桶,在unordered_map 和 unordered_set 的底层…

【Git从入门到精通】——Git常用命令总结

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

火星全球彩色影像图介绍(中分辨率相机)

一、数据基本信息 该数据是利用天问一号轨道器中分辨率相机获取的影像经光度校正、几何校正、全球制图等制作而成的全火星地图数据DOM,每个数据包含一个tif数据文件。该影像图分辨率为76米。 任务型号:天问一号 搭载平台:环绕器 数据获…

批量提取网页表格内容至excel文件

问题背景 将网页的表格内容(5237个股票信息)复制粘贴到excel文件中 网址:A股上市公司名单-A股上市公司名录-A股上市公司大全-商业计划书-可研报告-中商产业研究院数据库-中商情报网 实现代码 # 导入包 import pandas as pd import time# 创…

[安洵杯 2019]easy_web1

知识点: 1.base64加解密 2.md5加解密 3.md5碰撞绕过强类型比较 4.Linux命令绕过 进入页面发现url地址中存在 img参数和一个cmd参数,img参数看上去像是base64编码,可以去尝试一下解码. 进行了两次base64解密得到3535352e706e67看着像16进制那么…

SSM整合--笔记总结

1.概述 ssm(springmvc spring mybatis)这三个框架的整合。 spring和springmvc他们隶属于一家公司,他们无需整合。 spring和mybatis框架的整合。 spring把mybatis中的配置内容放到自己的配置文件中。因为我们可以让tomcat加载spring配置文件。 思考:mybatis配置文件…

SD card知识学习

一、基础知识 1、简介 SD Card 全称(Secure Digital Memory Card),日本电子公司松下(Panasonic)、瑞典公司爱立信(Ericsson)、德国公司西门子(Siemens)共同开发的,于1999年发布根…

Java中如何发送短信?(荣耀典藏版)

大家好,我是月夜枫~~ 本来是没计划写这方面的文章,奈何粉丝经常私信要求整理一篇发短信的文章,今天他来了。 很多业务场景里,我们都需要发送短信,比如登陆验证码、告警、营销通知、节日祝福等等。 这篇文章&#xf…

JavaSE——集合框架二(4/6)-Map集合的遍历方式(键找值,键值对,Lambda)、Map集合案例(需求与分析,问题解决)

目录 Map集合的遍历方式 键找值 键值对 Lambda Map集合案例 需求与分析 问题解决 Map集合的遍历方式 键找值 先获取Map集合全部的键,再通过遍历键来找值。 键值对 把“键值对”看成一个整体进行遍历(较为复杂) Lambda JDK 1.8 开…

C嘎嘎:函数模版和类模版

目录 泛型编程 函数模版 函数模版概念 函数模版的格式 函数模版的原理 函数模版的实例化 函数参数的匹配原则 类模版 类模版的定义格式 类模版的实例化 泛型编程 如何实现一个通用的交换函数呢 void Swap(int& left, int& right) {int temp left;left rig…