
在计算世界中,速度至关重要。当我们常常关注 CPU 的处理能力或内存的容量时,存储设备——不起眼的磁盘——的性能却是一个关键且常被误解的组件,它决定了我们整个系统的响应能力。仅仅查看驱动器广告上宣传的每秒兆字节数,并不能捕捉到决定真实世界速度的硬件物理学和软件智能之间复杂的相互作用。规格与现实之间的这种差距正是性能瓶颈产生的地方,它会令用户感到沮丧,并限制强大应用程序的潜力。
本文旨在通过一次从第一性原理到宏大应用的旅程来弥合这一差距。我们将首先深入探讨定义磁盘性能的核心原理与机制,对比硬盘驱动器 (HDD) 的机械世界与固态驱动器 (SSD) 的并行固态宇宙。您将了解为何延迟(而不仅仅是带宽)为王,并发现为克服这些物理限制而开发的巧妙软件策略。接下来,本文将探讨深远的应用与跨学科联系,揭示这些基本概念如何塑造了从现代操作系统和数据库的设计,到科学研究前沿所使用的各种方法。读完本文,您将看到,理解磁盘性能不仅仅是关于硬件,更是关于理解构建现代计算大部分基础的基石。
要真正掌握任何机器的性能,您必须首先了解其核心。对于存储设备而言,这意味着要超越广告宣传的速度,深入研究支配其行为的基本物理定律和巧妙的工程技巧。我们的旅程始于探索两种截然不同的机器:旋转的机械硬盘驱动器 (HDD) 和无声的电子固态驱动器 (SSD)。尽管它们都存储我们的数据,但它们生活在不同的物理宇宙中,理解它们的原理就像学习两种完全不同游戏的规则。
想象一个巨大的圆形图书馆,所有的书籍都印在巨大的、旋转的黑胶唱片表面。要阅读一句话,图书管理员必须首先将一个机械臂移动到正确的唱片(盘片),然后移动到正确的凹槽(磁道),接着等待唱片旋转,直到想要的句子经过读针下方。这,本质上,就是一个硬盘驱动器 (HDD)。它是机械精度的奇迹,将数据存储在以每分钟数千转速度旋转的磁性盘片上。它的性能从根本上与物理移动相关联。
现在,想象一个不同的图书馆。这个图书馆没有任何移动部件。它是一个由无数微小邮箱组成的巨大网格,每个邮箱都有自己快如闪电的信使。要检索一条信息,您只需发送一个请求,信使就会立即从指定的邮箱中取回它。如果您同时向不同的邮箱发送许多请求,许多信使可以并行工作。这就是固态驱动器 (SSD) 的世界。它将数据存储在闪存单元中,其性能由电子的速度和并行处理的能力决定。
这两个类比是关键。磁盘性能的故事就是驯服这两种机器物理特性的故事。
让我们更精确一些。当您要求 HDD 检索一条数据时,它不会立即发生。总时间,即访问延迟,是三个不同阶段的总和。考虑一个典型任务:从一个以 RPM 转速旋转的磁盘的随机位置读取一个微小的 数据块。
寻道时间 (): 这是读/写磁头组件从当前位置机械移动到盘片上正确磁道所需的时间。就像图书管理员在图书馆里移动机械臂一样。这通常是过程中最长的部分,需要几毫秒 ()。在我们的示例场景中,一次特定的寻道可能需要 。
旋转延迟 (): 一旦磁头位于正确的磁道上方,它必须等待盘片旋转,使所需的数据扇区转到其下方。如果磁头到达磁道时数据刚过,我们必须等待一整圈!如果它到达时数据正好也到了,等待时间为零。由于到达点是随机的,平均等待时间是半圈。对于一个 RPM 的磁盘,一圈大约需要 ,因此平均旋转延迟是相当大的 。
传输时间 (): 这是当扇区从磁头下飞过时,实际读取磁性数据所需的时间。对于我们的 数据块,在一个传输速率为 的驱动器上,这仅仅是 。
注意到什么惊人的事情了吗?总的平均访问时间 () 完全由寻道和旋转的机械开销主导。实际的数据传输时间几乎可以忽略不计!最小可能时间,如果我们幸运地遇到旋转延迟为零 (),仍然是 ,几乎完全由该操作的寻道时间决定。这就是 HDD 的根本挑战:我们正在与机械延迟作斗争。
如果移动磁头如此昂贵,最显而易见的策略就是减少移动频率并提高移动效率。这个简单的想法是数十年来旨在“驯服野兽”的软件工程的基础。
想象一下,您需要从杂货店拿十种不同的商品。如果开车去商店,拿一件商品,开车回家,然后再开车回去拿第二件,如此往复,那将是愚蠢的。您会一次性去商店,把所有需要的东西都拿回来。操作系统 (OS) 也用一种称为预读 (read-ahead) 或预取 (prefetching) 的技术做同样的事情。
当操作系统检测到您正在顺序读取文件(读取块 1,然后是 2,然后是 3...)时,它会智能地猜测您很快就需要接下来的数据块。因此,它不会只获取您请求的那一个块,而是发出一个更大的单一 I/O 请求来获取一大块连续的数据块。一次寻道和旋转的巨大固定成本现在被分散或分摊到许多数据块上。
这里有一个巧妙的“盈亏平衡点”。当我们获取更多页面时,每个页面的分摊开销会减少,而每个页面的传输时间保持不变。最佳策略是获取足够大的一块数据,使得传输数据所花费的时间与寻道所花费的时间相比变得显著。盈亏平衡点就是每个页面的分摊寻道成本等于每个页面的传输时间。对于典型的 HDD,这意味着获取大约一兆字节的连续数据时,分摊的好处才真正开始显现。
同样的逻辑也适用于写入。如果一个应用程序写入许多在磁盘上相邻的小数据块(例如追加到日志文件),操作系统不会立即将每个微小的写入操作发送到磁盘。相反,它会在内存中缓冲这些“脏”页,然后将它们合并 (coalesce) 成一个单一的、大的、顺序的写入操作。
性能提升是惊人的。在 HDD 上,写入 8192 个独立的 页面可能涉及 8192 次单独的寻道,耗时近 100 秒。通过将它们合并成仅仅八次大的 写入,总时间可以减少到半秒以下——速度提升超过 300 倍!这是因为我们用少数几次移动替换了数千次昂贵的机械运动。这完美地说明了软件如何能够克服物理限制。
如果请求不是顺序的,而是随机的,散布在磁盘各处,该怎么办?想想摩天大楼里一部繁忙的电梯。一个简单的电梯可能会按照按钮被按下的顺序(先来先服务)来服务请求,导致疯狂的上下移动。一部智能电梯会先完成一个方向的行程,沿途接送乘客,然后再掉转方向。
HDD 的磁盘调度器也是这样工作的。电梯算法(如 SCAN 或 LOOK)会接收待处理请求的队列,并根据它们在磁盘上的物理位置(它们的柱面号)对它们进行重新排序。磁头不再从柱面 1000 随机跳到 8000 再到 3000,而是平滑地扫过盘片,服务其路径上的所有请求。这将一系列昂贵的大范围寻道转变为一次由许多微小、廉价的寻道组成的长时间扫描,极大地提高了整体吞吐量。
这种协同定位 (co-location) 的原则非常强大,甚至影响了文件系统的设计方式。例如,一个常见的扼杀性能的寻道来源是,当应用程序正在读取一个大文件时,系统需要向其日志 (journal)(元数据更改的记录)写入数据。如果日志与文件数据的物理位置相距甚远,磁盘磁头必须不断地来回穿梭。解决方案,正如 Fast File System 等经典设计所采用的,是将日志等元数据放置在与其相关数据相同的柱面组 (cylinder group) 中,从而最大限度地减少这种移动距离并保持顺序吞吐量。
当我们把注意力转向 SSD 时,游戏规则完全改变了。没有旋转的盘片,没有移动的磁头。运动的束缚结束了。寻道时间和旋转延迟实际上为零。那么是什么限制了 SSD 的性能呢?
答案是并发性 (concurrency)。一个 SSD 不是一个单一的实体;它是一个并行系统,包含多个通过若干内部数据通道连接的闪存芯片 (die)。为了达到包装盒上宣传的惊人速度,您必须让尽可能多的通道和芯片同时保持忙碌状态。
这就引出了性能分析中最基本的关系之一,Little 定律。该定律指出,一个系统中的平均项目数 () 等于平均到达率(,或吞吐量)乘以一个项目在系统中花费的平均时间(,或延迟)。
对于 SSD 来说, 是队列深度(未完成的 I/O 请求数量), 是以每秒输入/输出操作数 (IOPS) 为单位的吞吐量,而 是单个请求的平均延迟。为了最大化吞吐量 (),在给定 SSD 的延迟 () 大致固定的情况下,我们必须在队列 () 中维持足够数量的请求。
想象一个每秒可以执行 200,000 次随机读取的 SSD,每次读取平均需要 150 微秒 ()。为了达到这个最大吞吐量,必要的队列深度是:
这意味着您需要持续保持大约 30 个“在途 (in flight)”请求,才能完全饱和设备的内部并行能力。单个请求或浅队列将使 SSD 的大部分内部硬件处于空闲状态,从而导致性能不佳。
这对调度有深远的影响。对 HDD 如此出色的电梯算法,对 SSD 却是有害的。通过按地址对请求进行排序并创建一个单一的、串行化的流,它完全向设备隐藏了工作负载的内在并行性,阻止了设备向其多个内部通道分派请求。这就是为什么像 NVMe 这样的现代存储接口使用多队列 (multi-queue) 设计,允许应用程序并发提交请求而没有中央瓶颈,从而完全释放设备的并行能力。针对一种技术的优化变成了对下一种技术的负优化。
在这两种技术中,有一个至高无上的统一原则:缓存。这个想法很简单:将常用数据的副本保存在更快、更近的存储层中,以避免访问更慢、更远的存储层。
系统中最突出的缓存是操作系统页缓存 (OS page cache),它是计算机主内存 (DRAM) 中的一个区域,用于存储最近访问的文件数据。当应用程序读取文件时,操作系统首先检查页缓存。如果数据在那里(缓存命中),它几乎会立即返回,完全避免了缓慢的磁盘访问。这里也是操作系统施展其预读和写缓冲魔法的地方。
然而,这个缓存并不总是有用的。考虑一个复杂的应用程序,如数据库管理系统。它通常有自己的、非常大的、智能管理的缓冲池。如果这样的应用程序使用标准的缓冲 I/O,数据会从磁盘读入操作系统页缓存,然后立即从页缓存复制到数据库的缓冲池中。这被称为双重缓存 (double caching)。它浪费了宝贵的内存(数据存储了两次)和 CPU 周期(用于额外的复制)。
为了解决这个问题,操作系统提供了一个“逃生舱口”:直接 I/O(或 [O_DIRECT](/sciencepedia/feynman/keyword/o_direct))。这个标志告诉操作系统绕过页缓存,直接在磁盘和应用程序的内存之间传输数据。对于数据库来说,这显然是一个胜利。然而,对于一个以小块方式顺序读取文件的简单命令行工具来说,使用直接 I/O 将是灾难性的。它会禁用操作系统有益的预读功能,迫使每次小读取都成为一个缓慢、独立的磁盘操作,在 HDD 上尤其致命。是否使用操作系统缓存是一个关键的性能决策,完全取决于应用程序自身的智能程度。
缓存非常有效,甚至在 SSD 内部也被使用。大多数消费级 SSD 使用的是密集且廉价但写入相对较慢的闪存(如 TLC 或 QLC)。为了隐藏这种延迟,制造商会加入少量极其快速但更昂贵的单层单元 (SLC) 闪存,用作写缓存。
当您向驱动器写入数据时,数据首先进入这个快速的 SLC 缓存,操作会很快得到确认。这提供了极佳的突发吞吐量。之后,在空闲时刻,驱动器的控制器会在后台将这些数据从 SLC 缓存迁移到主 TLC/QLC 存储中。这是一个经典的回写 (write-back) 缓存。
然而,如果您一次性写入大量数据,最终会填满 SLC 缓存。此时,驱动器接受新写入的速度不能快于它通过将旧数据转存到较慢的主存储中来释放空间的速度。然后,性能会下降到一个较低的持续吞吐量,受限于新写入请求与后台转存操作之间的竞争。这种简单的内部缓存机制是您在产品评测中看到的性能特征的原因:在一定数据量内有很高的突发速度,随后是较低的稳态速度。
最后,我们必须记住,计算机不仅仅是一个存储设备。它是 CPU、内存、磁盘等组件协同工作的交响曲。如果 CPU 在等待磁盘,那么一个完美调优的磁盘是无用的;如果 CPU 缺乏数据,那么一个快速的 CPU 也是浪费。
系统性能的一个关键是流水线 (pipelining),即重叠不同的工作阶段。使用一种称为双缓冲 (double buffering) 的技术,程序可以使用一个内存缓冲区对已加载的数据块进行计算,而磁盘则同时将下一个数据块读入第二个缓冲区。
在这种重叠的稳态下,总吞吐量不再是 CPU 时间和 I/O 时间的总和,而是受限于两个阶段中较慢的那个——即瓶颈。如果计算一个数据块需要 ,而读取它需要 ,那么系统每 只能处理一个数据块,因为 I/O 单元会提前完成,然后必须等待 CPU。系统受 CPU 限制 (CPU-bound)。相反,如果 CPU 比 I/O 快,系统就会受 I/O 限制 (I/O-bound)。识别并缓解瓶颈是性能调优的核心任务。
这种优美高效的流水线可能会被同步操作所破坏。考虑一组进程,它们都执行一次 CPU 爆发,然后进行一次磁盘 I/O,之后在一个屏障 (barrier) 处等待所有进程完成后再开始下一个周期。
发生的是一种“护航效应 (convoy effect)”。在周期开始时,所有进程都涌向 CPU,导致磁盘空闲。然后,在它们的 CPU 爆发之后,它们又都涌向磁盘,形成一个长长的队列,导致 CPU 空闲。这种走走停停的模式确保了在任何给定时刻,系统资源的很大一部分都处于未使用状态。与 CPU 和 I/O 资源始终繁忙的完美交错、流水线化的工作负载相比,护航效应下的吞吐量可能要低得多。这是一个深刻的教训:如何组织工作与单个工作单元的速度同等重要。
从 HDD 驱动臂的机械之舞到 SSD 闪存通道的并行芭蕾,从操作系统的巧妙缓存技巧到进程的精巧同步,磁盘性能是一个丰富而迷人的领域。这是一个关于工程师和程序员不断寻找新方法来利用和绕过基本物理定律的故事。
我们已经花了一些时间探索磁盘性能的基本原理,剖析了延迟和吞吐量的概念。这些可能看起来像是枯燥的技术细节,只对构建存储设备的工程师有吸引力。但事实远非如此。延迟和带宽这两个数字,就像计算宇宙中的引力常数。它们的影响无处不在,塑造着从您此刻正在使用的操作系统,到处理海量数据集的算法设计,再到推动现代科学前沿的仪器。现在,让我们沿着抽象的阶梯向上,从一个物理组件的微小抖动到科学发现的宏伟挑战,看这些简单的思想如何谱写出一曲隐藏的、复杂而优雅的交响乐。
在我们谈论软件之前,我们必须尊重机器的物理现实。为什么硬盘驱动器 (HDD) 不能瞬间从一个磁道寻道到另一个磁道?答案不在于计算机科学,而在于经典力学。HDD 的驱动臂,它带动读写磁头在旋转的盘片上摆动,是一个物理对象。它有质量,或者更准确地说,有转动惯量。驱动它的音圈电机,在进行微小而精确的移动时,就像一个扭转弹簧,来回拉动它。
当你有一个质量和一个弹簧时,你就得到了一个振荡器。这个驱动臂组件有一个固有频率,即它“想要”振荡的基本速率。如果控制系统试图以比这个频率更快的速度移动驱动臂,它会超出目标,产生振动,并失去精度。因此,HDD 的寻道时间不是一个任意的参数;它从根本上受到支配一个简单旋转惯性-弹簧系统的物理定律的限制。追求更快的寻道时间就是与这些物理约束的直接斗争,是控制理论工程师面临的挑战,他们需要设计出能够在这个机械极限边缘翩翩起舞的系统。
操作系统 (OS) 是总指挥,其主要工作是向应用程序和用户隐藏磁盘 I/O 的残酷缓慢。它通过一系列极其巧妙的技巧来实现这一点,所有这些技巧都围绕着避免或最小化与磁盘的昂贵“对话”这一中心目标而设计。
您的计算机每天的第一个动作就是将操作系统内核从磁盘加载到内存中。在一个动辄数 GB 文件的世界里,即使是内核也可能相当大。为了加速这个过程,内核以压缩格式存储。这带来了一个有趣的权衡。我们是应该使用像 gzip 这样能实现极佳压缩的算法,从而得到一个很小的文件,可以快速从磁盘读取,但 CPU 解压需要相对较长的时间?还是应该使用像 LZ4 这样的现代算法,它可能会产生一个更大的文件(读取时间更长),但解压速度快得惊人?
绝妙的答案是:*这取决于你的磁盘速度!*如果你有一个慢速的老式硬盘,读取更小文件所节省的时间可能值得额外的 CPU 成本。如果你有一个速度飞快的 NVMe 固态驱动器 (SSD),I/O 时间变得如此之小,以至于使用更快的解压算法更好,即使文件稍大一些。我们实际上可以计算出这两种策略达到盈亏平衡的临界磁盘速度,这完美地展示了磁盘速度、CPU 功率和算法选择之间的相互作用。
一旦操作系统运行起来,它如何启动一个大型应用程序——照片编辑器、网页浏览器、视频游戏?一种天真的方法是在应用程序运行之前,将其整个数 GB 大小的程序从磁盘读入内存。考虑到我们讨论过的磁盘访问时间,你将会盯着加载屏幕很长很长时间。
相反,操作系统采用了一种极其“懒惰”的策略,称为按需分页 (demand paging)。它只加载启动应用程序所需的最基本代码。应用程序的其余代码和数据都留在磁盘上,只有当程序首次尝试访问某“页”数据时,操作系统才会去获取它。因为大多数程序在运行的最初几秒内只使用其代码的一小部分,所以这个策略极大地减少了初始启动时间。“积极加载”和“按需分页”之间的性能差异不是一个小优化;它可以是十倍甚至更多,将令人沮丧的等待转变为近乎瞬时的启动——这是通过智能地绕过磁盘 I/O 实现的、面向用户的胜利。
然而,虚拟内存的魔力也有其阴暗面。当你打开太多的浏览器标签页、应用程序和文档,导致物理 RAM 完全占满时,会发生什么?操作系统为了释放内存,会拼命地将最近未使用的页面写出到磁盘上一个称为“交换空间 (swap space)”的特殊区域。
这时,你的电脑会突然感觉像在糖浆里运行一样慢。为什么?因为现在,当一个应用程序需要那些被交换出去的页面之一时,操作系统必须去磁盘检索它。这个事件,一个主缺页错误 (major page fault),会使应用程序戛然而止。总时间变成了程序的 CPU 时间加上所有这些磁盘访问的累积时间。正如我们可以建模的那样,这个 I/O 时间是缺页次数、磁盘延迟及其带宽的函数。感知到的“减速”可能是巨大的,这是内存和磁盘之间性能鸿沟的直接而痛苦的体验。
幸运的是,现代系统还有另一招。操作系统不是将页面写入慢速磁盘,而是可以使用强大的 CPU 来压缩页面,并将其存储在 RAM 的一个特殊的保留区域中。这种技术,见于 zram 或 zswap 等系统,是一种权衡:它消耗 CPU 周期来执行压缩和解压缩,但可以完全避免磁盘 I/O 操作。我们可以推导出算法必须达到的确切压缩比,以使这种权衡成为净收益,即 CPU 成本低于到磁盘的完整往返延迟。这是使用丰富资源(CPU 周期)来克服稀缺资源(I/O 性能)的一个绝佳例子。
虽然操作系统提供了一套合理的通用工具,但一些对性能要求极高的应用程序需要自己动手解决问题。它们是直接与硬件对话的高级用户。
数据库管理系统 (DBMS) 的成败取决于 I/O 性能。对于一个正在对表进行大规模顺序扫描的数据库来说,操作系统将最近读取的数据缓存在“页缓存”中的默认行为可能是一把双刃剑。虽然如果相同的数据很快被再次读取,缓存会有所帮助,但它也带来了成本:每一份数据都首先从磁盘读入操作系统页缓存,然后再次从缓存复制到数据库自己的内存缓冲区。这第二次复制消耗了内存带宽和 CPU 周期。
一个高性能数据库通常比操作系统更了解自己的访问模式。它可能会决定使用像 [O_DIRECT](/sciencepedia/feynman/keyword/o_direct) 这样的特殊标志来完全绕过操作系统缓存。这避免了额外的内存复制,但将缓存和预取的负担完全放在了数据库自己身上。这两种策略之间的选择是复杂的,涉及到数据重用的概率、数据相对于可用内存的大小,以及磁盘和内存总线的相对速度。这是一个量化决策,展示了从硬件中榨取每一滴性能所需的深层次、系统级的思维。
当你需要排序一个几百 GB 大、远超内存容量的文件时,会发生什么?你不能使用标准的内存排序算法。你必须使用*外部排序*算法,这种算法从一开始就是为了最小化磁盘 I/O 而设计的。其核心思想是首先读取适合内存大小的文件块,对它们进行排序,然后将它们作为已排序的“归并段 (run)”写回磁盘。然后,在第二阶段,将这些归并段合并在一起。
整个过程的性能主要由写入磁盘的总数据量决定。为了最小化写入,我们必须最小化合并遍数。这导致了两个关键优化:首先,使用一种称为“置换选择 (replacement selection)”的巧妙技术来创建尽可能长的初始归并段;其次,利用所有可用内存来执行尽可能高“扇入 (fan-in)”的合并(一次合并尽可能多的归并段)。为这种环境设计的算法与其内存中的“表亲”看起来非常不同,这是一个物理约束如何重塑抽象计算过程的绝佳例子。
如果我们既想要 HDD 的巨大容量,又想要 SSD 的速度,我们可以将它们结合起来。考虑一个 RAID 5 阵列,这是一个提供冗余以防止磁盘故障的系统,但它存在“写惩罚 (write penalty)”——一次小的写入操作可能会膨胀为四个独立的磁盘操作(读旧数据、读旧奇偶校验、写新数据、写新奇偶校验)。
现在,让我们用一个快速的 SSD 缓存来作为这个慢速 HDD 阵列的前端。当应用程序写入数据时,我们可以采用两种模式。“直写 (write-through)”策略是安全的:只有当写入操作安全地存放在慢速 HDD 上后,才会得到确认。这种方式很慢,其性能是缓存命中率的概率函数。“回写 (write-back)”策略是快速的:一旦写入命中快速的 SSD,就会得到确认,数据稍后在后台写入 HDD。性能提升是惊人的,因为主机现在只感知到 SSD 的延迟。这种在企业存储中常见的架构,是分层存储的直接应用,即使用少量快速、昂贵的资源来隐藏大量慢速、廉价资源的延迟。
磁盘性能的连锁反应远远超出了数据中心,成为现代科学研究中一个根本性的限制因素。
当科学家模拟黑洞碰撞或建模蛋白质折叠时,他们通常需要求解巨大的线性方程组。对于一个大型稠密矩阵,“直接求解器 (direct solver)”在计算上可能很简单,但它需要访问整个矩阵。如果矩阵太大而无法放入 RAM,算法就变成了“核外 (out-of-core)”算法,这意味着其性能不再受限于 CPU 的浮点运算速度,而是受限于它从磁盘流式传输 PB 级数据的速度。
一种替代方法是“迭代求解器 (iterative solver)”,它从一个猜测值开始并不断优化。对于许多现实世界的问题,矩阵是“稀疏的”(大部分是零)。迭代求解器可以利用这种稀疏性,使用一种完全可以放入 RAM 的压缩格式。它的性能随后受限于 CPU。差异是惊人的。受 I/O 限制的直接求解器一步所需时间与受 CPU 限制的迭代求解器一步所需时间之比可能高达数千万。这揭示了一个深刻的教训:对于大规模科学计算而言,“最佳”算法通常不是理论步骤最少的那个,而是最能尊重机器内存和 I/O 层次结构的那个。
或许最直观的例子来自现代生物学。光片显微镜可以在细胞分辨率下,随时间对发育中的胚胎(如斑马鱼或果蝇)进行 3D 成像。本质上,它是在制作一部生命展开过程的高分辨率电影。这种显微镜中的相机不是每隔几秒拍一张快照;它每秒捕捉数百个高分辨率图像平面。
这就产生了一股数据洪流。我们可以从第一性原理计算出数据吞吐量:图像尺寸、像素深度和帧率相结合,产生一股持续不断的数据流,通常超过每秒一吉比特。挑战不再仅仅是显微镜的光学系统,而是数据管道的工程设计。相机接口(如 USB 或以太网)能否处理这个速率?而且,最关键的是,是否有足够快的存储设备,可以将此数据流写入磁盘而不错过任何一个宝贵的帧?一个标准的硬盘驱动器会完全不堪重负。这项研究依赖于能够持续数小时维持这种写入速度的高性能 SSD。在这里,磁盘性能瓶颈不是一个不便之处;它是我们观察自然世界能力的一个硬性限制。
从微小金属臂的振动,到观察生命本身的显微镜产生的数据洪流,磁盘性能的原理是一条贯穿始终的线索。它们不断提醒我们,我们优雅的软件世界是建立在物理基础之上的,而理解这个基础的局限和可能性,是构建更快、更智能、更强大系统的关键。