1.简介
早期的计算机较现在更简单。计算机系统的组件例如CPU,内存,硬盘,网络接口同时发展起来,结果就是他们在性能上很平衡。例如在数据传输速度上,内存网卡cpu相差不多。
但是,当计算机系统的整个结构确定后,每个子部件的发展速度就各不相同了。例如 CPU发展非常快,但是内存和硬盘由于很多原因发展很慢。于是,内存,硬盘等成为了计算机性能发展的瓶颈。这些瓶颈,我们通过软件技术,例如OS来弥补。例如,存储系统较CPU还是非常慢,我们通过数据缓存(把硬盘中的数据缓存导RAM中)来缓解高速和低速间的不平衡。
对于数据存储和访问,有下面几个措施来改善:
- RAM硬件的设计
- 内存控制器设计
- cpu缓存区
- 外设DMA
本文档只对CPU缓冲区和内存控制器做介绍,并且仅局限于LINUX的。
2.计算机系统架构
声明:这里只对商用类型做介绍,专用的不在谈论范围内。
历来,个人PC通常由两部分组成:
最开始的计算机架构:
所有的CPU通过总线与北桥连接,北桥包括内存控制器,对于不同的RAM,例如SRAM,DRAM,SDRAM,需要不同的内存控制器。
为了与其他设备通信,南桥和上面的北桥连接。南桥充当输入/输出的桥,通过各种不同的总线协议(USB,SATA,PCI等)与外部设备通信。
这里有以下结论:
- 多CPU必须经北桥进行通信
- 与RAM通信必须经北桥
- RAM只有一个通道(文档年代久远,现在有DDR3,DDR4)
- 与南桥相连的设备若想同CPU通信,必须经北桥
对于上图的设计,存在两个瓶颈:
(1)设备访问RAM要经过CPU,这样性能差。于是提出DMA(directly data access ),设备直接经过北桥访问内存,不经过CPU。这样减少了CPU的负载,但同时北桥的带宽被占用了,于是出现瓶颈(2)。
(2)早期RAM只有一个通道(现在有多通道了,DDR3,DDR4),带宽有限,高并发通信时,数据通信延迟大。所以,增加数据流通的管道可以提高速度。内存条DDR4就比DDR3快。
如何在计算机系统架构上提高带宽呢?
方法一:在一些比较贵的计算机系统中,为了提高RAM的访问带宽,使用下图架构:
这个系统的特点是:把内存控制器从北桥剥离出来,使用外部内存控制器,这样的设计可以提高内存访问的带宽,也拓展了内存容量。
方法二:
在多cpu系统中(SMP),把内存控制器集成到CPU中,内存通道一下扩大4倍。
这种架构拓展了RAM的带宽,现在大型服务器很流行用,但也有缺点。即NUMA,非一致内存访问。每个CPU对自己attach的RAM访问速度很高,但访问别的CPU的RAM速度就打折了(多走路了)。但这些都可以通过软件层面优化,比如OS。
3.附加
自己的电脑到底使用的何种架构,我也没深究过,不过,架构主要由CPU和主板共同决定。