CPU Cache ⽤的是⼀种叫 SRAM(Static Random-Access Memory,静态随机存储器) 的芯⽚。

SRAM 之所以叫「静态」存储器,是因为只要有电,数据就可以保持存在,⽽⼀旦断电,数据就会丢失 了。 在 SRAM ⾥⾯,⼀个 bit 的数据,通常需要 6 个晶体管,所以 SRAM 的存储密度不⾼,同样的物理空间 下,能存储的数据是有限的,不过也因为 SRAM 的电路简单,所以访问速度⾮常快。 CPU 的⾼速缓存,通常可以分为 L1、L2、L3 这样的三层⾼速缓存,也称为⼀级缓存、⼆次缓存、三次缓 存。

CPU Cache_数据

L1 ⾼速缓存

L1 ⾼速缓存的访问速度⼏乎和寄存器⼀样快,通常只需要 2~4 个时钟周期,⽽⼤⼩在⼏⼗ KB 到⼏百 KB 不等。 每个 CPU 核⼼都有⼀块属于⾃⼰的 L1 ⾼速缓存,指令和数据在 L1 是分开存放的,所以 L1 ⾼速缓存通常 分成指令缓存和数据缓存。 在 Linux 系统,我们可以通过这条命令,查看 CPU ⾥的 L1 Cache 「数据」缓存的容量⼤⼩: ⽽查看 L1 Cache 「指令」缓存的容量⼤⼩,则是: $ cat /sys/devices/system/cpu/cpu0/cache/index0/size 32K $ cat /sys/devices/system/cpu/cpu0/cache/index1/size 32K

L2 ⾼速缓存

L2 ⾼速缓存同样每个 CPU 核⼼都有,但是 L2 ⾼速缓存位置⽐ L1 ⾼速缓存距离 CPU 核⼼ 更远,它⼤⼩ ⽐ L1 ⾼速缓存更⼤,CPU 型号不同⼤⼩也就不同,通常⼤⼩在⼏百 KB 到⼏ MB 不等,访问速度则更 慢,速度在 10~20 个时钟周期。

L3 ⾼速缓存

L3 ⾼速缓存通常是多个 CPU 核⼼共⽤的,位置⽐ L2 ⾼速缓存距离 CPU 核⼼ 更远,⼤⼩也会更⼤些,通 常⼤⼩在⼏ MB 到⼏⼗ MB 不等,具体值根据 CPU 型号⽽定。 访问速度相对也⽐较慢⼀些,访问速度在 20~60 个时钟周期。

内存

内存⽤的芯⽚和 CPU Cache 有所不同,它使⽤的是⼀种叫作 DRAM (Dynamic Random Access Memory,动态随机存取存储器) 的芯⽚。 相⽐ SRAM,DRAM 的密度更⾼,功耗更低,有更⼤的容量,⽽且造价⽐ SRAM 芯⽚便宜很多。 DRAM 存储⼀个 bit 数据,只需要⼀个晶体管和⼀个电容就能存储,但是因为数据会被存储在电容⾥,电 容会不断漏电,所以需要「定时刷新」电容,才能保证数据不会被丢失,这就是 DRAM 之所以被称为「动 态」存储器的原因,只有不断刷新,数据才能被存储起来。 DRAM 的数据访问电路和刷新电路都⽐ SRAM 更复杂,所以访问的速度会更慢,内存速度⼤概在 200~300 个 时钟周期之间。

SSD/HDD

硬盘 SSD(Solid-state disk) 就是我们常说的固体硬盘,结构和内存类似,但是它相⽐内存的优点是断电后数 据还是存在的,⽽内存、寄存器、⾼速缓存断电后数据都会丢失。内存的读写速度⽐ SSD ⼤概快 10~1000 倍。 $ cat /sys/devices/system/cpu/cpu0/cache/index2/size 256K $ cat /sys/devices/system/cpu/cpu0/cache/index3/size 3072K 当然,还有⼀款传统的硬盘,也就是机械硬盘(Hard Disk Drive, HDD),它是通过物理读写的⽅式来访问 数据的,因此它访问速度是⾮常慢的,它的速度⽐内存慢 10W 倍左右。 由于 SSD 的价格快接近机械硬盘了,因此机械硬盘已经逐渐被 SSD 替代了。