知道硬盘很慢,没想到比CPU Cache慢10000000倍( 二 )


  • 寄存器;
  • CPU Cache;
  1. L1-Cache;
  2. L2-Cache;
  3. L3-Cahce;
  • 内存;
  • SSD/HDD 硬盘
寄存器最靠近 CPU 的控制单元和逻辑计算单元的存储器 , 就是寄存器了 , 它使用的材料速度也是最快的 , 因此价格也是最贵的 , 那么数量不能很多 。
存储器的数量通常在几十到几百之间 , 每个寄存器可以用来存储一定的字节(byte)的数据 。 比如:
  • 32 位 CPU 中大多数寄存器可以存储 4 个字节;
  • 64 位 CPU 中大多数寄存器可以存储 8 个字节 。
寄存器的访问速度非常快 , 一般要求在半个 CPU 时钟周期内完成读写 , CPU 时钟周期跟 CPU 主频息息相关 , 比如 2 GHz 主频的 CPU , 那么它的时钟周期就是 1/2G , 也就是 0.5ns(纳秒) 。
CPU 处理一条指令的时候 , 除了读写寄存器 , 还需要解码指令、控制指令执行和计算 。 如果寄存器的速度太慢 , 则会拉长指令的处理周期 , 从而给用户的感觉 , 就是电脑「很慢」 。
CPU CacheCPU Cache 用的是一种叫 SRAM(Static Random-Access Memory , 静态随机存储器) 的芯片 。
SRAM 之所以叫「静态」存储器 , 是因为只要有电 , 数据就可以保持存在 , 而一旦断电 , 数据就会丢失了 。
在 SRAM 里面 , 一个 bit 的数据 , 通常需要 6 个晶体管 , 所以 SRAM 的存储密度不高 , 同样的物理空间下 , 能存储的数据是有限的 , 不过也因为 SRAM 的电路简单 , 所以访问速度非常快 。
CPU 的高速缓存 , 通常可以分为 L1、L2、L3 这样的三层高速缓存 , 也称为一级缓存、二次缓存、三次缓存 。
知道硬盘很慢,没想到比CPU Cache慢10000000倍文章插图
L1 高速缓存L1 高速缓存的访问速度几乎和寄存器一样快 , 通常只需要 2~4 个时钟周期 , 而大小在几十 KB 到几百 KB 不等 。
每个 CPU 核心都有一块属于自己的 L1 高速缓存 , 指令和数据在 L1 是分开存放的 , 所以 L1 高速缓存通常分成指令缓存和数据缓存 。
在 Linux 系统 , 我们可以通过这条命令 , 查看 CPU 里的 L1 Cache 「数据」缓存的容量大小:
$ cat /sys/devices/system/cpu/cpu0/cache/index0/size32K而查看 L1 Cache 「指令」缓存的容量大小 , 则是:
$ cat /sys/devices/system/cpu/cpu0/cache/index1/size32KL2 高速缓存L2 高速缓存同样每个 CPU 核心都有 , 但是 L2 高速缓存位置比 L1 高速缓存距离 CPU 核心 更远 , 它大小比 L1 高速缓存更大 , CPU 型号不同大小也就不同 , 通常大小在几百 KB 到几 MB 不等 , 访问速度则更慢 , 速度在 10~20 个时钟周期 。
在 Linux 系统 , 我们可以通过这条命令 , 查看 CPU 里的 L2 Cache 的容量大小:
$ cat /sys/devices/system/cpu/cpu0/cache/index2/size256KL3 高速缓存L3 高速缓存通常是多个 CPU 核心共用的 , 位置比 L2 高速缓存距离 CPU 核心 更远 , 大小也会更大些 , 通常大小在几 MB 到几十 MB 不等 , 具体值根据 CPU 型号而定 。
访问速度相对也比较慢一些 , 访问速度在 20~60个时钟周期 。
在 Linux 系统 , 我们可以通过这条命令 , 查看 CPU 里的 L3 Cache 的容量大小:
$ cat /sys/devices/system/cpu/cpu0/cache/index3/size 3072K内存内存用的芯片和 CPU Cache 有所不同 , 它使用的是一种叫作 DRAM (Dynamic Random Access Memory , 动态随机存取存储器) 的芯片 。
相比 SRAM , DRAM 的密度更高 , 功耗更低 , 有更大的容量 , 而且造价比 SRAM 芯片便宜很多 。


推荐阅读