
在对更快、更高效计算的不懈追求中,计算机存储器往往是默默无闻的英雄,无声地塑造着我们设备的性能。然而,快速的易失性存储器(如RAM)和慢速的永久性存储(如SSD)之间的传统划分造成了根本性的瓶颈。这一差距限制了从启动时间到数据中心效率的方方面面。本文旨在通过探索新兴存储技术的世界来弥合这一差距。这是一类革命性的设备,有望兼具RAM的速度和存储的持久性。我们将开启一段始于基础物理的旅程,在“原理与机制”一章中探索铁电、磁阻和相变存储器背后的巧妙原理。随后,在“应用与跨学科联系”一章中,我们将看到这些独特的物理特性如何影响整个计算堆栈,迫使我们重新思考从软件算法到系统架构和安全的方方面面。
任何计算机存储器的核心都是一个看似简单的任务:保存“1”或“0”。但这在物理上意味着什么呢?这意味着找到一种材料属性,可以被可靠地设置为两种不同且稳定的状态之一——一个双稳态系统。想象一个简单的电灯开关。它在“开”的位置是稳定的,在“关”的位置也是稳定的;它不喜欢停留在中间。要存储信息,我们需要找到这种开关的微观等效物。新兴存储器的故事是一次进入量子和材料世界的美妙旅程,讲述了物理学家和工程师们如何发现巧妙的方法来创造和操纵这些双稳态。让我们来探索三种最有前途的候选技术背后的原理。
想象一种晶体,即使在没有外部电压的情况下,其正负电荷中心也无法完美重叠。晶体的每个微小单元都变成一个微型电偶极子,就像指南针一样,但作用于电场。在大多数材料中,这些偶极子随机取向,相互抵消。但在一种称为铁电体的特殊材料中,这些偶可被引导对齐,从而产生一个巨大的自发电极化。这种集体对齐可以指向两个相反的方向之一,比如“上”或“下”——这样我们就有了存储“1”和“0”的双稳态系统。
但大自然提出了一个难题。一块所有偶极子都指向“上”的大块材料会在其外部产生一个强大的电场。这个“退极化场”需要巨大的静电能。系统总是寻求更低的能量状态,它找到了一个聪明的解决方案:它作弊了。它不会保持单一的极化状态,而是将自己分裂成一系列称为畴的较小区域,其中极化在“上”和“下”之间交替。
这是一个物理权衡的绝佳例子。在“上”畴和“下”畴之间创建一个边界——即畴壁——需要能量。然而,通过形成这些畴,材料极大地减少了昂贵的长程静电能。系统必须在制造畴壁的成本与减少外部场带来的节省之间取得平衡。这种平衡行为导致了一个平衡状态,其中畴具有特定的特征宽度。对于薄膜而言,这个宽度由畴壁能和退极化能之间的竞争决定,前者倾向于更少(因而更宽)的畴,而后者倾向于更多(因而更窄)的畴以更好地抵消电场。这种优化的结果是,平衡畴宽 与薄膜厚度的平方根成正比——更厚的薄膜可以承受更宽的畴。
我们如何与这些畴相互作用?要“写入”一个比特,我们施加一个强大的外部电场,该电场压倒了材料的内部偏好,迫使所有偶极子按照我们期望的方向对齐。读取则更为巧妙。当我们施加电压时流过的电流与极化变化率直接相关,表示为 ,其中 是电容器的面积。如果我们施加一个电压脉冲将状态设置为“上”,而该比特本来就是“上”,那么极化几乎没有变化,只有微小的电流流过。但如果该比特是“下”,电压将导致极化翻转,引起一个大的变化 。这种翻转会产生一个显著的、可测量的电荷脉冲,流经外部电路。通过对电流进行积分,我们发现总电荷为 。对于从 到 的完全翻转,这个电荷是一个独特的 。通过寻找这个特征性的电荷包,我们就可以确定比特的原始状态。
让我们从电场转向磁场。MRAM的故事始于电子的一个基本属性:自旋。你可以将每个电子想象成一个微小的旋转磁铁。在大多数材料中,这些自旋指向随机方向。但在铁磁材料中,如铁和钴,存在一种强大的量子力学相互作用,导致相邻的自旋对齐,从而产生强大、稳定、宏观的磁化。
现代MRAM的核心是磁隧道结(MTJ)。想象一个三明治结构:一层铁磁体,一个极薄的绝缘势垒(仅几个原子厚!),以及另一层铁磁体。其中一个磁性层的磁化方向被固定——这是参考层。另一层,即自由层,其磁化方向可以被我们翻转。比特存储在这两层磁化方向的相对取向上:磁化方向对齐是平行(P)态,磁化方向相反是反平行(AP)态。
读取这个比特纯粹是一场量子魔术。我们测量当微小电流的电子“隧穿”通过绝缘势垒时的电阻。事实证明,P态和AP态的电阻差异巨大。这种现象被称为隧穿磁阻(TMR)。其根源在于铁磁体电子结构的自旋依赖性。在这些材料中,费米能级(电子的“能量海岸线”)上可用的量子态数量对于“自旋向上”和“自旋向下”的电子是不同的。
让我们跟随一个电子的旅程。在P态下,来自第一层的一个多数自旋电子接近势垒。在另一边,它发现有大量的空置多数自旋态在等待它。路径是清晰的,隧穿很容易。结果是低电阻。然而,在AP态下,来自第一层的同一个多数自旋电子现在面对的是第二层的少数自旋态。可用的空位非常少,造成了量子交通堵塞。隧穿变得困难,电阻很高。这种效应的大小由TMR比率来描述,对于一个简单的模型,可以证明它依赖于材料的自旋极化率 ,公式为 。更高的极化率会在“开”和“关”电阻之间产生更大的差异,使比特更容易读取。
写入比特意味着迫使自由层翻转。但首先,它为什么能保持稳定?答案在于能量景观。使用 Landau 的相变理论框架,我们可以将材料的自由能描述为其磁化强度 的函数。在临界居里温度()以下,这个能量函数看起来像一个双阱势谷。两个最小值对应于稳定的“上”和“下”磁化状态。要翻转比特,我们必须提供足够的能量将系统推过分隔这两个谷的“山丘”,即能垒。这个能垒的高度 决定了比特的热稳定性;更高的能垒意味着比特不太可能因随机热涨落而翻转,从而确保了长期的数据保持性。
要有意地写入一个比特,我们需要一种方法对自由层的磁化施加力矩。
磁学物理充满了这样丰富的动力学。在像“赛道存储器”这样的相关技术中,目标不是翻转一个磁体,而是在纳米线上穿梭整个磁畴。在这里,我们也发现了惊人的物理极限。如果你用磁场过猛地推动一个畴壁,它并不会只是变得更快。超过一个称为Walker速度的临界速度后,稳定的运动会崩溃,畴壁开始翻滚和振荡,反而降低了其平均速度。这种“Walker击穿”源于畴壁内自旋复杂的进动动力学,并对器件设定了基本的速速限制。
我们存储的第三种方法不依赖于电场或磁场,而是依赖于物质本身的结构。某些合金,最著名的是锗-锑-碲(GST)合金,可以以两种不同的固态存在:一种是无序的玻璃态非晶态,另一种是有序的周期性晶态。这两相具有截然不同的性质——非晶态具有高电阻,而晶态具有低电阻。这种差异为我们提供了“0”和“1”。
PCM的艺术在于加热和冷却的精妙舞蹈,这是一个通过精心设计形状的激光脉冲或电流脉冲进行的“原子编排”过程。
结晶化(SET): 要切换到低电阻的晶态,材料会用一个相对较长、中等能量的脉冲进行加热。这个脉冲将温度提高到材料的玻璃化转变温度()以上,但保持在其熔点以下。这就像温和地加热一块冷冻黄油;原子获得足够的能量并被给予足够的时间来摆动和推挤,使自己排列成它们偏好的低能、有序的晶格。这个过程所需的能量是完全可以量化的;例如,我们可以计算出给定波长的光子需要多少个才能提供足够的热能,将PCM纳米颗粒加热到其转变温度。
非晶化(RESET): 要获得高电阻的非晶态,我们必须采取更激烈的方式。材料被一个短而强的能量脉冲冲击,使其完全熔化。然后,能量源被突然关闭。随后的“淬火”——即快速冷却——是如此之快,以至于原子在有机会组织成晶体之前,就被冻结在它们混乱的、类似液体的排列中。
这种使用受控熔化和结晶来切换状态的技术与可重写DVD和蓝光光盘背后的原理相同,现在被微型化以创建高密度、非易失性的电子存储器。
这些新兴存储器独特的物理特性对我们如何设计和使用计算机产生了深远的影响。一个存储设备不是孤立的岛屿;它的特性会向外扩散,影响整个系统。
最关键的挑战之一是耐久性。与传统RAM几乎无限的耐久性不同,许多NVM会磨损。切换的物理行为——翻转极化、强制相变——会造成累积的微观损伤。例如,一个PCM单元可能只能承受几十亿次写入周期后就会失效。虽然这听起来很多,但考虑一下数据库中一个每秒更新数千次的“热点”。如果不采取任何缓解措施,那个单一的存储单元可能在几个月甚至几周内就会失效。这种物理限制需要一种巧妙的软件或硬件解决方案,称为磨损均衡,它像交通控制器一样,智能地将写入操作均匀分布在整个存储芯片上,以确保没有单个单元过早磨损。
写入的能量成本是另一个关键因素。向NVM写入通常比向传统易失性存储器写入要消耗多得多的能量。如果我们天真地使用写通策略,将PCM用作快速处理器缓存,那么每次更改都立即写入NVM,这将是灾难性的低效。一个更好的方法是回写策略。在这里,更改首先被收集在一个小的、低能耗的易失性缓冲区中。只有当这些数据即将被从缓存中驱逐时,最终结果才以一次单一的、整合的操作写入NVM。这种将许多小写入合并为一次大写入的方式,可以将耗电的NVM写入事件数量减少一个数量级或更多,从而极大地节省能量并提高存储器的寿命。
最后,正是这些存储器之所以有用的特性——它们的非易失性——也可能带来新的安全漏洞。例如,MRAM即使在断电时也能保持其磁性状态。这种“剩磁”可以被用于冷启动攻击,攻击者冷冻存储芯片以减缓数据衰减,然后读取其内容,可能暴露如加密密钥之类的敏感信息。防御这种攻击的方法根植于使其成为可能的相同物理学原理。剩余的磁信号会随时间衰减。通过对此衰减和攻击概率进行建模,我们可以设计出一种安全策略,例如定期从内存中刷新密钥。我们甚至可以计算出所需的最小刷新频率,以确保成功攻击的概率保持在可接受的阈值以下,从而将一个物理属性转化为安全方程中的一个参数。
从电子自旋的量子舞蹈到熔化和凝固的热力学,再一直到安全、节能的计算机系统的架构,新兴存储器领域是科学美妙而强大统一性的证明。它向我们展示了对自然基本原理的深刻理解如何使我们能够一次一个比特地构建一个更美好的世界。
在探索了赋予新兴存储器卓越特性的自旋、相变和电阻丝的微观世界之后,你可能会问一个非常实际的问题:那又怎样?我们能用这些新玩具做什么?这是一个绝妙的问题,因为答案揭示了这些技术不仅仅是渐进式的改进——它们不仅仅是用来建造同样老房子的稍好一点的砖块。相反,它们提供了一种根本上全新的材料,一块新的画布,邀请我们——并且在许多情况下,迫使我们——重新思考计算的根本架构。当我们看到这些器件奇特的物理特性如何向上层层影响,从单个算法的设计到整个数据中心的架构时,这门科学的真正美才得以展现。
让我们从最明显、或许也是最令人愉悦的承诺开始:告别等待。我们都感受过计算机启动或大型应用程序加载时的那种熟悉的乏味。这种延迟很大程度上是因为传统存储器,如用于缓存的静态随机存取存储器(SRAM),是易失性的。它是个出色的短跑选手,但它完全失忆。每次你切断电源,它就忘记了它所知道的一切。当系统唤醒时,它的缓存是冷的、空的,迫使处理器缓慢地从慢得多的主存储中获取所有必要的指令和数据。对任何数据的第一次访问总是一次“强制性未命中”——一次缓慢、沉重的仓库之旅。
但如果缓存不必遗忘呢?想象一个由非易失性技术,如自旋转移矩MRAM(STT-MRAM)构建的末级缓存。当你关闭机器电源时,数据仍然存在,安全地嵌套在MRAM单元的磁取向中。重启时,缓存已经是“热”的。处理器需要的大部分数据已经在那儿等着了。那些最初的、缓慢的强制性未命中转变成了闪电般的缓存命中。当然,这并非完美简单;操作系统可能已经移动了东西,一些缓存的数据可能已经过时,需要被丢弃。但即使在考虑了这些必要的整理工作之后,拥有一个持久性缓存所带来的性能增益也是巨大的,可以显著减少启动时间和应用程序启动延迟。这个简单的应用是迈向更宏伟旅程的第一步,这一旅程开始模糊快速、短暂的存储器和慢速、永久的存储之间古老的界线。
几十年来,计算机科学家们为编写高效软件制定了经验法则。一个算法的优雅程度通常由抽象的指标来评判,比如总操作数,而很少考虑操作的类型。但新兴存储器正在颠覆这种传统智慧。“最佳”算法不再是一个普适的真理;它深刻地依赖于其运行所在存储器的物理特性。
考虑相变存储器(PCM)。正如我们所见,从PCM读取相对快速和高效。然而,写入则是另一回事。它需要熔化一小块硫系玻璃并进行淬火,这个过程比读取要慢几个数量级,能耗也更高。这种读写成本之间的鲜明不对称性为软件设计者创造了一套新规则。想象你有两种排序算法。算法A可能遵循经典的“分治”策略,涉及许多中间写入,总写入次数与 成正比。算法B,也许在传统意义上不那么优雅,但其设计旨在最小化数据移动,导致写入次数仅与 成正比。在传统系统上,性能差异可能微不足道。但在基于PCM的机器上,每次写入都带有沉重的能量税,算法B可能会压倒性地优越,仅仅因为它“写入感知”而消耗的功率要少得多。突然之间,程序员必须像物理学家一样思考,不仅要考虑他们代码的逻辑,还要考虑其底层硬件的能量景观。
当我们考虑到持久性的挑战时,软件和硬件之间的这种对话会变得更加深入。数据非易失是一回事,但要确保它已安全写入,能够在突然断电的情况下幸存下来,则是另一回事。为了保证这一点,软件必须发出特殊指令——一个 flush 指令将数据从处理器的缓存推送到持久性存储器,然后是一个 fence 指令以确保该 flush 确实已完成。可以把 fence 看作一个“世界停止”命令:处理器暂停,等待内存控制器确认一切都安全无恙。
这些 fence 指令是一个强大的工具,但在性能方面也极其昂贵。如果一个更新图数据库的程序在每次微小的边修改后都发出一个 fence,系统将会陷入停顿。聪明的解决方案在生活中很常见:不要为每件小事都跑一趟。系统可以批量处理更新,而不是为每个更新单独设置 fence。它将若干更新收集在一个临时的、易失性的缓冲区中,然后一次性将它们全部写入持久性存储器,最后跟上一个单一的、分摊的 fence。这极大地提高了吞吐量。同样的原则也适用于系统层面,例如当直接内存访问(DMA)引擎向NVRAM写入数据时;将许多小的写入合并成一个大的突发写入对于隐藏内存的固定延迟至关重要。当然,这引入了一个权衡:批量越大,如果在批量提交前发生崩溃,丢失的数据就越多。因此,系统设计者必须在性能和最大可接受的潜在数据丢失窗口之间仔细权衡。
批量写入的能力是一种强大的优化,但它仅仅触及了为持久性存储器构建可靠软件这一挑战的皮毛。最根本的问题是原子性问题。现代处理器通常只能保证单个缓存行(例如,字节)的写入是“原子的”——也就是说,在断电事件中,它要么完全完成,要么根本不发生。但如果我们的数据结构,比如说哈希表中的一个条目,比一个缓存行大呢?或者如果更新一个逻辑对象需要修改内存中的两个不同位置呢?如果电源在第一次和第二次写入之间失效,我们的数据就会处于损坏、不一致的状态。
为了防止这种情况,程序员必须采用崩溃一致性协议,这些协议通常改编自数据库领域。一种常见的技术是重做日志(redo logging)。在更改其实际位置的数据(“原位”更新)之前,程序首先将意图更改的记录写入一个单独的日志。只有在日志条目安全地持久化之后,它才执行原位写入。如果发生崩溃,恢复例程可以扫描日志并重新应用(或“重做”)任何未完成的更改。
这提供了安全性,但代价惊人。这个代价被称为写放大。让我们追踪一次对48字节用户数据的单个小更新。首先,程序写入一个80字节的日志条目。因为硬件的原子单元是64字节的缓存行,这个“小”写入实际上强制物理写入了两个完整的缓存行,即 字节。然后,程序更新96字节的哈希桶本身,这又需要两次缓存行写入,即另外的 字节。最后,它写入一个微小的8字节提交标记,这仍然消耗了一整个64字节的缓存行写入。总共,为了逻辑上更新仅仅 字节的数据,我们已经向内存物理写入了 字节!。这种接近 的写放大不仅降低了系统速度,更关键的是,它会更快地磨损内存,因为像PCM和ReRAM这样的技术具有有限的写入耐久性。
显然,我们需要系统各个角落的帮助。这就是工具链——我们的编译器和链接器——可以发挥英雄作用的地方。一个智能的编译器可以分析程序,识别出要写入持久性存储器的操作,并自动重新排列和聚集它们。通过将对同一缓存行的写入组合在一起,它可以消除冗余的物理写入。这种技术,称为写合并,可以显著降低写放大因子,直接提高性能和内存设备的使用寿命,而所有这一切都不需要应用程序员费心。
持久性的影响一直延伸到操作系统,我们软件世界的基石。操作系统管理着一个至关重要的数据结构,称为页表,它将程序使用的虚拟内存地址转换为硬件的物理地址。如果这个页表驻留在持久性存储器中,它也必须是崩溃一致的。操作系统设计者随后必须在不同的一致性机制之间评估复杂的权衡,例如日志记录(记录更改)与影子复制(创建一个带有更改的全新副本,然后原子地切换指针指向它)。每种策略都有不同的性能开销,以完成存储、刷新和屏障等复杂操作所需的数百个处理器周期来衡量。
我们已经看到,没有哪一种单一的存储技术是万能的银弹。DRAM速度快但易失且耗电。MRAM提供出色的速度和耐久性,但密度较低。PCM密度极高,非常适合大容量存储,但写入速度慢、能耗高且耐久性较低。ReRAM则处于中间地带。
那么,为什么只选择一种呢?高性能计算的未来不是单一的,而是一场异构的交响乐。最复杂的系统将由多层不同技术的存储层次结构构成,为系统架构师提供了一系列选择。于是,宏大的挑战就变成了一个布局问题:哪些数据应该放在哪个层级?
答案再次在于理解工作负载。频繁写入的数据不适合PCM,但可能非常适合DRAM或耐久性强的MRAM。主要被读取的数据,如大型静态数据库,可以非常经济高效地存储在高密度PCM上。一个智能的运行时系统可以分析不同数据块的读/写比率,并将它们迁移到最合适的层级,从而动态优化整个系统以获得最大吞吐量。
我们甚至可以设想能够自行学习和适应的系统。随着工作负载随时间变化,它们的内存访问模式也会改变。这为控制理论和人工智能领域开辟了有趣的联系。人们可以设计一个智能软件代理,也许使用强化学习,它不断监控访问模式并做出动态分层决策。它的“状态”可能包括数据块的访问频率和写入强度,其“奖励”函数将被设计为惩罚高延迟、过度能耗和设备磨损。这样的系统将随着时间的推移,学会针对任何给定工作负载的最佳布局策略,成为一个自我优化的内存管理器。
最终,设计一个现代存储系统是一个优美的、多变量的优化问题。架构师面对一组组件,每个组件都具有独特的延迟、能耗和耐久性特征。然后,他们必须将这些组件组装成一个连贯的系统,并根据一个权衡这些竞争因素的成本函数来评估它。“最佳”设计并非绝对;它完全取决于系统的目标。移动设备可能会优先考虑低能耗以最大化电池寿命,而科学计算集群可能会将原始速度置于一切之上。通过将每种技术的物理特性代入一个整体模型,架构师可以探索这个广阔的设计空间,并找到能够为他们的特定需求达到完美平衡的配置。
从即时启动笔记本电脑的简单便利,到分层数据中心的复杂AI驱动管理,新兴存储技术是整个技术栈创新的催化剂。它们挑战我们旧有的假设,并以一种更丰富、更细致、最终更强大的方式回报我们,以构建未来的计算机。