What every programmer should know about memory, Part 1 , RAM

原文:What every programmer should know about memory, Part 1, RAM

1 Introduction

如今的计算机架构中CPU和main memory的访问速度的差异是很大的,解决这一瓶颈有这么几种形式:

2 Commodity Hardware Today

大众架构

Figure 2.1: Structure with Northbridge and Southbridge

这个架构要注意:

可以发现瓶颈:

多内存控制器

比较贵的系统北桥自己不包含内存控制器,而是外接内存控制器:

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

Figure 2.4: 6-T Static RAM

电路图就不解释了。

2.2.1 Dynamic RAM

Figure 2.5: 1-T Dynamic RAM

电路图就不解释了。

2.1.3 DRAM Access

Figure 2.7: Dynamic RAM Schematic

访问DRAM的步骤:

  1. RAS(Row address selection)
  2. CAS(Column address selection)
  3. 传输数据

RAS和CAS都需要消耗时钟频率,如果每次都需要重新RAS-CAS则性能会低。如果一次性把一行的数据都传输,则速度很快。

2.1.4 Conclusions

2.2 DRAM Access Technical Details

略。

2.2.4 Memory Types

Figure 2.14: DDR3 SDRAM Operation

2.2.5 Conclusions

2.3 Other Main Memory Users