原创:中科院物理所

  存储芯片涨价涨疯了…

  HBM被英伟达的GPU吃到断货,连带着普通DDR5也水涨船高,一条32GB的内存条破了千。长鑫存储IPO的消息在科技版刷了好几天屏,市值冲到让人看不懂的数字。(不构成任何投资建议)

  小编本来想给手里的笔记本换个新内存条,看了一眼价格,默默退出了购物车。

  真的装不起电脑了.jpg

  但是等等,涨价的事先放一边。

  小编突然想到一个问题:你电脑里那根插在主板上的内存条,到底凭什么能"记住" alt="500" />

  这个问题如果往前追溯七十年,答案会让你非常意外。

  计算机的存储可以看成一个金字塔结构。塔尖是寄存器,几纳秒读写一次,容量几百字节。往下一层是CPU缓存(SRAM),读写时间几十纳秒,容量几MB。再往下是咱们熟悉的内存,几十到几百纳秒,几到几十GB。塔底是SSD和HHD,慢了几千倍,容量也大了几千倍。

  又快又大的存储器不存在。你只能在速度、容量和成本之间做取舍。

  但如果把时钟拨回1950年代初,让计算机记住哪怕几千个bit,是一个差点逼疯一代工程师的难题。

  图1 计算机存储金字塔示意图

  先来说说最早的两个方案。

  一个叫做水银延迟线。往一根玻璃管里灌满水银,一端用石英晶体发射超声波脉冲,声波在水银里(声速大概1450米每秒)慢悠悠走到另一端,被接收放大后再送回发射端[1]。超声波承载的数据就这么在水银里一圈一圈转。一根一米长的管子大概能存一千个脉冲。想读某个bit?不好意思,等它转完一圈走到你面前再说。

  图2 伦敦科学博物馆收藏的EDSAC的水银延迟线

  更让人头大的是声速对温度极其敏感。室温波动一摄氏度,时钟频率就得跟着调。而且水银有毒。空调还没普及的年代,几十公斤液态水银在机房里晃荡,今天的安全监察员听了大概会当场昏过去。UNIVAC I是早期使用水银延迟线的著名计算机之一,它的内存子系统大到人可以直接走进去[1]。

  另一个方案叫Williams管,是1946年英国人Freddie Williams和Tom Kilburn在曼彻斯特大学发明的[2]。往CRT屏幕(阴极射线管,老式电视的显像管就是这个东西)上打一束电子,屏幕表面会形成一个微小的电荷斑。这个电荷斑就给了我们编码空间,有电荷斑记为1,没有记为0。

  图3 Williams管打出的存储图样

  图4 IBM701计算机用的Williams管

  但电荷几毫秒就漏光了,想要持续存储数据得不间断刷新。而且这东西对电场极其敏感。1948年6月,曼彻斯特大学用Williams管造了世界上第一台存储程序计算机"曼彻斯特Baby",内存正好1024 bit[2]。运行的时候整个实验团队恨不得保持绝对静止。(隔壁:我就开个风扇,你程序怎么崩了)

  就在工程师们被这些奇葩存储方案折磨得死去活来的时候,一个从上海来的年轻人在哈佛的实验室里搞出了另一种思路。

  图5 王安(An Wang)

  王安,1920年出生在上海,1940年上海交大电机系毕业,1945年赴美,三年后在哈佛拿到应用物理博士。他博士论文做的是非线性力学,跟计算机八竿子打不着。[3] 但毕业后他留在哈佛跟着计算机先驱Howard Aiken做Mark IV,一台全电子管的巨型机。

  当时计算机存储是整套系统里最拖后腿的部件。Aiken的上一代Mark III还在用磁鼓:一个表面镀有磁性涂层的大金属筒,靠机械旋转读写,又慢又不可靠。Mark III于1949年建成,用了九个磁鼓,总存储量4350个字节,重10吨。Aiken自己都承认它是"世界上最慢的电子计算机"[4]。王安被分配去解决这个存储问题。

  图6 ERA生产的磁鼓存储器

  他的思路很直接。用一个小小的磁性圆环来存一个bit。磁性材料磁化之后能保持磁化方向,断了电也不会影响磁化。这简直就是天然的0和1[5]。

  虽然想法简单,但是真的做起来的时候到处都是麻烦。最主要的一个就是,小磁环组成阵列时,必定会互相产生影响,这就会影响读写数据。1949年王安和同学Way-Dong Woo一起拿到了"脉冲传输控制装置"专利,解决了它[6]。1955年IBM掏50万美元买下这个专利,折合今天大概580万刀[3]。这笔钱后来成了王安创业的第一桶金,他拿它创办了王安实验室,做文字处理机一度做到和IBM正面竞争——那是另一个故事了。

  真正把磁芯存储器从实验室变成产品的人是MIT的Jay Forrester。

  图7 Whirlwind计算机

  Forrester当时在做一个叫Whirlwind的项目,世界上第一台实时交互的电子数字计算机。美国海军为了最先进的飞行模拟器立了这个项目,要求是飞行员在模拟舱里操作,计算机同步算出来飞机的动态响应。这个需求导致Whirlwind必须实时跑,不能像当时别的计算机那样慢悠悠吃完一摞打孔卡再吐结果[7]。Forrester发现市面上绝大多数的方案都无法实现这个要求,直到他看到王安的专利,他如获至宝,随后在王安工作的基础上搞出了"重合电流法"[5][7]。

  1953年,Whirlwind装上磁芯存储器,稳定性提了几个数量级。计算机第一次有了一种真正可用的随机存取存储器。Forrester在1951年发表的论文中详细描述了这项技术[8]。

  下面来聊聊技术细节,磁芯存储器到底是怎么存一个bit的?

  图8 磁芯存储器的核心:铁氧体磁环

  核心单元是一个直径不到两毫米的铁氧体小环。铁氧体是磁性陶瓷,由氧化铁和锰、锌等金属氧化物高温烧结而成,不导电但能被磁化[5]。它的磁滞回线接近矩形:你给它通一下电,它就磁化;断了电,磁化方向纹丝不动。这个特性叫剩磁,铁氧体的剩磁可以保持几十年。更重要的是,在设计中小磁环的磁化方向是顺时针和逆时针,闭合的磁路导致磁性几乎不外泄,因此可以把阵列排的非常密。

  图9 铁氧体的矩形磁滞回线示意图

  但一块板子上有好几千个磁芯。怎么才能精准选中其中一个来读写,还不碰到旁边的?我们毕竟不能给每个磁芯单独拉根线。

  Forrester的重合电流法是这么搞的:在每个磁芯中穿X和Y两根地址线。要访问第3行第5列那个磁芯,在X3线上通强度略超翻转阈值一半的电流,Y5线上也通同样。单走一根线的电流不够翻转,因此这条线上的所有磁芯都不受影响。但在交叉点上,两股电流叠加,磁场强度瞬间超过阈值,这样就实现了针对某一磁芯的操作[8]。

  (这个方案妙就妙在把"选地址"这个看似需要无数根独立导线的问题,变成了一个简单的二维矩阵。)

  图10 重合电流法原理图

  第三根是读出线S,蛇形穿过整块板上所有磁芯。被选中的磁芯翻转时,由于磁通量变化,读出线上会感应出一个微弱的电压脉冲。有脉冲说明刚才翻转的磁芯原本存储的数据是1,没脉冲则是0[5]。这个读出操作有一个代价:会破坏数据。不管原来是0还是1,读完之后统统变成0。所以每次读出之后必须马上把原值写回去。这个读-改-写循环是磁芯存储器的核心操作,一次完整读写大概需要几微秒。以今天的标准看慢得离谱,但放在1953年,这简直是奇迹[8]。

  第四根叫禁止线Z,写操作时如果你想往某位置写0,就在禁止线上通一个反向小电流,抵消掉一部分X和Y的电流,让磁芯磁化方向不翻转[5]。

  四根线,一个小磁环,共同组成一个可选取,可独立读写的物理bit。很优雅对吧?那你猜猜,谁来穿这些线?

  图11 女工手工穿制磁芯存储器

  人工。纯手工。

  每个小磁环上的四根导线,大部分是女工在显微镜下用镊子和针一根一根穿的。导线比头发丝还细,磁环的孔径不到两毫米。一块标准64×64存储板有4096个磁芯。四根线穿一个,总共16384次穿线。一次穿孔穿歪、张力不匀、或者线拉断了,都可能导致整块板报废。由于物理空间限制,多块存储板堆叠起来才能构成一个完整存储模块。一个16层32×32的阵列,16384个bit,刚刚好2KB[5],不到一张微信表情包的大小。

  图12 极小的磁芯组成的存储芯片

  这些女工有个专门的名字,磁芯编织工(core stack weavers)。她们大多在东南亚和加勒比海地区的工厂。到1960年代,光香港一地就有上万个女工在干这个[5][9]。一个几十亿美元的产业,靠的是几十万双纤细的手在显微镜前撑起来的。

  但你别说,手工编织的磁芯存储器质量好得离谱。它不怕断电,不怕震动,不怕辐射。这在今天的消费者看来简直是黑魔法,我们已经习惯了DRAM一断电就什么东西都忘光。突然停电你正在写的文档怎么办?如果没有自动保存的话什么都没了。但磁芯存储器里的数据,来电之后还在那里。这就是磁环作为非易失性存储器件的特别之处。

  图13 SAGE防空系统控制室,使用AN/FSQ-7计算机

  美国空军在1950年代搞了个叫SAGE的防空系统,核心计算机AN/FSQ-7重达250吨,用了近五万个真空管,大片的磁芯存储器,横跨北美大陆几十个雷达站全天候联网运行。这东西几乎没停过机,靠的就是磁芯的可靠性[7][10]。

  不过小编觉得最震撼的应用不在地面上。

  阿波罗飞船的制导计算机(AGC),登月舱和指令舱里面各有一台。它的RAM也是磁芯存储器,大小是2048个16-bit,满打满算4KB[11]。你手机里随便一张照片都比这个大几千倍。

  图14 阿波罗制导计算机(AGC)和DSKY显示键盘

  AGC的程序不是存在RAM里的,是存在一种叫"磁芯绳存储器"(core rope memory)的ROM里。这玩意儿编码bit的方式极其硬核:一根导线如果从磁芯孔中间穿过去,这个bit是1;从磁芯外面绕过去,就是0。程序是物理上"编织"进硬件的,出厂之后不可能改哪怕一个bit[11]。

  图15 阿波罗的磁芯存储器

  某种意义上,这是人类历史上最不可破解的软件。想改程序得先找到那块ROM,把线拆了重新穿一遍。

  雷神公司(Raytheon)的女工把阿波罗的导航程序一针一线穿进了磁芯绳。她们大概率不知道,自己穿过的每一根导线,对应的都是飞船穿越地月空间的一条具体指令。

  阿波罗11号登月的时候,AGC的RAM是4KB(2048个16-bit),ROM大约72KB(36864个16-bit),处理器主频2.048MHz[11]。我们目前的手机主频大约3GHz,比当年的处理器快1500倍。微信一个安装包400MB,是AGC总容量的6000倍。

  4KB内存+2MHz主频的CPU,把三个人送上月球,又安全带回了地球。

  磁芯存储器统治了计算机领域二十年。从1955年到1975年,IBM 704、709、System/360,DEC的PDP-8、PDP-11,全用过它[5][12]。土星五号火箭1976年还在用磁芯。B-52轰炸机的航电系统更夸张,一些子系统一路撑到1990年代(原因不是磁芯有什么不可替代的优势,而是重新认证一套新航电系统太贵了,军方懒得换)[13]。

  但它最后还是被另一种技术取代了。

  1966年,IBM的Robert Dennard发明了动态随机存储器(Dynamic Random Access Memory,DRAM)。原理更加简单直接:一个晶体管加一个微型电容,存一个bit。电容里有电荷记为1,没电荷记为0。由于电容会漏电,要保证数据连续就需要隔几毫秒刷新一次[14]。

  DRAM的优势太明显了。光刻工艺在硅晶圆上就可以批量印刷DRAM芯片,一片晶圆一次做几万个存储单元,人手碰都不用碰。同时它还完美搭上了摩尔定律的便车:晶体管每两年缩小一倍,同样面积能塞的bit数翻倍。磁芯不行,缩小到一定程度人手就穿不了线了,设计对应的机械也非常困难[5][14]。

  图16 Intel的第一款商用DRAM芯片1103

  此外DRAM的成本更是远低于磁芯。1970年Intel推出了第一颗商用DRAM芯片1103,容量1K bit,每个bit一美分。到1974年,DRAM的bit单位价格已经比磁芯低了[15]。

  1974年到1978年的短短四年时间中,手工编织磁芯的产业几乎完全消失。最后一条大规模产线1978年正式关闭[5],磁芯存储从此从计算机中走进了博物馆。

  故事到这里好像就该结束了。但小编想讲最后一个细节。

  今天的Unix和Linux系统里,程序崩溃时产生的内存转储文件叫core dump。为什么叫这个名字?core就是磁芯的英文,dump是把内存倾倒出来[16]。

  你电脑上早没有半个磁芯了。DDR5内存条上的一颗DRAM芯片塞了几十亿个晶体管。但这个四十多年前的名字还在,嵌在操作系统内核代码的注释里,印在程序员面试的八股文里,出现在你电脑蓝屏之后那个神秘的.dmp文件后缀里。

  小编写这篇文章的时候又看了眼内存条价格,两眼一黑。但转念一想:按每个bit算,1955年磁芯存储器一个bit要好几美元,现在DDR5一个bit的成本不到千万分之一美分[5][15]。

  我们在抱怨的东西,比七十年前便宜了几十亿倍。

  仔细想想,这件事就挺魔幻的。

  (看完还是想吐槽内存条价格涨上天?小编陪你一起,因为小编也买不起内存条QAQ。)

  参考文献

  [1] J. P. Eckert et al., "Mercury Delay Line Memory with Megacycle Pulse Rate", Proceedings of the IRE, 37(8), pp. 855-861, 1949.

  [2] S. H. Lavington, "The Manchester Mark 1 and Atlas: A Historical Perspective", Communications of the ACM, 21(1), pp. 4-12, 1978.

  [3] An Wang with Eugene Linden, Lessons: An Autobiography, Da Capo Press, 1986.

  [4] Staff of the Computation Laboratory, "Description of a Magnetic Drum Calculator", Annals of the Computation Laboratory of Harvard University, Vol. XXV, Harvard University Press, 1952.

  [5] J. W. Forrester, "Digital Information Storage in Three Dimensions Using Magnetic Cores", Journal of Applied Physics, 22(1), pp. 44-48, 1951; M. R. Williams, A History of Computing Technology, 2nd ed., IEEE Computer Society Press, 1997, Chapter 8.

  [6] An Wang, U.S. Patent 2,708,722, "Pulse Transfer Controlling Device", filed October 21, 1949, issued May 17, 1955.

  [7] Kent C. Redmond & Thomas M. Smith, Project Whirlwind: The History of a Pioneer Computer, Digital Press, Bedford, MA, 1980.

  [8] J. W. Forrester, "Digital Information Storage in Three Dimensions Using Magnetic Cores", Journal of Applied Physics, 22(1), pp. 44-48, 1951.

  [9] Computer History Museum, "Timeline of Computer History: Memory & Storage", https://www.computerhistory.org/timeline/memory-storage/; IBM, "Magnetic Core Memory", IBM Archives, https://www.ibm.com/history/core-memory.

  [10] Bernd Ulmann, AN/FSQ-7: The Computer that Shaped the Cold War, De Gruyter, 2014.

  [11] Eldon C. Hall, Journey to the Moon: The History of the Apollo Guidance Computer, American Institute of Aeronautics and Astronautics (AIAA), 1996.

  [12] Emerson W. Pugh, Lyle R. Johnson & John H. Palmer, IBM's 360 and Early 370 Systems, MIT Press, 1991.

  [13] D. P. Stormont & R. Welgan, "Risk Management for the B-1B Computer Upgrade", Proceedings of the IEEE 1994 National Aerospace and Electronics Conference (NAECON), pp. 1143-1149, 1994.

  [14] Robert H. Dennard, U.S. Patent 3,387,286, "Field-effect Transistor Memory", filed July 14, 1967, issued June 4, 1968.

  [15] Intel Corporation, "The Story of the Intel 1103 DRAM", Intel Museum, https://www.intel.com/content/www/us/en/history/museum-story-of-intel-1103.html.

  [16] Eric S. Raymond (ed.), The Jargon File, version 4.4.8, 2004, entry: "core dump". http://www.catb.org/jargon/html/C/core-dump.html

  [17] Massachusetts Institute of Technology, "Magnetic Core Memory", MIT 6.933 Course Project, https://web.mit.edu/6.933/www/core.html.

  [18] Computer History Museum, "Revolution: Magnetic Core Memory", https://www.computerhistory.org/revolution/memory-storage/8/253.

  [19] National High Magnetic Field Laboratory, "Magnetic Core Memory Interactive Tutorial", https://nationalmaglab.org/magnet-academy/watch-play/interactive-tutorials/magnetic-core-memory.

  [20] M. R. Williams, A History of Computing Technology, 2nd ed., IEEE Computer Society Press, 1997.

  编辑:K.Collider