为什么片上RAM和外部RAM访问速度有差异?为什么CPU访问外部RAM速度慢你需要明白总线的这些知识..
有些技术,比如总线,看起来它和一般程序员关系不大。但它却串联起很多问题:为什么片上RAM和外部RAM访问速度有差异;为什么CPU访问外部RAM速度慢;为什么访问IO设备更慢;为什么CPU访问cache比外部RAM快?
背景
总线是一组、多条信号线,是计算机中多个模块间(如CPU、内存、外设等)的通讯信路;
每根信号线上传输变化的0/1信号;
信号收发双方必须以某种方式(如一根时钟信号线)同步,以正确传递和解析这些信号;
信号变化的频率大致决定总线上数据传输速率,随着工艺的进步,总线频率不断提高,带宽不断增加,但和CPU一样有极限,因为频率越高,信号线间干扰越严重;
内存受自身及其控制器工艺所限,也有访问速度限制,CPU访问内存速度=min(总线,内存);
外围设备速度很慢,或者说数据量很小,如串口/鼠标/键盘等。
发展过程
下面让我们跟着历史的脚步看看总线的发展历程,理解今天复杂的总线是怎样出现的。
a.公共总线
早期PC中,CPU/RAM/IO都挂在一条总线上,即所有部件都被限定在同一个时钟频率下工作,这样整个系统不得不去迁就跑得最慢的外围IO设备,整体速度等于系统中最慢的设备的速度,系统性能无法提高。
b. I/O总线
"所有计算机科学中的问题都能通过增加一个中间转换层来解决",人们自然想到这把万能钥匙,于是把高/低速设备分组,各自用高/低速总线连接,即CPU和内存连接在高速的内部总线上,外围慢速的IO设备就挂在慢速I/O总线上。这样I/O总线最早分离出去,与内部总线工作在不同时钟频率上,之间通过一个被称为bridge的器件匹配连接,bridge起降频作用。
这时CPU摆脱了低速I/O设备的束缚,访问RAM的速度大大提高。
c.倍频出世
再后来,CPU发展迅猛,频率大幅攀升,内存逐渐跟不上CPU,让内存和CPU工作于同一总线频率就浪费了CPU的性能。人们又类似地引入了倍频的概念,即在CPU与原先内部总线间引入一个倍频器,内存依旧工作在原内部总线频率,而CPU工作频率(主频)变成外频(内存总线频率)*倍频。
这样CPU内部访问寄存器以及运算的速度不再受内存速度的拖累。
总结
至此就可以回答最初几个问题。
a. CPU访问外部RAM要经过降频后的总线,有总线瓶颈,所以慢;
b.cache属于片上RAM,工作于CPU频率,访问它不需要经过降频后的内存总线,所以速度快;
c.访问I/O低速设备要经过更慢的I/O总线,所以性能最差。
目前计算机整体基本还是CPU/内存(高速)总线/IO(低速)总线几个级别,整体性能大概可用下面公式表达:总时间=∑(CPU片内工作量/cpu频率)+∑(内存等高速设备访问量/内存总线频率)+∑(I/O设备访问/IO总线频率)。因此围绕总线的演化趋势就是:
a.不断把各种设备按速度分组,细化出各种子总线并桥接在系统的高速或低速总线上;
b.不断提高高速总线带宽,并尽量把对低速区的访问缓存在高速区,如CPU cache和磁盘文件的内存缓冲。
以上或许在细节上不准确,但可以作为基础去理解软件的相关问题。 |