计算机内存基础硬核知识
我们都知道,计算机是处理数据的设备,而数据的主要存储位置就是磁盘和内存,并且对于程序员来讲,CPU 和内存是我们必须了解的两个物理结构,它是你通向高阶程序员很重要的桥梁,下面就让小编带你去看看计算机内存基础硬核知识,希望能帮助到大家!
电脑基础知识,新手入门最全电脑知识干货
一、电脑软硬件基础知识
1、CPU型号怎么看?
CPU是一台电脑的核心,而目前笔记本市场基本被Intel(英特尔)的CPU垄断。而Intel的CPU型号命名还算比较有规律。
以i7-6920HQ为例:
四位数的头一个数字是6指的是代际,也就是是英特尔第六代处理器。目前英特尔在市面上是4、5、6三代处理器并存。老于4代的处理器现在比较少见,一般也不推荐。
920是它的SKU值,可以理解为是一个编号。用来区分不同性能的CPU型号。
数字后面紧跟着的字母是H,代表的是处理器的功耗/性能类别。类似的有U(超低功耗15W)、M(仅出现在5代以前)、H(高性能35W/45W)。需要注意的是:功耗大不仅意味着更大的耗电量,也表示CPU的发热量越大。进而对笔记本的散热系统有更高的要求。所以主打高性能的笔记本(比如游戏本),几乎没有轻薄、长续航的。
最后一个产品线后缀,有Q(四核处理器)、K(开放超频)两种情况。而双核、不可超频的处理器没有这个后缀,也是最常见的。
什么?看完了还是不懂怎么选?简单来说,如果你在乎功耗(省电)的话,代际越新越省电。比如6代比4代更省电。而在同一代中,U比H省电,而H又比HQ/HK省电。
2、关于电脑性能
如果你想了解性能的话,这就有些麻烦了。
诸如i7>i5>i3这样的说法,基本不靠谱。因为这种说法仅仅在同一代处理器,同一功耗级别下才成立。如果跨代、跨系列地比较,就会出现诸如i5-6300HQ性能强于i7-6600U、i3-6100H和i7-4610Y性能差不多,这样不太好理解的情况。所以光看型号判断性能真的是不太靠谱。为了方便起见,我推荐一个方便(但并非完全严谨)的方法给大家:查Passmark评分
关于DDR4内存条选购的小知识
刻意追求内存频率意义不大,因为决定内存性能的重要指标还有内存时序(时序本身也可以体现出内存颗粒的品质如何)。市面上很多DDR4-2666内存的报价甚至还低于当前DDR4-2400,原因就是这些所谓的DDR4-2666内存的时序普遍很难看(偏高/一般都是CL19),众所周知,时序越高性能越差。目前主流内存频率为2400MHz~3200MHz,实际上2133也一样能用,而且最便宜。
再有就是目前英特尔平台只有Z系列、__系列芯片组可以使用超过2666/2933频率的内存,其他芯片组如B360/B365/B460无法突破这一限制,上高频内存会降频运行,具体限制情况请参照表格说明。用B360主板搭配3000MHz甚至3200MHz以上的高频内存意义不大,最终还是降频到2400/2666运行。B460主板搭配i7/i9处理器时,可以考虑3000频率的内存。
AMD芯片组虽然基本都不会限制运行频率,都可以超频支持高频内存,但是AMD处理器本身不争气,内存兼容性问题比较普遍,搭配高频内存极易翻车。AMD的三代锐龙对高频内存支持的友好性大幅提升,这样一来或许会带动3000~3600MHz区间高频内存的销量大幅上涨。一代、二代锐龙(包括APU)建议搭配3000MHz以下的内存。
从表格可以看出英特尔平台主板除了Z系列的都是不支持超频的,但是也要注意虽然主板支持最高频率可能是2666、2933,但是也要看具体CPU支持的频率。
AMD平台理论上是没有具体限制的,但是要看主板的内存供电和CPU对内存频率的兼容;一代锐龙普遍兼容性比较差,一般上2666就可以了,供电比较好的主板可以上2933;二代锐龙兼容性有提升,一般上2933就可以了,供电比较好的主板可以上3200-3433,三代锐龙兼容性大大提升,市面上的正规内存都是基本可以是用的,因为三代锐龙内存频率影响cpu性能一般建议上3600频率的就可以了,因为除了__399/TR__40平台的其他三代锐龙内存控制器它最高支持3600频率,运气好的能达到3800,在往上面的频率性能只会倒退。
从上面表格可以看出英特尔九代CPU及之前到6代买2666频率的内存条就可以了,这里为什么没有说i3之前的只支持到2400,因为现在市面上的内存条基本2400和2666价格差不多,很多都是同价格,所以上2666的就可以了,以后升级CPU了还能小小提升一下性能还不用换内存条;
十代英特尔就比较坑了,i5之前都最高只支持到2666频率的,所以装机的如果不考虑以后升级cpu的就可以直接买2666的就可以了,如果考虑以后升级的可以直接买3000频率的内存条,i7、i9可以直接运行在2933频率上。
内存容量
① 品牌方面,你自己信赖啥就选啥,不用考虑很多,内存很难坏,品牌内存均为终身质保,一小部分牌子才会保修3~5年;
② 部分主板与部分内存可能会有兼容性问题,遇到这类情况建议通过升级BIOS来进行解决,或尝试更换合适的内存。
★ 4GB(2010~2014年流行):当前来看只能满足基本的上网、看视频、聊天、入门游戏及轻度办公需求;(都2020年了就不太推荐了)
★ 8GB(当前主流):当前可以满足入门设计、多任务办公、大型单机普通爱好者;
★ 16GB(当前~未来5年主流):当前可以满足主流设计、渲染、大型单机爱好者;(只要是玩稍微大型一点的游戏都建议上16G内存,8G__2形成双通道,17年吃鸡游戏大火,这游戏就很吃内存)
★ 32GB或更高(2025~2030年):当前主要是高预算或特殊高需求群体会安装如此多的的内存。(一小部分游戏也吃高内存比如:逃离塔科夫,当然最近3000系显卡出了,高端用户4K144hz运行的话也建议上32G内存,当然一般买这配置的了一般都会上也不需要小编说(贫穷的小编))
常见问题
【Q】如何组双通道内存?组双通道内存有什么要求?
【A】组双通道内存只需接口相同,能同时被系统点亮识别即可,不用在意容量或者频率。两根不同频率的内存条是可以一起使用的,使用的过程中,高频率的内存条会自动降频到低频的内存条的频率来使用的。参数不同的两根(或4根)内存组的双通道叫做“弹性双通道”。这里还需要注意,一般只有2根内存插槽的主板组双通道时,只要插满自然就是双通道了,如果是4根插槽的板子,插两根时,必须插1、3位置或者2、4位置(也就是间隔一个空位/以靠近CPU的第一根插槽位为1)才可以组成双通道,但一定是优先插2、4位,其次才是1、3位。
__系列主板和TR系列主板是支持4通道的所以可以按照主板说明书插对应内存条以达到最大性能,避免性能浪费,比如你想买16G的内存条就买8__2的形成双通道,如果是四通道的话买4__4的,不过一般都是最低上32G的所以是8__4。
你不知道的内存知识
一、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
计算机内存基础硬核知识相关文章:
★ 电脑硬件硬核知识
★ 内存硬核选购知识