我的天啊!知道硬盘很慢,没想到比CPU还慢1000万倍Cache一种存储,比如除了内存还需要买硬盘,而对于硬盘磁盘,我们还可以选择是固态硬盘还是机械硬盘。相信大家都知道,内存和硬盘都是电脑的存储设备。断电后内存中的数据会丢失,但硬盘不会,因为硬盘是一个持久性存储设备,也是一个I/O设备。但实际上,CPU内部是有存储数据的组件的。这个应该不太注意。比如寄存器,CPUL1/L2/L3Cache也是存储设备,但是它们能存储的数据很小,但是因为靠近CPU核心,所以访问速度非常快,几个数量级比硬盘快。问题来了,机械硬盘、固态硬盘、内存相比CPUL1Cache的速度是多少倍?在回答这个问题之前,我们先来了解一下“内存层次结构”,以便我们对内存设备有一个整体的认识。2.记忆的层次结构我们想象一个场景,你在准备大学期末考试,你去图书馆补习。那么,在看书的时候,我们的大脑就会去思考问题,去记忆知识点。此外,我们通常会在办公桌上放一些常用的书籍。当我们想找一本不常用的书时,我们会去图书馆找书架。就是这样一个小场景,基本涵盖了计算机的存储结构。我们可以将CPU比作我们的大脑。大脑正在思考的事情就像CPU中的寄存器一样。处理速度是最快的,但可存储的数据也是最少的。毕竟,我们不能同时想太多,除非你练习过。我们大脑中的内存就像是CPUCache,中文叫CPU缓存。它的处理速度比寄存器慢一点,但可以存储的数据稍多一些。CPUCache通常分为三层:L1、L2、L3。L1Cache通常分为“数据缓存”和“指令缓存”。L1离CPU最近,读写速度比L2和L3快。空间很小。我们大脑中的短期记忆就像L1Cache,而长期记忆就像L2/L3Cache。Register和CPUCache都在CPU内部,离CPU很近,所以读写速度都很快,但是能存储的数据很少,毕竟CPU就那么小。知道了CPU内部内存的层次分布,我们再来看看CPU外部的内存。当我们的大脑记忆中没有信息时,我们可以从书桌或书架上阅读书籍。我们桌上的书就像回忆。寄存器,图书馆里书架上的书,就像硬盘一样,可以存储非常大的数据,但是读写速度比内存差几个数量级,更别提和寄存器的差距了。当我们从图书馆的书架上拿书,把书放在桌子上,然后再看书的时候,我们的大脑会把知识点记下来,然后通过大脑去思考。这一系列过程相当于从硬盘加载数据到内存,再从内存加载。加载到CPU的寄存器和Cache中,然后由CPU进行处理和计算。对于内存而言,其速度越快,能耗越高,材料成本也越贵,所以快内存的容量相对较小。CPU中的寄存器和Cache是??整个计算机内存中最昂贵的。存储空间虽然小,但是读写速度极快,相对便宜的内存和硬盘肯定比不上CPU的内存,却可以弥补存储空间的不足。内存通常可以分为几个层次:(1)寄存器;(2)CPU缓存;L1-缓存;L2缓存;L3缓存;(3)内存;(四)SSD/HDD硬盘1.寄存器最接近CPU的控制单元和逻辑运算单元的内存都是寄存器,用料最快,所以价格也最贵,所以数量不能大。存储器的数量通常在几十到几百之间,每个寄存器可以用来存储某个字节(byte)的数据。例如:32位CPU中的大多数寄存器可以存储4个字节;64位CPU中的大多数寄存器可以存储8个字节。寄存器的访问速度非常快,一般要求在半个CPU时钟周期内完成读写。CPU时钟周期与CPU主频密切相关。例如主频为2GHz的CPU,其时钟周期为1/2G,即0.5ns(纳秒)。CPU在处理一条指令时,除了读写寄存器外,还需要对指令进行译码,控制指令的执行和计算。如果寄存器的速度太慢,会延长指令的处理周期,从而给用户一种计算机“很慢”的感觉。2.CPUCacheCPUCache使用了一种叫做SRAM(StaticRandom-AccessMemory,静态随机存取存储器)的芯片。SRAM之所以称为“静态”存储器,是因为只要有电,数据就会一直存在,但在电源关闭时就会丢失。在SRAM中,一位数据通常需要6个晶体管,所以SRAM的存储密度并不高。在同样的物理空间下,能够存储的数据是有限的,但是由于SRAM的电路简单,所以存取速度非常快。CPU的缓存通常可以分为L1、L2、L3等三层缓存,也称为一级缓存、二级缓存、三级缓存。3.一级缓存一级缓存的访问速度几乎和寄存器一样快,通常只需要2~4个时钟周期,大小从几十KB到几百KB不等。每个CPU内核都有自己的L1缓存。指令和数据分别存储在L1中,所以L1缓存通常分为指令缓存和数据缓存。在Linux系统中,我们可以通过这条命令查看CPU中L1Cache“数据”缓存的容量:$cat/sys/devices/system/cpu/cpu0/cache/index0/size32K查看L1Cache“命令”缓存的容量为:$cat/sys/devices/system/cpu/cpu0/cache/index1/size32K4。L2cache每个CPU核心都有L2缓存,但是L2缓存的位置比L1缓存的位置离CPU核心更远,其大小也比L1缓存大。CPU的大小因型号而异,一般在几百KB到几MB不等,存取速度较慢,速度为10到20个时钟周期。在Linux系统中,我们可以使用这条命令来查看CPU中L2Cache的容量:$cat/sys/devices/system/cpu/cpu0/cache/index2/size256K5。L3缓存L3缓存通常是多个CPU核心共享的,位置比L2缓存更远离CPU核心,大小也会更大一些,一般在几MB到几十MB不等,具体取值看在CPU型号上。访问速度比较慢,访问速度在20到60个时钟周期之间。在Linux系统中,我们可以使用这条命令来查看CPU中L3Cache的容量:$cat/sys/devices/system/cpu/cpu0/cache/index3/size3072K6。不同的是,它使用了一种叫做DRAM(DynamicRandomAccessMemory,动态随机存取存储器)的芯片。与SRAM相比,DRAM密度更高、功耗更低、容量更大,而且比SRAM芯片便宜得多。在DRAM中存储一点数据,只需要一个三极管和一个电容来存储,但由于数据会存储在电容中,电容会不断漏电,所以需要对电容进行“定时刷新”确保数据不会丢失。这就是DRAM之所以被称为“动态”内存,是因为数据只有不断刷新才能存储。DRAM的数据存取电路和刷新电路比SRAM复杂,因此存取速度会慢一些,内存速度大约为200~300个时钟周期。7、SSD/HDDSSD(Solid-statedisk)就是我们常说的固态硬盘。它的结构类似于内存,但它比内存的优势在于断电后数据仍然存在,而内存、寄存器和缓存中断。断电后数据会丢失。内存的读写速度大约是SSD的10~1000倍。当然,还有一种传统的硬盘,即机械硬盘(HardDiskDrive,HDD),它通过物理读写来访问数据,所以访问速度很慢,速度慢了10W关于时间的记忆。随着SSD价格越来越接近机械硬盘,机械硬盘逐渐被SSD取代。3.存储的层次关系现代计算机使用CPUCahce、内存、SSD或HDD硬盘等存储设备。其中,存储空间越大的存储设备,存取速度越慢,成本也相对较低。CPU并不直接和每个内存设备打交道,而是每个内存设备只和它相邻的内存设备打交道。比如CPUCache的数据是从内存加载的,数据写回的时候,只是写回内存。CPUCache不会直接将数据写入硬盘,也不会直接从硬盘加载数据,而是先加载到内存,再从内存加载到CPUCache。因此,每个内存只与相邻层的存储设备打交道,为了追求更快的速度,存储设备所需的材料成本必然更高,而且由于成本太高,CPU内部的寄存器,L1\L2\L3Cache必须使用较小的容量,相反,内存和硬盘可以使用较大的容量,也就是我们今天所说的内存层次结构。另外,当CPU需要访问内存中的某个数据时,如果寄存器中有这个数据,CPU可以直接从寄存器中取数据。如果寄存器没有这个数据,CPU会查询L1缓存,如果L1没有,再查询L2缓存,如果仍然没有L2,就去查询L3缓存,如果仍然没有L3,它会去内存取数据。因此,存储层次结构也形成了一个缓存系统。4.内存的实际价格和性能差距。我们知道内存越快,成本越高。下面我们就根据实际数据来看看不同级别内存的性能和价格吧。不同之处。下表是不同级别内存的成本对比图:可以看到L1Cache的访问延迟是1纳秒,而内存已经是100纳秒,比L1Cache慢了100倍。另外,机械硬盘的访问延迟高达10毫秒,比L1Cache慢了1000万倍,差了好几个数量级。在价格方面,L1CacheperMB比内存贵466倍,比机械硬盘贵175,000倍。浏览了某东各种存储设备的零售价。8G内存+1T机械硬盘+256G固态硬盘的总价还不如一个Intlei5-10400CPU的价格。该CPU的总缓存大小也只有十多MB。5.总结各种记忆之间的关系,可以结合我们在图书馆学习的场景来理解。CPU可以比作我们的大脑。我们目前正在思考和处理的知识过程就像是CPU处理数据中寄存器的过程。速度极快,但容量很小。CPU中的L1-L3Cache就像我们大脑中的短时记忆和长时记忆,需要一点时间来检索和处理数据。摆在我们面前的表格就相当于内存,可以装更多的书(数据),但是查找和查找需要一定的时间,比CPUCache慢很多。图书馆的书架就相当于一个硬盘,比内存能装更多的资料,只是找起来要花更多的时间。可以说是最慢的存储设备。从寄存器、CPUCache,到内存,再到硬盘,访问速度越来越慢,存储容量越来越大,越来越便宜,每一个内存都只和相邻的相连。内存设备层处理,从而形成内存的层次结构。先回答开头的问题:机械硬盘、固态硬盘、内存这三种内存相比CPUL1Cache到底慢了多少倍?CPUL1Cache的随机访问延迟为1纳秒,内存为100纳秒。秒,所以CPUL1Cache比内存快100倍左右。SSD随机访问延迟为150微秒,因此CPUL1Cache比SSD快约150,000倍。最慢的机械硬盘的随机存取延迟高达10毫秒。我们来看看机械硬盘到底有多快:SSD比机械硬盘快70倍左右;内存比机械硬盘快10万倍左右,即10W倍;CPUL1Cache比机械硬盘快10000000倍左右,即1000W倍;我们将上述的时间比例差异放大后,可以很直观的感受到性能上的差异。如果CPU访问L1Cache的缓存时间为1秒,那么访问内存大约需要2分钟,随机访问SSD中的数据需要1.7天,访问机械硬盘则需要更长的时间,最多将近4个月。可以发现不同的内存之间存在较大的性能差距,构建内存层次结构是有意义的。层次结构的目的是构建缓存系统。
