- 作者: 雪山肥鱼
- 时间:20210402 06:29
- 目的:内存部分的结束
What Every Programmer Should Know About Memory
恕我直言,网上的原版pdf,关键地方缺少标点符号,着实令人蛋疼。还是看lwn原文把
https://lwn.net/Articles/252125/
# 内存硬件的基础只是
## introduction
## 硬件架构
# RAM 简介
## SRAM简介
## DRAM简介
## DRAM内部结构简介
## DRAM相关属于
## Memory Types(SDRAM)的演进
# CPU cahce
# VMA
# NUMA
内存硬件的基础知识
我对硬件了解几乎为0,也就这两天翻查阅了一些资料。结合这篇文档,大致了解下即可。
Introduction
在上古时代的计算机四大基础组成部分的速度其实差不多。
- CPU
- Memory
- Mass Storage
- Network Interface
只不过后续人们主要研发CPU,导致其余的跟不上节奏,速度变慢或者到达了瓶颈。所谓瓶颈,要么突破的cost会很大, 要么需要调整整个的硬件结构。
已经调整了的硬件结构:
- RAM hardware design(speed and parallelism)
- Memory controller designs
- CPU cache
- DMA
硬件架构
带有北桥的架构
如图所示CPU与CPU之间,CPU与北桥之间用 FSB 总线进行通讯。北桥内嵌memeory contoral , 内存RAM的不同决定了MC的不同。DRAM,RamBus,SDRAM对接的Memory Contorl 是不同的
南桥被当作I/O桥,对接不同类型的总线,PCI-E,SATA,USB等
-
值得注意的点
- CPU之间的通讯必须经过FSB总线
- 与RAM通讯必须经过北桥
- RAM 只有单一的端口(多端口不在此处讨论)
- CPU与南桥的I/O设备通讯,必须要经过北桥
瓶颈:
- 设备对RAM的访问
- 早期不管是在南桥还是北桥的所有通讯都要经过CPU,非常涌向性能
- 引入DMA,DMA在北桥的帮助下,没有CPU的介入,直接从RAM里接受或者储存数据,但会与CPU产生对RAM使用的竞争
2.北桥总线到RAM的瓶颈,总线本身的瓶颈?
- 最小化延迟的方式来调度内存访问。当遇到 hyper-threads, cores, processors DMA同时访问内存,等待内存访问的时间会更长。
- 除了并发访问,还有更多的访问内存的取到。访问模式本身也会影响内存模块的性能,特别是multiple memory channles,例如后续会讨论到的有关RAM的访问方式
后续言演进出不包含MC的北桥架构:
- 优点
- 多条内存总线,增加带宽
- 对并发访问内存更加友好(by simultaneousely accessing different memory banks)
- 主要的性能限制归咎与北桥内部的带宽
只有南桥的架构
将MC模块整合到CPU中,直接对接RAM
- SMP system based on AMD'Operation
- CSI(Common System Interface) Nehalem processors. Intel
对于这样的架构来说, 可用的memory banks数量和处理器一样多。在一个4-CPU的电脑中,内存带宽是原来的4倍,并且并不需要庞杂的北桥辅助的情况下。
缺点:
- 内存非统一 NUMA, Non-Uniform Memory Architechture。一块CPU 一块内存。
- 这里的local memory(memory attached to a processor)
- 跨CPU的内存访问,比较特殊。
- 跨cpu 的remote memory access, 会存在一个 numa factors. cpus 会组成node,也会涉及node之间的内存访问,这时的 numa factors 是很大的,对性能影响很严重。
RAM 简介
在一台机器中为说明会有两种RAM?
如果全部配成DRAM,慢。
如果全部配成SDRAM,成本太高,而且体积会很大。
SRAM
Static RAM:
SRAM的一个cell 由6个晶体管组成,只要vdd长期供电,则会一直在BL BL非读取到值.
关于SRAM知道以下几点即可
- 一个cell 有 6个 晶体管,1-4 存储 5-6 输出
- 只要给vdd持续供电,就会一直保存cell的值
- 只要WL给一个上拉电压,就可以一直读出状态
- 不需要向DRAM定时refresh电容充电,保存值。
缺点很明显,贵,大,性价比低。
DRAM 简介
DRAM的结构比SRAM结构简单很多,元器件也非常精简。电容有电荷时代表bit 1,无电荷代表bit 0
缺点:
- 电容漏电,每次从电容读数据都会造成电荷流失,读数据其实伴随着一次写操作
- 泄漏造成要定时refresh memory.
- 从cell读出的数据不能用,需要通过 sense amplifer 放大电压 bits line之间的打压差后,存储到 row buffer 才能使用.
- 电荷的流失和充电不是即时的。被sense amplifer 探测到的电流不能用。说实话我也不知道为啥。总之一句话。DRAM之所以慢,要等到电容充分放电或者充电后,才能访问。
相对于SRAM 的有点就是小,便宜。
DRAM内部结构简介
结构
对应之前叙述的DRAM的结构,注意其中的word line、bit line、sense amplifer
宏观上sense amplifers 又对接了 另一组DRAM 矩阵。
读流程
当从word line中取出数据后,word line 的电荷全部清空
根据 row buffer 中的数据(猜的), 重新给bit line 上电,形成row refresh
工作流程:1-3 就是所谓的 row activate 行激活
1、对所有的bit line 进行 pre-charge.
2、根据 RAS 对所需word line 进行 pre-charge.
3、利用Sense Amplifiers 侦测的电压差,读取一行 word line 的数据,相当于存储到raw buffer
4、根据 CAS 读取对应列的数据
5、重新row refresh,恢复数据
6、word line release
7、colume address Strobe diasable
由上述流程图也能看出,DRAM确实很慢呀
写流程
工作流程(与读相似)
1、所有bit line pre-charge
2、根据 RAS 对所需word line 进行 pre-charge.
3、数据存储到raw buffer
4、we使能
5、修改 row buffer 数据
6、row refresh
DRAM相关术语
参考资料 https://zhuanlan.zhihu.com/p/33444359
- dram array
多个DRAM存储单元的矩阵 叫做dram array
raw buffer
存储从 DRAM cell 扒下来数据的地方-
bank地址
https://blog.csdn.net/qq_39759656/article/details/81672895
结构.png
bank 可以理解为多个DRAM Arrays 组成,黑框的就是一个IC。正反两面16个IC。 单面成为一个Rank。
发送行地址的时候,同时还要发送两个比特的bank地址,用于区分是访问哪个bank.这样每个bank 有自己的row buffer, 就有了n个row buffer,使CPU大概率每个线程访问时不同的bank。减少行激活,提高速度。
总结:
以DDR3 DIMM 为例子:
2个 rank,16个IC, 每个IC 有8个bank,每个bank 有一组 dram arrays. 一个 dram arrays 有 mxn 个 dram cell. 一个cell 就是一个1T1C (one transistor and 1 capcitory)结构,一个三极管+1个电容
Memory Types(SDRAM) 的演进
-
SDR(single data rate)
SDR Operation.png -
DDR1
DDR1.png
上下沿都在传输数据
-
DDR2
DDR2.png
总线的频率时原来的2倍,意味着贷款是原来的2倍
-
DDR3
DDR3.png
总之理解为越来越快,传送的数据越来越多就完事儿了。唯一注意的是文章后续要讨论的NUMA 架构的引入。
CPU Cache
上班划水读了一天,没读明白。大部分都是实验数据。学到 多线程多进程并不会是性能提升,反而会争夺FSB总线,导致性能下降。才疏学浅,只能理解到这里了。再沉淀一段时间,回头再来看这一章节吧。了解程度 到 cache line 那一章节的文章,暂且就够了,能力不够,先刹车吧。
Virtual Memory
和之前的文章差不多,掠过
NUMA
https://www.youtube.com/watch?v=Vmb8xGD-LV8
https://www.youtube.com/watch?v=4JleOfUeDvg
简单的理解就是一块CPU(当然也可以多个CPU)享受一片内存
但是每块CPU仍然可以访问全部内存,但是访问速度就不同了,访问属于自己的那一块内存,肯定是最快的。访问其他的就变慢了。这就是为什么叫做 non-uniform!
not same the speed it can access all memory.
numa node 是多个CPU
更夸张:
兄弟们 后续章节实在看不懂了,更到这里把。刹车了。
其实第6章写的很全面。奈何技术有限,再沉淀写日子,回头继续读把。