共计 2189 个字符,预计需要花费 6 分钟才能阅读完成。
博文:https://chanjarster.github.io…
原文:What every programmer should know about memory, Part 1, RAM
1 Introduction
如今的计算机架构中 CPU 和 main memory 的访问速度的差异是很大的,解决这一瓶颈有这么几种形式:
RAM 硬件设计的改善(速度和并行)
Memory controller 设计
CPU caches
给设备用的 Direct memory access(DMA)
2 Commodity Hardware Today
大众架构
Figure 2.1: Structure with Northbridge and Southbridge
所有 CPU 通过 FSB 连接到北桥,北桥包含内存控制器(memory controller),连接到 RAM。不同的内存类型如 SRAM、DRAM 有不同的内存控制器。
南桥又称 I / O 桥,如果要访问其他系统设备,北桥必须和南桥通信。南桥连接着各种不同的 bus
这个架构要注意:
CPU 之间的所有数据通信必须经过 FSB,而这个 FSB 也是 CPU 和北桥通信的 bus。
所有和 RAM 的通信都必须经过北桥
RAM 只有一个端口(port)
CPU 和挂接到南桥设备的通信则有北桥路由
可以发现瓶颈:
为设备去访问 RAM 的瓶颈。解决办法是 DMA,让设备直接通过北桥访问 RAM,而不需要 CPU 的介入。如今挂到任一 bus 的所有高性能设备都能利用 DMA。虽然 DMA 减少了 CPU 的工作量,但是争用了北桥的带宽
北桥到 RAM 的瓶颈。老的系统里只有一条通往所有 RAM 芯片的 bus。现在的 RAM 类型要求有两条独立的 bus,所以倍增了带宽(DDR2 里称为 channel)。北桥通过多个 channel 交替访问内存。
多内存控制器
比较贵的系统北桥自己不包含内存控制器,而是外接内存控制器:
Figure 2.2: Northbridge with External Controllers
在这种架构里有多个内存 bus,大大增加了带宽。在并发内存访问的时候,可以同时访问不同的 memory bank(我理解为就是内存条)。而这个架构的瓶颈则是北桥内部的带宽。
NUMA
除了使用多个内存控制器,还可以采用下面的架构增加内存带宽。做法就是把内存控制器内置在 CPU 里。每个 CPU 访问自己的本地 RAM。
Figure 2.3: Integrated Memory Controller
这个架构同样也有缺点:因为这种系统里的所有 CPU 还是要能够访问所有的 RAM,所以 the memory is not uniform anymore (hence the name NUMA – Non-Uniform Memory Architecture – for such an architecture)。访问本地内存速度是正常的,访问别的 CPU 的内存就不一样了,CPU 之间必须 interconnect 才行。在上图中 CPU1 访问 CPU4 的时候就要用到两条 interconnect。
2.1 RAM Types
2.1.1 Static RAM
访问 SRAM 没有延迟,但 SRAM 贵,容量小。
Figure 2.4: 6-T Static RAM
电路图就不解释了。
2.2.1 Dynamic RAM
Figure 2.5: 1-T Dynamic RAM
电路图就不解释了。
DRAM 物理结构:若干 RAM chip,RAM chip 下有若干 RAM cell,每个 RAM cell 的状态代表 1 bit。
访问 DRAM 有延迟(等待电容充放电),但 DRAM 便宜,容量大。商业机器普遍使用 DRAM,DDR 之类的就是 DRAM。
2.1.3 DRAM Access
Figure 2.7: Dynamic RAM Schematic
访问 DRAM 的步骤:
RAS(Row address selection)
CAS(Column address selection)
传输数据
RAS 和 CAS 都需要消耗时钟频率,如果每次都需要重新 RAS-CAS 则性能会低。如果一次性把一行的数据都传输,则速度很快。
2.1.4 Conclusions
不是所有内存都是 SRAM 是有原因的(成本原因)
memory cell 必须被单独选择才能够使用
address line 的数目直接影响到内存控制器、主板、DRAM module、DRAM chip 的成本
需要等待一段时间才能得到读、写操作的结果
2.2 DRAM Access Technical Details
略。
2.2.4 Memory Types
现代 DRAM 内置 I /O buffer 增加每次传输的数据量。
Figure 2.14: DDR3 SDRAM Operation
2.2.5 Conclusions
假如 DRAM 的时钟频率为 200MHz,I/O buffer 每次传送 4 份数据(商业宣传其 FSB 为 800MHz),你的 CPU 是 2GHz,那么两者时钟频率则是 1:10,意味着内存延迟 1 个时钟频率,那么 CPU 就要等待 10 个时钟频率。
2.3 Other Main Memory Users
网络控制器、大存储控制器,使用 DMA 访问内存。
PCI- E 卡也能通过南桥 - 北桥访问内存。
USB 也用到 FSB。
高 DMA 流量会占用 FSB,导致 CPU 访问内存的时候等待时间变长。
在 NUMA 架构中,可以 CPU 使用的内存不被 DMA 影响。在 Section 6 会详细讨论。
没有独立显存的系统(会使用内存作为显寸),这种系统对于 RAM 的访问会很频繁,造成占用 FSB 带宽,影响系统性能。