内存基础知识干货
内存相信大家都听说过,电脑速度慢了也许身边的高手会建议我们升级更大容量的内存。那么电脑内存究竟是干什么用的呢?下面就让小编带你去看看内存基础知识大全,希望能帮助到大家!
你不知道的内存知识
一、CPU与内存
先铺垫几个概念,以免后面混乱:
Socket或Processor: 指一个物理CPU芯片,盒装还是散装的。上面有很多针脚,直接安装在主板上。
Core : 指在Processor里封装一个CPU核心,每个Core都是完全独立的计算单元,我们平时说的4核心CPU,指的就是Processor里面封装了4个Core。
HT超线程: 目前Intel与AMD的Processor大多支持在一个Core里并行执行两个线程,此时从操作系统看就相当于两个逻辑CPU(Logical Processor)。大多数情况下,我们程序里提到的CPU概念就是指的这个Logical Processor。
咱们先来看几个问题:
1、CPU可以直接操作内存吗?
可能一大部分老铁肯定会说:肯定的啊,不能操作内存怎么读取数据呢。
其实如果我们用这聪明的大脑想一想,咱们的台式主机大家肯定都玩过。上面CPU和内存条是两个完全独立的硬件啊,而且CPU也没有任何直接插槽用于挂载内存条的。
也就是说,CPU和内存条是物理隔离的,CPU并不能直接的访问内存条,而是需要借助主板上的其他硬件间接的来实现访问。
2、CPU的运算速度和内存条的访问速度差距有多大?
呵呵呵,这么说吧,就是一个鸿沟啊,CPU的运算速度与内存访问速度之间的差距是100倍。
而由于CPU与内存之间的速度差存在N个数量级的巨大鸿沟,于是CPU最亲密的小伙伴Cache 闪亮登场了。与DRAM 家族的内存(Memory)不同,Cache来自SRAM家族。
而DRAM与SRAM的最简单区别就是后者特别快,容量特别小,电路结构非常复杂,造价特别高。
而Cache与主内存之间的巨大性能差距主要还是工作原理与结构不同:
DRAM存储一位数据只需要一个电容加一个晶体管,SRAM则需要6个晶体管。
由于DRAM的数据其实是被保存在电容里的,所以每次读写过程中的充放电环节也导致了DRAM读写数据有一个延时的问题,这个延时通常为十几到几十ns。
内存可以被看作一个二维数组,每个存储单元都有其行地址和列地址。
由于SRAM的容量很小,所以存储单元的地址(行与列)比较短,可以被一次性传输到SRAM中。DRAM则需要分别传送行与列的地址。
SRAM的频率基本与CPU的频率保持一致,而DRAM的频率直到DDR4以后才开始接近CPU的频率。
3、Cache 是怎么使用的?
其实Cache 是被集成到CPU内部的一个存储单元(平时也被我们称为高速缓存),由于其造价昂贵,并且存储容量远远不能满足CPU大量、高速存取的需求。
所以出于对成本的控制,在现实中往往采用金字塔形的多级Cache体系来实现最佳缓存效果。
于是出现了,一级Cache(L1 Cache)、二级Cache(L2 Cache)及三级Cache(L3 Cache)。每一级都牺牲了部分性能指标来换取更大的容量,目的也是存储更多的热点数据。
以Intel家族Intel SandyBridge架构的CPU为例:
L1 Cache容量为64KB,访问速度为1ns左右
L2Cache容量扩大4倍,达到256KB,访问速度则降低到3ns左右
L3 Cache的容量则扩大512倍,达到32MB,访问速度也下降到12ns左右(也比访问主存的105ns(40ns+65ns)快一个数量级)
L3 Cache是被一个Socket上的所有CPU Core共享的,其实最早的L3 Cache被应用在AMD发布的K6-III处理器上,当时的L3 Cache受限于制造工艺,并没有被集成到CPU内部,而是被集成在主板上,如图:
从上图我们也能看出来,CPU如果要访问内存中的数据,则需要经过L1、L2、L3三道关卡,就是这三个Cache中都没有需要的数据,才会从主内存中直接进行读取。
最后我们来看下Intel Sandy Bridge CPU的架构图:
二、多核CPU与内存共享的问题
问题: Cache一致性问题
多核CPU共享内存的问题也被称为Cache一致性问题。
其实就是多个CPU核心看到的Cache数据应该是一致的,在某个数据被某个CPU写入自己的Cache(L1 Cache)以后,其他CPU都应该能看到相同的Cache数据。
如果在自己的Cache中有旧数据,则抛弃旧数据。
考虑到每个CPU都有自己内部独占的Cache,所以这个问题与分布式Cache保持同步的问题是同一类问题
目前业界公认的解决一致性问题的最佳方案就是Intel 的MESI协议了,大多数SMP架构都采用了这一方案。
解决方案:MESI
不知道大家还记得Cache Line 吗,就是我们常说的高速缓存中缓存条目里面的那个缓存行。
其实仔细想想,在进行I/O操作从来不以字节为单位,而是以块为单位,有两个原因:
I/O 操作比较慢,所以读一个字节与读连续N个字节的花费时间基本相同
数据访问一般都具有空间连续的特征
所以CPU针对Memory的读写也采用了类似于I/O块的方式
实际上,CPU Cache(高速缓存)里最小的存储单元就是Cache line(缓存行),Intel CPU 的一个Cache Line存储64个字节。
每一级Cache都被划分为很多组Cache Line,典型的情况就是4条Cache Line为一组。
当Cache从Memory中加载数据时,一次加载一条Cache Line的数据
如图我们可以看到,每个Cache Line 头部都有两个Bit来标识自身状态,总共四种:
M(Modified):修改状态,在其他CPU上没有数据的副本,并且在本CPU上被修改过,与存储器中的数据不一致,最终必然会引发系统总线的写指令,将Cache Line中的数据写回Memory中。
E(E__clusive):独占状态,表示当前Cache Line中的数据与Memory中的数据一致,此外,在其他CPU上没有数据的副本。
S(Shared):共享状态,表示Cache Line中的数据与Memory中的数据一致,而且当前CPU至少在其他某个CPU中有副本。
I(Invalid):无效状态,在当前Cache Line中没有有效数据或者该Cache Line数据已经失效,不能再用;当Cache要加载新数据时,优先选择此状态的Cache Line,此外,Cache Line的初始状态也是I状态
在对Cache(高速缓存)的读写操作引发了Cache Line(缓存行)的状态变化,因而可以将其理解为一种状态机模型。
但MESI的复杂和独特之处在于状态有两种视角:
一种是当前读写操作(Local Read/Write)所在CPU看到的自身的Cache Line状态及其他CPU上对应的Cache Line状态
另一种是一个CPU上的Cache Line状态的变迁会导致其他CPU上对应的Cache Line状态变迁。
如下所示为MESI协议的状态图:
具体MESI的实现过程可以看我另一篇文章: 看懂这篇,才能说了解并发底层技术
深入理解不一致性内存
MESI协议解决了多核CPU下的Cache一致性问题,因而成为SMP架构的唯一选择,而SMP架构近几年迅速在PC领域(__86)发展。
SMP架构是一种平行的架构,所有CPU Core都被连接到一个内存总线上,它们平等访问内存,同时整个内存是统一结构、统一寻址的。
如下所示给出了SMP架构的示意图:
随着CPU核心数量的不断增加,SMP架构也暴露出天生的短板,其根本瓶颈是共享内存总线的带宽无法满足CPU数量的增加,同时,在一条“马路”上通行的“车”多了,难免会陷入“拥堵模式”。
不知道你是否听说过总线风暴,可以看下:总线风暴
在这种情况下,分布式解决方案应运而生,系统的内存与CPU进行分割并捆绑在一起,形成多个独立的子系统,这些子系统之间高速互联,这就是NUMA(None Uniform Memory Architecture)架构,如下图所示。
可以看出,NUMA架构中的内存被分割为独立的几块,被不同CPU私有化了。
因此在CPU访问自家内存的时候会非常快,在访问其他CPU控制的内存数据时,则需要通过内部互联通道访问。
NUMA架构的优点就是其伸缩性,就算扩展到几百个CPU也不会导致性严重的下降。
NUMA技术的特点
在NUMA架构中引入了一个重要的新名词——Node
一个Node由一个或者多个Socket Socket组成,即物理上的一个或多个CPU芯片组成一个逻辑上的Node
我们来看一个Dell PowerEdge系列服务器的NUMA的架构图:
从上图可以看出其特点:
4个处理器形成4个独立的NUMA Node由于每个Node都为8 Core,支持双线程
每个Node里的Logic CPU数量都为16个,占每个Node分配系统总内存的1/4
每个Node之间都通过Intel QPI(QuickPath Interconnect)技术形成了点到点的全互联处理器系统
NUMA这种基于点到点的全互联处理器系统与传统的基于共享总线的处理器系统的SMP还是有巨大差异的。
在这种情况下无法通过嗅探总线的方式来实现Cache一致性,因此为了实现NUMA架构下的Cache一致性,Intel引入了MESI协议的一个扩展协议——MESIF
针对NUMA的支持
NUMA架构打破了传统的“全局内存”概念,目前还没有任意一种编程语言从内存模型上支持它,当前也很难开发适应NUMA的软件。
Java在支持NUMA的系统里,可以开启基于NUMA的内存分配方案,使得当前线程所需的内存从对应的Node上分配,从而大大加快对象的创建过程
在大数据领域,NUMA系统正发挥着越来越强大的作用,SAP的高端大数据系统HANA被SGI在其UV NUMA Systems上实现了良好的水平扩展
在云计算与虚拟化方面,OpenStack与VMware已经支持基于NUMA技术的虚机分配能力,使得不同的虚机运行在不同的Core上,同时虚机的内存不会跨越多个NUMA Node
内存知识扫盲
带你先认识一下内存
内存,也叫内存储器,是一种快速存储设备,在计算机角色扮演里占据着核心的位置。现在的内存条是一块长方形薄片状的电路板,上面焊接有很多黑色“方块”的存储芯片,让人在主板上可以一眼发现它。
▲内存条下方都会带有一个缺口用于辨别安装方向,防止用户误安装
▲内存条局部细节
可在很久以前,内存是作为一块IC电子元件焊接在主板上的,这种“焊接”技术会给后期的维护、维修带去极大的问题和麻烦。因此,机智的人类发明了更为人性化的“插拔式”内存条,然后再在主板上设计一个安装插槽,一切就妥妥得了。
▲笔记本内存插槽
▲台式机内存插槽(红色和黄色的长条形区域)
内存有哪几种?
如果不算离我们生活比较远的服务器内存,内存有两种规格:笔记本内存和台式内存。从本质功能来讲,两者大同小异,只是外观尺寸的差异。
▲上方为笔记本内存,下方为台式机内存
▲已经安装有内存的台式机主板
内存条的发展
内存条从最早发展到现在,大致经历了了SIMM、EDO DRAM、SDRAM、DDR这几个阶段的技术革新。其中最为大家熟悉的DDR作为一种在性能与成本之间折中的解决方案,从出生就占据着市场,并在频率上一直“高歌猛进”,由此DDR2、DDR3、DDR4、DDR5应势而生...
DDR2相比于第一代DDR,优势在于频率和功耗有一定的提升,在实际的应用方面,因为DDR2自身的不足,所以在历史的舞台上它也只是一个“过客”。
它的下一代产品DDR3横空出世,又再次成为了人们关注的对象。DDR3集成了高密度的闪存颗粒,这对于降低高容量内存成本及减少生产支出都是有极大帮助的,可谓是推广大容量内存的源动力。目前该内存仍然是市场消费的主力。
相比而言,DDR4是最新的内存型号,由于处于普及初期因此市场占有率不高,但是它确实是新配机用户的首选。它和DDR3基本的技术相差不大,但DDR4的重心是在提高频率和带宽上,因此未来的市场应该是属于DDR4的。
内存规格不断升级,运行频率越来越高,如DDR3 1600、DDR3 2400最后的1600和2400数字就代表了内存的运行频率是1600MHz或2400MHz,频率越高,内存单位时间内可以处理的数据越多,因此执行效率更高,电脑整体速度更快。如果你是一个发烧友,DDR4是你不二的选择。当然也需要相应的主板来匹配,因为每一代内存在接口或电压规格上会有所不同,不同代的内存之间不能通用。
内存条为什么会影响电脑性能
其实很简单!我们运行一款软件后,CPU或显卡要对数据进行处理,而且这个数据传输的过程是动态的,也就是说CPU要不断地从硬盘读或写数据。如我们编辑文档时的存储或翻页等操作,但是硬盘的速度非常慢,而CPU的处理速度极为快,硬盘非常慢的读写速度无法满足CPU极快的处理速度,因此经常会出现CPU等待硬盘数据传输过来的情况,严重影响电脑性能的发挥甚至说是完全无法使用。这时候就需要“中转站”来存放临时数据,CPU提前将要处理器的数据存放到内存中,需要使用时直接从里面寻找,这样就可以达到高效执行的目的。
▲鼠标右键打开我的电脑即可看到系统已经安装的内存容量(黄色字样)
因此内存越大,CPU可以提前缓存的文件或数据更多,电脑运行的速度越快,这也是为什么内存容量小的电脑,经常会出现硬盘灯常亮、电脑卡顿的现象,原因就在于内存容量不够用,CPU将硬盘当作数据“缓存空间”,这就导致速度跟不上趟的硬盘拖累了整台电脑。还有一点值得注意的是存储在内存里的数据都是暂时的,关机或者断电后就会消失。
从市场反馈的结果来看,价格在200元左右的8GB、DDR3 1600MHz的台式机内存是消费的“香饽饽”。笔者看来,这个标准是完全可以满足大部分消费者日常使用中各种临时数据存储和传递的需求了。当然,现在内存价格便宜了,配备16GB也不是什么奢侈的事情了。
内存条常识
1、内存条介绍
内存条是一种比固态硬盘更先进的存储技术,它的读写速度比硬盘快上十倍有余,以现在主流的DDR4代内存条为例,它的读写速度可以轻松达到7000MB/s以上,而传统的机械硬盘最高也就不超过300MB/s,即使是最厉害的固态硬盘,也就3000MB/s的样子。想比内存也是慢了许多。
由于CPU处理数据的速度是超级快的,而硬盘的读写速度又很慢,他们在进行数据交换的时候就产生了一个速度上的矛盾,这个时候读写速度超快的内存条就可以帮上大忙了。当我们开机或打开软件的时候,硬盘就会把这些软件需要用到的数据传输到内存条里保存起来。(这就是开机速度和打开软件或打开游戏的速度,传统的机械硬盘传输这个数据到内存条的速度很慢,所以开机和打开软件的速度很慢)。
当软件打开后,数据就是存在内存条中了,这个时候读写速度超快的内存条就可以与CPU以超高的速度进行数据传输了,这就是为什么你打开软件和游戏需要等很久,但是在软件使用和游戏中却并没有那么明显的卡顿的原因了。当我们关闭软件或者清理后台进程时,内存条里的数据就会被删除掉。所以内存中的数据是不能长时间存储的。
注意:笔记本内存和台式机内存是不一样的
2、内存条的容量
内存条的容量自然就是能存储的数据多少了,我们每打开一个软件,这些软件的数据都会被保存到内存中,如果内存条被塞满,我们继续打开其他软件的时候,CPU就只能从硬盘调取数据了(速度慢),这样电脑的速度就会很慢并且伴有卡顿现象。
常见的内存条容量有 2G、4G、8G、16G
3、内存条的颗粒
颗粒就是内存条的存储数据的东西,现在主流的颗粒生产商就是;三星、海力士、镁光这三家。由于颗粒在生产时候会有质量参差不齐的情况,所以一些成色极品的颗粒会被挑选出来做成高端超频内存条,而一些成色普通但合格的颗粒会被拿去做成普通内存条。所以在购买内存条的时候要注意!
4、内存条的频率
常见的有1333MHz、1600MHz、2133MHz、2400MHz、2666MHz、3200MHz,内存条的频率,它可以看成是内存条数据的传输速度,是内存条最重要的参数。各位朋友在购买的时候一定要根据自己的情况实际选择哦,这里提醒大家一下,如果两条内存频率不一致的话,会自动向下兼容的哦。购买时最好先了解自己电脑适合的内存条频率,不然收到货不兼容就很不爽了
5、单通道与双通道
打个比方,比如说单通道就是一条双向车道,双通道就是两条双向车道(带宽增加),所以说双通道比较稳定一点。
双通道是能带来一些性能的提升的,特别是使用CPU核心显卡的用户,由于CPU要同时负责程序数据和显示数据的处理,需要的数据流量更大,所以双通道带来的双倍带宽才能满足这么大的数据流量的需求。
现在电脑内存8G已经很常见了,基本上都是双通道组的,也可以根据个人习惯来配
8G可以选择2__4G 16G可以选择2__8G 32G选择2__16G
根据个人需求选择合适容量的内存条。对于普通用户来说8GB是够用的,如果是专业作图设计或者玩吃鸡和大型单机游戏,可以选择2根8GB组双通道。如果自己也不知道自己需要多少容量的,可以先买一根8GB的使用,发现不够可以再买一根8GB组成双通道。