About Memory (翻译,整理)

来源:互联网 发布:5g网络系统架构 编辑:程序博客网 时间:2024/06/05 07:15

1. 芯片体系结构

image

 

【1】CPU之间的所有数据通信必须经过和Northbridge连接的总线(FSB)

【2】所有和RAM之间的通信必须通过Northbridge

【3】RAM只有一个端口(port)

【4】CPU和外设备之间的通信(外设经Southbridge挂载)必须通过Northbridge

结构的瓶颈:

【1】外设备访问RAM需要通过CPU——解决措施:direct memory access(DMA)允许外设通过Northbridge直接与RAM通信,无需在通过CPU。带来的问题是Northbridge的带宽

【2】Northbridge与RAM之间的通信:旧的系统只有一条总线,如今可以有两条独立的总线(bus)(DDR2)是并行称为可能。  在带宽有限的情况下,怎样安排存储访问时序是提高性能的关键。

 

在一些昂贵的系统中,Northbridge并没有包含存储控制单元,存储控制单元独立的与Northbridge相连,如下图:

image

 

现在的存储访问模型通过同时访问不同的内存体来减小时延。

结构的瓶颈:

该体系结构的瓶颈是Northbridge的内部带宽。

 

另一种增加内存带宽的方法是: 将存储控制整合进CPU并在每个CPU上附加内存(基于AMD的SMP系统)。

下图为整合的存储控制:

image

 

结构带来的问题:

NUMA - Non-Uniform Memory Architecture:由于机器必须使得所有的存储对每一个处理器可见,即内存不再是统一的。处理器之间的存储访问带来的额外开销我们称之为:NUMA factors。

 

2.CPU Cache

由于CPU的处理速度的增长速度比RAM性能快了很多(制造快速的RAM十分的昂贵)。

在两台机器里,一个有十分快速的RAM(但容量不大)和另一个有很大容量(但速度不是很快)中选择, 当有一个大于前者RAM容量的工作集(work set)时,后者总能得到更好的性能。

解决方案:SRAM与DRAM的结合——较小容量的SRAM与较大容量的DRAM。

SRAM的控制权不是OS或用户(管理这些资源带来的开销会远远大于SRAM处理速度带来的好处),所以SRAM是由处理器直接控制和使用。SRAM作为Cache(主存部分数据的copy)来给CPU使用。(局部性是CPU Cache概念的关键)

由于工作集往往大于缓存本身,所以如何决定缓存什么可以使性能更高是很重要的策略。由于work set中所有的数据并不是在同一时间内被CPU使用,所以我们可以使用一些临时替代缓存中数据的策略——预取(prefetching)。

总览:

image            ------------>>                      image

 

现在的系统一般都采用多级缓存,并且L1缓存分为L1d与L1i , 即L1 data 与 L1 instruction。

现代的多处理器CPU体系:

image

高速缓存的结构:

高速缓存的构造有三种形式, 分别为直接映射高速缓存、组联高速缓存、全联高速缓存。

直接映射:                                                             2路组联:                                                        全联:

image          image            image

 

全联高速缓存只有一个Cache set ;这类的高速缓存适用于做小的高速缓存(如TLB)。

地址解析:

那么一个地址(VA 或是 PA)应该如何被映射到Cache的结构中呢?下面是地址在Cache中的结构:

image

 

当Cache得到一个32位地址时,首先从地址抽取出Cache set 字段然后进行组索引,若索引到某一组,再在改组内的每一行(Cache line)进行Tag匹配;若匹配上,则根据Offset字段在高速缓存的缓存块里得到数据。

全联高速缓存,则不必进行组索引(因为它只有一个组),所以其解析地址时就没有Cache set 字段。

NOTE: 当处理器需要一个数据内容(假设是一个字节)时, 整个Cache line 的内容都会被缓存进L1(而不是单单的那个字节)。

写操作:

dirty cache:一条被CPU 修改过的Cache line 但是还没有和主存交互(即主存还保存的是未被修改的内容)。

两种写策略:

【1】 直写(write through):很容易理解,即每次CPU修改 Cache内容时,Cache 都立即与主存交互(即任意时刻主存与Cache都是同步的)。明显的缺点是浪费资源。

【2】 回写 ( write back ):当Cache 内容变化后, 处理器并不立即修改主存,而仅仅是将该Cache line 标记为dirty。当该Cache line 要从Cache中丢弃时(Cache 不命中引发的替换或其他情况),dirty 标记将通知处理器根据该Cache line 的内容修改主存。

回写策略带来的问题: 很显然回写策略相比于直写有更好的性能,但同时, 在多处理器体系结构中,同步将会成为一个问题:若一个字节的数据所有的Cache line 已经被P1(处理器1) 标记成了dirty,而刚好P2 要读取该字节,则该读操作不能简单的从主存中获取该字节内容。

NOTE: 参考多处理器CPU体系结构(上图),不同处理器之间,尽管high level的缓存也是不共享缓存的。

 

write combining:允许总线上的数据临时的存储在WCB(write combine buffer)中,合并成一个数据块后传输。

多处理器支持:

上面已经提出了问题所在, 若是仅仅在不同处理器之间的缓存提供直接访问是不现实的(NOT fast enough)。

解决方法:当一个处理器需要一个被标记为dirty的数据时,就将该数据传输到另一个处理器。那么,处理器怎么知道该内容在另一个处理器中被标记成了dirty? 由于处理器对Cache 的处理大部分是读操作, 这就使当写操作发生后进行广播的策略变得可行。 MESI (Modified, Exclusive, Shared, Invalid) protocol。

 

 

3.VM

虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件、和内核软件的完美交互。它为每个进程提供一个大的、一致的、私有的地址空间。

一个简单的虚拟寻址系统如下:

image

 

VM系统将虚拟存储器分割为虚拟页(VP)的大小固定的块来处理。同样的物理存储器也被分割为同样固定大小的块(PP)。

 

地址解析:在32位系统中,  32位的地址被分为几个字段(由于有多级页表),一个是页表目录,另一个是Offset。页表目录指向一个存储在主存内的记录(page table),真实的物理地址就由该记录值和Offset组成。

image

 

多级页表:在现代机器中大部分使用的是4级页表。  使用多级页表的原因与在Cache设计中存在直接映射、组联、全联高速缓存的道理类似,即为了协调在某一级页表中索引的时间。

image

 

TLB:

由于那些页表记录都存储于主存中,所以Cache中可以直接缓存页表记录,当命中时,物理地址就是该记录与Offset的组合。可是尽管使用L1 Cache处理的速度仍不够快。于是就有了TLB。TLB本身就是个基层在CPU芯片上的高速缓存。既然TLB是高速缓存,那么其地址也和其他Cache一样的解析。

NOTE:TLB是高相联(associativity)性的高速缓存,在早期时是全联高速缓存。

 

 

4.NUMA

原创粉丝点击