
文档教程知识库【免费下载链接】CS-Base图解计算机网络、操作系统、计算机组成、数据库共 1000 张图 50 万字破除晦涩难懂的计算机基础知识让天下没有难懂的八股文 在线阅读https://xiaolincoding.com项目地址https://gitcode.com/GitHub_Trending/cs/CS-Base点击查看免费下载导读本文深入剖析计算机存储器的完整层次结构从 CPU 内部的寄存器、L1/L2/L3 高速缓存到内存DRAM再到 SSD/HDD 硬盘层层拆解每一级存储的硬件原理、访问速度与成本差异并回答一个经典问题——机械硬盘、固态硬盘、内存相比 CPU L1 Cache 到底慢多少倍。读完本文你将掌握存储层次结构Memory Hierarchy的核心逻辑、各级存储器的技术选型依据SRAM/DRAM 的物理差异以及如何用 Linux 命令实测自己机器上各级缓存的容量为后续理解 CPU 缓存一致性、如何写出让 CPU 跑得更快的代码 等进阶内容打下基础。为什么需要多种存储器大家如果想自己组装电脑的话肯定需要购买一个 CPU但存储设备分类比较多不能只买一种除了内存还要买硬盘而硬盘又可以选择固态硬盘SSD还是机械硬盘HDD。相信大家都知道内存和硬盘都属于计算机的存储设备断电后内存的数据会丢失而硬盘不会——因为硬盘是持久化存储设备同时也是一个 I/O 设备。但容易被忽略的是CPU 内部也有存储数据的组件比如寄存器、CPU L1/L2/L3 Cache也都属于存储设备。它们能存储的数据非常小但因为靠近 CPU 核心访问速度都快过硬盘好几个数量级。问题来了机械硬盘、固态硬盘、内存这三个存储器到底和 CPU L1 Cache 相比速度差多少倍呢在回答这个问题之前先看看「存储器的层次结构」对存储器设备建立一个整体认识。这也正是《图解系统》中硬件结构篇章CPU 是如何执行程序的、磁盘比内存慢几万倍、CPU 缓存一致性所构建的知识体系的一环。存储器的层次结构设想一个场景大学期末备考你去图书馆临时抱佛脚。看书时我们的大脑会思考问题、记忆知识点同时通常会把常用的书放在桌子上要找不常用的书则会去图书馆的书架翻找。就这么一个小小的场景已经把计算机的存储结构基本都涵盖了把CPU比喻成我们的大脑大脑正在思考的东西就好比 CPU 中的寄存器处理速度最快能存储的数据也最少大脑中的记忆就好比CPU CacheCPU 高速缓存处理速度相比寄存器稍慢能存储的数据也多一些大脑中的短期记忆就好比L1 Cache长期记忆就好比L2/L3 Cache桌子上的书就好比内存一伸手就能拿到但读写速度远慢于寄存器图书馆书架上的书就好比硬盘能存储的数据非常大但读写速度相比内存又差了好几个数量级更别说与寄存器的差距了。我们从图书馆书架取书 → 放到桌子上 → 阅读 → 大脑记忆知识点 → 大脑思考这一系列过程就相当于数据从硬盘加载到内存再从内存加载到 CPU 的寄存器和 Cache最后由 CPU 进行处理和计算。对于存储器速度越快、能耗越高、材料成本越贵因此速度快的存储器容量都比较小。CPU 里的寄存器和 Cache 是整个计算机存储器中价格最贵的存储空间很小但读写速度极快相对便宜的内存和硬盘速度比不上 CPU 内部的存储器却能弥补存储空间的不足。存储器通常可以分为这么几个级别寄存器CPU CacheL1 CacheL2 CacheL3 Cache内存SSD/HDD 硬盘。寄存器最靠近 CPU 的存储单元最靠近 CPU 控制单元和逻辑计算单元的存储器就是寄存器它使用的材料速度最快、价格最贵因此数量不能很多通常在几十到几百之间每个寄存器可以存储一定的字节byte数据32 位 CPU 中大多数寄存器可以存储4个字节64 位 CPU 中大多数寄存器可以存储8个字节。寄存器访问速度非常快一般要求在半个 CPU 时钟周期内完成读写。CPU 时钟周期与 CPU 主频息息相关比如 2 GHz 主频的 CPU时钟周期就是1/2G也就是0.5 纳秒ns。关于寄存器在程序执行中的角色《图解系统》的 CPU 是如何执行程序的 一文有更细致的展开CPU 中常见的寄存器包括通用寄存器存放需要运算的数据、程序计数器存储 CPU 要执行的下一条指令的内存地址和指令寄存器存放当前正在执行的指令。CPU 处理一条指令时除了读写寄存器还需要解码指令、控制指令执行和计算如果寄存器速度太慢就会拉长指令的处理周期让用户感觉电脑「很慢」。CPU Cache用 SRAM 打造的高速缓存CPU Cache 使用的是一种叫SRAMStatic Random-Access Memory静态随机存储器的芯片。SRAM 之所以叫「静态」存储器是因为只要有电数据就可以保持存在而一旦断电数据就会丢失。在 SRAM 里一个 bit 的数据通常需要6 个晶体管所以存储密度不高同样的物理空间下能存储的数据有限但也因为电路简单访问速度非常快。CPU 的高速缓存通常分为 L1、L2、L3 三层也称为一级、二级、三级缓存。正是因为 SRAM 每 MB 造价远高于内存所用的 DRAMCPU Cache 只能以 KB/MB 计量而不是像内存那样动辄以 GB 计量。L1 高速缓存L1 高速缓存的访问速度几乎和寄存器一样快通常只需要2~4个时钟周期大小在几十 KB 到几百 KB不等。每个 CPU 核心都有一块属于自己的 L1 高速缓存指令和数据在 L1 是分开存放的因此 L1 高速缓存通常分成指令缓存和数据缓存。在 Linux 系统可以通过以下命令查看 CPU 的 L1 Cache「数据」缓存的容量大小$ cat /sys/devices/system/cpu/cpu0/cache/index0/size 32K而查看 L1 Cache「指令」缓存的容量大小$ cat /sys/devices/system/cpu/cpu0/cache/index1/size 32Kindex0对应数据缓存index1对应指令缓存二者大小通常一样。关于 L1 指令/数据缓存分离的意义如何写出让 CPU 跑得更快的代码 一文中提到CPU 会分别处理数据和指令例如1 1 2这个运算是指令、放进「指令缓存」输入的数字1是数据、放进「数据缓存」因此优化代码时需要分别考虑数据缓存和指令缓存的命中率。L2 高速缓存L2 高速缓存同样每个 CPU 核心都有但位置比 L1 距离 CPU 核心更远大小比 L1 更大随 CPU 型号不同通常在几百 KB 到几 MB不等访问速度更慢约10~20个时钟周期。在 Linux 系统查看 L2 Cache 容量$ cat /sys/devices/system/cpu/cpu0/cache/index2/size 256KL3 高速缓存L3 高速缓存通常是多个 CPU 核心共用的位置比 L2 距离 CPU 核心更远大小也更大些通常在几 MB 到几十 MB之间具体视 CPU 型号而定访问速度约20~60个时钟周期。在 Linux 系统查看 L3 Cache 容量$ cat /sys/devices/system/cpu/cpu0/cache/index3/size 3072K从源码结构看这套/sys/devices/system/cpu/cpu0/cache/index*/size的暴露方式来自 Linux 内核的sysfs缓存信息接口index0~index3依次描述同一 CPU 上不同层级/用途的缓存数据、指令、L2、L3读者可以直接在自己的 Linux 机器上执行上述命令验证本文的数值示例。内存需要不断刷新的 DRAM内存用的芯片和 CPU Cache 不同是一种叫DRAMDynamic Random Access Memory动态随机存取存储器的芯片。相比 SRAMDRAM 的密度更高、功耗更低、容量更大造价比 SRAM 便宜很多。DRAM 存储一个 bit 数据只需要一个晶体管和一个电容但数据存储在电容里电容会不断漏电所以需要「定时刷新」电容才能保证数据不丢失——这正是 DRAM 被称为「动态」存储器的原因只有不断刷新数据才能被存储起来。由于 DRAM 的数据访问电路和刷新电路都比 SRAM 更复杂访问速度更慢内存速度大概在200~300个时钟周期之间。内存的相关知识不止于此内存管理是操作系统的核心模块之一仓库中 为什么要有虚拟内存、malloc 是如何分配内存的、深入理解 Linux 虚拟内存管理 等文章正是顺着「内存 → 内存管理」这条主线展开的而 内存满了会发生什么 则讲解了物理内存不足时的回收与 Swap 机制其中提到匿名页 swap 时需要持久化到磁盘、而文件页Page Cache回收代价更低这也与本文「内存断电丢失、硬盘持久保存」的特性相互印证详见 进程写文件时进程发生了崩溃已写入的数据会丢失吗。SSD / HDD 硬盘持久化的 I/O 设备SSDSolid-state disk就是我们常说的固态硬盘结构和内存类似但它相比内存最大的优点是断电后数据依然存在而内存、寄存器、高速缓存断电后数据都会丢失。内存的读写速度比 SSD 大概快10~1000倍。机械硬盘Hard Disk Drive, HDD是传统的硬盘通过物理读写的方式访问数据盘片分层划分磁道磁道划分为扇区每个扇区512字节多个同编号磁道形成柱面由磁头寻道读写。因此它的访问速度非常慢比内存慢10W约 10 万倍左右。关于机械硬盘访问为何慢仓库的 进程调度/页面置换/磁盘调度算法 一文给出了底层解释寻道时间是磁盘访问最耗时的部分磁盘调度算法FCFS、最短寻道时间优先、扫描/循环扫描算法等的目的就是通过优化访问请求顺序、节省不必要的寻道时间来提升磁盘访问性能。由于 SSD 的价格正逐渐接近机械硬盘机械硬盘已逐渐被 SSD 替代。存储器的层次关系每一层只与相邻层打交道现代计算机都用上了 CPU Cache、内存、SSD/HDD 硬盘这些存储器设备。其中存储空间越大的存储器访问速度越慢所需成本也相对越少。关键在于CPU 并不会直接和每一种存储器设备打交道每一种存储器设备只和它相邻的存储器设备打交道。比如CPU Cache 的数据是从内存加载过来的写回数据时也只写回内存——CPU Cache 不会直接把数据写到硬盘也不会直接从硬盘加载数据而是先加载到内存再从内存加载到 CPU Cache。所以每个存储器只和相邻的一层存储器设备打交道存储设备为了追求更快的速度材料成本必然更高正因成本太高CPU 内部的寄存器、L1/L2/L3 Cache 只能用较小的容量而内存、硬盘则可以用更大的容量——这就是存储器的层次结构。另外当 CPU 需要访问内存中的某个数据时会按如下顺序逐级查询如果寄存器有这个数据CPU 直接从寄存器取数据寄存器没有就查询L1 高速缓存L1 没有则查询L2 高速缓存L2 还是没有就查询L3 高速缓存L3 依然没有才去内存中取数据。因此存储层次结构也形成了缓存Cache体系每一层都是上一层更靠近 CPU 的一层的缓存。这套逐级查找机制与「内存作为硬盘的缓存」逻辑一致——进程写文件时进程发生了崩溃已写入的数据会丢失吗 一文介绍的 Page Cache 正是内核用内存为磁盘文件做的缓存层进程 buffered I/O 写入的数据先进 Page Cache内核再在合适的时机持久化到磁盘。值得一提的是CPU Cache 本身的数据结构与查找过程也遵循同样的「按块加载」思想CPU Cache 由 Cache Line缓存块组成一次从内存加载的数据是 Cache Line 大小的整数倍Linux 上通常为 64 字节访问时根据内存地址的「组标记 索引 偏移量」定位缓存数据完整机制参见 如何写出让 CPU 跑得更快的代码。存储器之间的实际价格和性能差距速度越快的存储器造价越高来看不同层级存储器的实际性能与价格差异本文数据来自原文档的工程经验值实际数值随工艺与产品代次会有变化重点在于量级对比存储器典型随机访问延时相比 L1 Cache 慢的倍数每 MB 造价相对关系L1 Cache约 1 纳秒ns基准基准内存DRAM约 100 纳秒约100倍每 MB 价格约为 L1 的1/466SSD约 150 微秒μs约150000倍—机械硬盘HDD约 10 毫秒ms约10000000倍每 MB 价格约为 L1 的1/175000访问延时L1 Cache 约 1 纳秒内存已达 100 纳秒相比 L1 Cache 慢了100倍机械硬盘访问延时高达 10 毫秒相比 L1 Cache 慢了10000000一千万倍差了好几个数量级。价格每生成 1 MB 大小的 L1 Cache 相比内存贵了466倍相比机械硬盘更是贵了175000倍。原文档还举例在某电商平台8G 内存 1T 机械硬盘 256G 固态硬盘的总价格都不及一块 Intel i5-10400 CPU 的价格而这颗 CPU 高速缓存的总大小也就十多 MB。总结L1 Cache 到底比硬盘快多少倍回到开头的问题机械硬盘、固态硬盘、内存这三个存储器到底和 CPU L1 Cache 相比速度差多少倍以随机访问延时为基准CPU L1 Cache 比内存快100倍左右1 纳秒 vs 100 纳秒CPU L1 Cache 比 SSD 快150000倍左右SSD 随机访问延时 150 微秒最慢的机械硬盘随机访问延时高达 10 毫秒可以直观量化SSD 比机械硬盘快 70 倍左右内存比机械硬盘快 100000 倍左右CPU L1 Cache 比机械硬盘快 10000000 倍左右把上述时间比例差异放大后感受会更加直观如果 CPU 访问 L1 Cache 的时间是1 秒那访问内存需要大约2 分钟随机访问 SSD 里的数据需要1.7 天而访问机械硬盘长达近4 个月。用图书馆场景串联整个体系各种存储器之间的关系可以用图书馆学习场景来理解CPU是大脑正在思考和处理知识的过程好比寄存器处理数据的过程——速度极快、容量极小CPU 中的L1~L3 Cache好比大脑中的短期记忆和长期记忆——需要花一点点时间调取数据并处理面前的桌子相当于内存——能放更多的书数据但找起来、看起来要花时间比 CPU Cache 慢不少图书馆的书架相当于硬盘——能放下比内存更多的数据但找起来更费时间是最慢的存储器设备。从寄存器、CPU Cache到内存、硬盘一层层下来访问速度越来越慢、存储容量越来越大、价格越来越便宜而且每个存储器只与相邻的一层打交道于是形成了存储器的层次结构。不同存储器之间性能差距很大因此构造存储器分级很有意义——分级的目的是构造缓存体系让最常用的数据留在最快的层把不常用的数据逐级下沉到便宜的大容量层从而在成本可控的前提下获得尽量高的整体访问性能。这既是组装电脑选购硬件的常识依据也是理解后续 CPU 缓存一致性、CPU 缓存优化实战 乃至操作系统内存管理虚拟内存、页面置换算法等主题的基石。赞分享文档教程知识库【免费下载链接】CS-Base图解计算机网络、操作系统、计算机组成、数据库共 1000 张图 50 万字破除晦涩难懂的计算机基础知识让天下没有难懂的八股文 在线阅读https://xiaolincoding.com项目地址https://gitcode.com/GitHub_Trending/cs/CS-Base点击查看免费下载相关推荐Steampipe临时表性能内存vs磁盘存储选项对比Steampipe临时表性能内存vs磁盘存储选项对比 在数据处理和分析中临时表Temporary Table是一种常用的工具用于存储中间结果或临时数据开发工具云原生CANN/hcomm CCU执行控制接口CCU_IF 产品支持情况 ! npu950 id1 Ascend 950PR/Ascend 950DT支持 ! end id1 ! npuA通信高性能计算人工智能CANNAscend7个关键指标解析Memcached容器存储性能对比本地磁盘vs网络存储7个关键指标解析Memcached容器存储性能对比本地磁盘vs网络存储 在分布式缓存系统中Memcached作为轻量级高性能的内存数据库其存储性能直接缓存后端高可用上一篇三步搞定国家教育平台电子课本下载离线教学资源获取终极指南下一篇ESP32 Arduino开发环境搭建从零到专业物联网开发的3个关键突破创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考