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

数据库管理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.mzph.cn/pingmian/46184.shtml

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

相关文章

华为生成树协议技术概述

生成树协议(Spanning Tree Protocol,STP)是一种网络协议,旨在防止以太网网络中发生环路。环路会导致广播风暴、MAC地址表混乱等问题,从而严重影响网络性能和稳定性。华为交换机支持多种生成树协议,包括STP、…

数据库第六次

视图 salary decimal(10,2) not null default 0 comment ‘工资’, address varchar(200) not null default ‘’ comment ‘通讯地址’, dept_id int comment ‘部门编号’ ); create index idx_name on emp(emp_name); create index idx_birth on emp(birth); create index…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥删除(ArkTS)】

密钥删除(ArkTS) 为保证数据安全性,当不需要使用该密钥时,应该删除密钥。 开发步骤 以删除HKDF256密钥为例。 确定密钥别名keyAlias,密钥别名最大长度为64字节。初始化密钥属性集。用于删除时指定密钥的属性TAG,比如删除的密钥…

【java】力扣 合并k个升序链表

文章目录 题目链接题目描述思路代码 题目链接 23.合并k个升序链表 题目描述 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表 思路 我在这个题里面用到了PriorityQueue(优先队列) 的知识 Prio…

顶顶通呼叫中心中间件实现随时启动和停止质检(mod_cti基于FreeSWITCH)

文章目录 前言联系我们拨号方案启动停止ASR执行FreeSWITCH 命令接口启动ASR接口停止ASR接口 通知配置cti.json配置质检结果写入数据库 前言 顶顶通呼叫中心中间件的实时质检功能是由两个模块组成:mod_asr 和 mod_qc。 mod_asr:负责调用ASR将用户们在通…

算法训练营day08 字符串(反转,替换,综合运用(逻辑+反转))

💡 解题思路 📝 确定输入与输出🔍 分析复杂度🔨 复杂题目拆分 :严谨且完整 地拆分为更小的可以解决的子问题(字符的逻辑拆分)–(多总结)💭 选择处理逻辑&…

进程通信(1):无名管道(pipe)

无名管道(pipe)用来具有亲缘关系的进程之间进行单向通信。半双工的通信方式,数据只能单向流动。 管道以字节流的方式通信,数据格式由用户自行定义。 无名管道多用于父子进程间通信,也可用于其他亲缘关系进程间通信。 因为父进程调用fork函…

Git 2.45.2源码安装

环境 Centos 7 安装环境依赖 $ yum install curl-devel gcc-c zlib zlib-devel perl-ExtUtils-MakeMaker package下载git $ wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.45.2.tar.gz $ tar -xzvf git-2.45.2.tar.gz安装git $ cd git-2.45.2 ./…

Docker修改国内镜像源

如果docker已将安装好 参考:https://github.com/cmliu/CF-Workers-docker.io sudo mkdir -p /etc/dockercd /etc/dockersudo vim daemon.json #输入以下内容 { "registry-mirrors": ["https://docker.fxxk.dedyn.io"] } #重启docker服务 su…

开发个人Ollama-Chat--10 绑定域名

开发个人Ollama-Chat–10 绑定域名 域名购买最好找正规的渠道购买,不要因贪图小便宜而多走很多的弯路。我就是第一次购买域名,到了一个坑壁的平台"西部数码",SSL证书申请了2个月,没下来,客服也贼不专业&…

猫头虎:什么是内耗?

猫头虎 🐯 建联猫头虎,商务合作,产品评测,产品推广,个人自媒体创作,超级个体,涨粉秘籍,一起探索编程世界的无限可能! 摘要 内耗是指在工作或学习过程中,个…

视频转文字、语音转文字助手 — 免费、支持多种语言

在快节奏的数字时代,时间就是金钱,效率就是生命。当您的双手被束缚在键盘上,当您需要快速整理会议记录,或是将那些宝贵的音频和视频资料转化为可编辑的文字,「想转就转语音转文字助手」就是您的得力助手! …

突破与创新:Vue.js 创始人 尤雨溪 2024 年度技术前瞻

本文将深入探讨以下主题的 尤雨溪 见解:Vite 5对Vue的影响、宏、vapor模式、常见误解、新特性或功能、未来版本对Option API的支持、VitePress等。 . 2.尤大的问答环节 2.1. Vite 5如何提升Vue的性能? Vite在提高性能方面的工作通常是针对Vite本身的。然…

leetcode日记(37)旋转图像

方法是看评论区想出来的&#xff1a;先将矩阵转置&#xff0c;再将每一行逆转 class Solution { public: int n,m,l,k; struct bian{int u;int v;int d; }; void digui(int loc,int c[],vector<bian> bi,int now,int q,bool colour[],int& maxx,bool jg[]){if(q>…

PyMysql error : Packet Sequence Number Wrong - got 1 expected 0

文章目录 错误一错误原因解决方案 错误二原因解决方案 我自己知道的&#xff0c;这类问题有两类原因&#xff0c;两种解决方案。 错误一 错误原因 pymysql的主进程启动的connect无法给子进程中使用&#xff0c;所以读取大批量数据时最后容易出现了此类问题。 解决方案 换成…

网络协议 — Keepalived 高可用方案

目录 文章目录 目录Keepalived 是实现了 VRRP 协议的软件Keepalived 的软件架构VRRP StackCheckersKeepalived 的配置Global configurationvrrp_scriptVRRP Configurationvrrp synchroization groupvrrp instancevirtual ip addressesvirtual routesLVS Configurationvirtual_s…

偶数位的数c++

题目描述 给你两个整数 l,r&#xff0c;求 l∼r 范围内有多少个位数为偶数的数。 输入 一行两个整数 l,r。 输出 输出位数为偶数的数的数量。 样例输入 5 15样例输出 6 提示 样例解释 10,11,12,13,14,15 位数为偶数&#xff0c;都是两位数。 数据规模与约定 对于 1…

数据结构之线性表表示集合详解与示例(C,C#,C++)

文章目录 基本特征线性表的特点&#xff1a;线性表的表示方法&#xff1a;C、C#和C语言如何实现一个线性表表示集合1. C实现2. C#实现3. C实现 总结 线性表是计算机数据结构中的一个基本概念&#xff0c;它是一种最简单的抽象数据类型。在线性表中&#xff0c;数据元素之间的关…

Qt进阶版五子棋

五子棋是一种两人对弈的棋类游戏&#xff0c;目标是在横、竖、斜任意方向上连成五个子。在Qt中实现五子棋程序&#xff0c;你需要设计棋盘界面、处理下棋逻辑、判断胜负等。以下是实现一个基本五子棋程序的步骤&#xff1a; 创建项目和界面 使用Qt Creator创建一个新的Qt Widge…

academic-homepage:快速搭建个人学术主页,页面内容包括个人简介、教育经历、发布过的学术列表等,同时页面布局兼容移动端。

今天给大家分享GitHub 上一个开源的 GitHub Pages 模板 academic-homepage。 可帮助你快速搭建个人学术主页&#xff0c;页面内容包括个人简介、教育经历、发布过的学术列表等最基本内容&#xff0c;同时页面布局兼容移动端。 相关链接 github.com/luost26/academic-homepage …