前年的Computex展上,AMD曾经演示过一段画面demo,对比Radeon RX 5700系列和英伟达的Geforce 2080 Ti,宣称画面与性能大胜。当时这个演示是引起了不小的争议的,该场景表达的是带宽对于游戏的影响。但实际上,在现实世界的游戏作品中,几乎不存在这种类型的负载。事实真的如此吗?
当时的这段演示,可能已经在预示“存储”的未来,对于游戏行业接下来持续数十年的影响了。
似乎在当代PC领域,配SSD固态硬盘是个日常——都什么年代了,还谈SSD固态硬盘是HDD机械硬盘的未来?PC游戏自然也应该在“享用”SSD带来的速度优势吧?
但在次世代游戏主机领域,高速SSD的采用算是个新鲜事,或者说至少以前SSD在游戏主机领域并不太受待见——索尼PS5和微软Xbox Series X终于“不约而同”地用上了SSD,而且是NVMe SSD。因为事实上,对传统生态的游戏主机而言,硬盘速度或许真的没那么重要,容量才是关键。对于单游戏动辄10GB+的容量,以及游戏主机需考虑成本问题的现状而言,开发者们总在想方设法降低硬盘性能对于实际游戏体验的影响。
从最直接的角度来思考,换个SSD似乎也不是什么大不了的事情,不就读写快点儿吗?快又能快到哪儿去?游戏里屏幕上需加载和待加载的元素,不都是放在RAM里面的吗?换个SSD,游戏体验就大不同了?
或许SSD在游戏主机上采用的开始,乃是改写游戏行业历史的序章。本文就从较浅层的技术角度来谈谈,SSD对于游戏界究竟产生了多大的影响。
换用SSD的PS和Xbox
从纸面数字来看,微软Xbox Series X用了总容量1TB的NVMe SSD固态硬盘,顺序读取速度为2.4GB/s。这对SSD而言算不上什么惊艳数字;虽然已经比机械硬盘快10-20倍了,但在PC平台也就是个入门水平。而索尼PS5的SSD总容量825GB,顺序读取速度5.5GB/s(PS4是50-100MB/s),接口PCIe 4.0 x4,通道数是12个——这就有点儿高端的意思了。
不过换用SSD究竟有什么用呢?5.5GB/s的顺序读取,在RAM速度面前,起码有几十倍甚至上百倍的差距。硬盘和内存介质仍然不是一个世界的东西,PS5不照样配备16GB GDDR6吗?
先来看看微软这边,微软在Xbox存储相关的技术表达上,引入了一种“Xbox Velocity Architecture”架构。这个市场宣传词,在微软的定义下包含了4个组成部分,分别是SSD固态硬盘本身、压缩引擎、用于访问存储的软件API,以及名为Sampler Feedback Streaming的硬件特性(一种GPU特性,可提高纹理利用效率:哪些数据可以从RAM中移除,并判断下一步要加载哪些数据到RAM)。
就Xbox Velocity Architecture的这几个构成而言,很难看出什么爆炸性突破,至少就微软公布的信息来看是如此。
虚幻5引擎演示的图形计算画面
索尼PS5相对复杂,去年索尼在介绍PS5时,花了1/3的时间专门介绍PS5的存储系统。这表明SSD在PS5之上的分量不轻。去年EPIC在虚幻5引擎的技术演示中强调,演示中那些令人叹为观止的效果都需依赖PS5的高速SSD。虽说这其中多少有索尼和EPIC底层合作的成分在,但技术本身不应被轻易否定。有关PS5的SSD及相关的存储架构,后文会详述。
SSD的高带宽,和数据压缩
从直觉来看,换用SSD的最大价值,应该在于启动游戏、加载场景会更快。这的确是这代游戏主机的提升所在。下面这张图来自tom's GUIDE的PS5评测文章,是PS5与PS4两代机型的不同游戏加载时间对比:
来源:tom’s GUIDE
部分游戏的差异在这里还是相当显著的。像《蜘蛛侠:迈尔斯·莫拉莱斯》这样的游戏,“在home页面选择游戏,到角色出现在大街上开始打怪,几乎是0时间差”。 Android Authority在PS5体验文章中提到,“所有PS5游戏的加载页过渡时间都在10秒以下,更多的是在3-4秒”,甚至因为加载页面时间过短,连页面上的那些文字提示都看不全,“不过这也是值得的”。
索尼宣称,2GB数据加载时间只需要0.27秒——在PS4时代,1GB数据从硬盘加载完成需要20秒。但如果只是游戏启动、场景过渡加载时间变短,那么SSD实在没什么可大书特书的。毕竟这本来就是SSD相比HDD的优势,更不用说什么“革新”游戏行业。
GPU在数据吞吐方面的努力上一直没停过。当代GPU越来越多的开始引入一些专用单元,比如Turing架构针对光线追踪特别引入了RT核心与Tensor核心。在存储架构方面,当代GPU普遍都有专门的数据压缩单元。
数据压缩的价值在于,将数据体积压缩得更小之后(典型的比如纹理数据),再传输到内存或者cache之上,减少数据传输量,因此也就增大了带宽。不过一般来说,数据解压过程是需要CPU进行的,软解的效率并不高。
Xbox Series X和PS5都在数据压缩和解压方面做了文章。SoC的I/O模块部分都有专门的数据解压缩硬件单元。实际上先前的游戏主机就有这样的特性,只不过存储介质不是以SSD的方式存在的。微软着眼于纹理数据压缩,因为纹理数据占到游戏数据读取与解压最大的比例,纹理压缩算法名为BCPack。索尼除了Zlib之外,采用一种名为Kraken的格式。
索尼宣称,其解压缩硬件能够将SSD之上5.5GB/s的数据流,解压缩为8-9GB/s的数据。在压缩效率最理想的情况下,理论最高输出率是22GB/s。这个量级很大程度上也是基于其NVMe SSD。这样的专用硬件,极大缓解了CPU的压力。索尼宣称,这种专用解压单元,在解压能力上相当于9个Zen 2处理器。
越来越多专用单元的出现,也是通用计算领域向前发展的一种共识了。而且索尼自PS3时代的CELL处理器开始,就有一个坚持:数据传输的高带宽、低延迟,比处理器本身的算力重要。近代GPU的发展路径里,这的确也是英伟达与AMD的共识;而从系统层面,将其扩展到外存,又是这一理念的延伸。
所以这有什么用?
说来说去,难道还是游戏启动和场景加载更快而已吗?PC界早就证明了,提升硬盘的速度并不会对游戏性能和体验造成什么实质上的提升。毕竟从直觉上来看,存储不能提升游戏画质和帧率。一般游戏,玩家看到或即将看到的画面资源都是放在RAM中的。
实际情况是,基于PC世界木桶短板原则,游戏开发者极大程度受制于PC大环境的平均配置,而想尽办法从游戏开发层面,试图向玩家隐藏存储系统的短板。
但游戏主机有着相对单一的开发目标,硬件限制、开发环境都大致稳定。在主要游戏主机开始采用SSD之后,开发者们(或者生态)就该思考如何充分利用明显更快速的存储硬件了。所以前文也提到了微软Xbox Velocity Architecture的新API。
索尼在这代主机上,虽然纯看算力及RAM层面的效率是不及Xbox Series X的,但它针对SSD存储的变革决心却相当之大。PS5平台之下新的I/O API,可让开发者去利用新的SSD及存储架构。
在新的开发生态中,文件名、路径的概念不再,取而代之的是一种基于ID的系统——以最快的速度告诉系统从哪里去找数据。开发者只需要指定ID,开始位置、结束位置;整个IO流程一步完成,不需要应用去操心内存数据解压、重新安置的问题。毫秒级延迟后,就能在单帧处理时间内请求获取到数据——早年的HDD,这个流程需要耗时最多250ms。
去年3月份,PS5系统架构师Mark Cerny举过一个例子。“某个敌人在游戏中死去时,会最后叫出声,这种数据需要有高优先级来获取。但可能因为流水线中其他的游戏与操作请求,数据仍要等250ms才能拿到。”“而死亡、哀嚎,是需要同步发生的。在PS4,同类问题就要求把大量数据都必须放到RAM上。”虽然个人觉得这个例子可能并不恰当,不过高速SSD的存在,某种程度转移了RAM的负担。
这种“转移”可能体现在多个方面。比如说开放世界游戏,通常这种游戏需要限制玩家的移动速度,或者游戏环境没有那么细致。因为RAM资源是有限的,游戏只能过着紧巴巴的日子,必要的资源才放进去。要是玩家移动太快、画面太细致,资源都来不及加载。但在有了高速SSD(和对应的I/O架构)之后,开发者就得到了极大程度的自由。
这个自由当然不是说用SSD来替代RAM,而是体现在working set上——即每次有多少内存是真正当下就使用的(即现在就显示在游戏画面中的)。在高速SSD的加持下,游戏就没那么迫切的要求去预取(prefetch)数据。
比如一个游戏中,相同房间内某个对象的贴图,如果现在并不在游戏画面内(不显示在屏幕上,而是在屏幕之外),那么或许将其放到SSD上(而不是RAM上)问题也没那么大,等到玩家视角开始向该对象的方向移动时,再加载也不迟。过去HDD时代是不能这么做的,通常整个房间、甚至相邻房间的数据都必须放在RAM里,否则游戏体验就是悲剧。
有了SSD,一部分RAM就能释放出来,这些RAM可用于存放更高品质的资源,屏幕上显示的当前画面也能够更好。或者应该是“变革”的核心所在。Mark Cerny提到,游戏只需要大约提前1秒做预取工作(而不是PS4时代的30秒),这是高带宽、低延迟SSD能够带来的重要价值。
Mark Cerny原话说:“玩家在游戏中转个身,SSD如果足够快,快到立马就可加载纹理如何?如果转身0.5秒,也就是加载4GB的压缩数据。”这可能是虚幻5引擎演示基于PS5的某种依据,也会成为革新游戏主机平台游戏开发的开始。
SSD给游戏机带来的其他变化
以前的很多游戏,开发者为了解决慢速存储的限制问题,通常会采用很多策略。比如说场景间过渡,搞个楼层间电梯:玩家在乘坐电梯的时候,实际上就是数据在忙碌加载的过程;再比如在某些过渡场景,限制玩家视野(比如搞个狭窄的山洞或通道)。将来,这些可能都不再需要了。
前面这些至少对于游戏玩家而言,是能够看得见、摸得着(可能摸不着)的革新,包括游戏启动、画面加载时间显著缩短,游戏画面可以更细致,对玩家的限制更少,甚至可能带来更多的玩法。比如说开放世界中,更快的竞速游戏体验;或者从天文星球级别,可将画面无缝、快速放大至分子级别;以及更多现在我们暂时没想到的游戏方式。
高速SSD及周边存储与I/O架构还带来了一些相对隐性的价值。比如说游戏体积可以做得更小。游戏主机的HDD时代,开发者为了减小硬盘寻道时间带来的影响,某一个场景显示所需的数据,通常都会存储在连续的硬盘块区域上,这样就能减少数据寻道操作了。
不过某些对象可能会在不同的场景里反复出现,那么这些对象就会重复存储在各种连续的硬盘块区域。除了贴图,也包括声音、模型等——这叫duplication。比如城市场景中的垃圾袋,可能1.6MB空间占用,如果一个城市里600个街区都有这么个垃圾袋,那就比较悲剧了。游戏在硬盘中所占的空间就会很大。某些游戏开发者对此当然有缓解方案,比如《蜘蛛侠》,不过是以RAM用量为代价的。
高速SSD存在以后,duplication就很大程度上不怎么需要了。SSD带来的同类价值还有比如说,HDD存在“碎片化”问题,早年Windows就有“整理硬盘碎片”这种功能;在SSD之下,开发者不需要在意数据的物理空间问题,游戏不需要在更新过后进行这种操作。还有包括游戏保存操作,可快速完成游戏进度的大批量数据的存储,关机前也不用等待了。
只是以上这些“隐性”提升,PC游戏玩家应该早就享受到了,所以它们实在算不上“革命”性,对游戏体验的影响也都不大。
推及整个游戏行业
索尼和微软在游戏主机与平台的缔造理念上差别还是比较大的。微软更多在想的是与PC平台划一,而索尼则期望引导开发者走他们设想中的路子。起码在这代游戏机上,索尼对存储系统投入的精力是显著大于微软的,也希望开发者未来能够充分利用高速SSD。
这种思路对于整个游戏行业,包括PC游戏,开发方式的转变会是显著的。虽然微软没有过多透露Xbox Series X的存储系统相关信息,但微软有计划将DirectStorage API带到Windows平台。
另一方面,AMD作为跨游戏主机和PC两个平台的芯片制造商,也切切实实影响到了未来这两个平台的游戏相关硬件技术走向——SSD在游戏上发挥作用与AMD也有很大关系,这一点将在本文的扩展阅读中提到。如此一来,SSD本身可能才真正开始逐步惠及整个游戏市场,而不只是一些不痛不痒的小变化。更多充分利用SSD特性的开发成果也才会出现。
当然游戏主机换用高速读取SSD也带来了一些问题。其中最大的问题恐怕在于,825GB的容量有些捉急,实际可用空间667GiB左右。当游戏以百GB级别存在时,这点容量实在不够看。索尼去年虽有提到可支持扩展三方SSD,不过现有PC级别的M.2 PCIe 4.0固态硬盘是真的不便宜,而且还必须够上PS5原硬盘5.5GB/s的规格。索尼似乎到现在也没有公布支持扩容的第三方SSD究竟有哪些。
与此同时,从索尼的介绍来看,与其高速SSD相关的存储I/O架构还挺复杂,起码其定制化程度尤甚。比如说为了减少延迟,索尼针对SSD的I/O命令,搞了一套6种优先级的定制化特性,而NVMe标准本身的优先级特性没这么多。索尼的定制I/O单元虽然可以处理这个问题,但需要额外的开销。
不过总得来说,这些在开发变迁的过程中,始终都算是小问题。无论如何,未来主机游戏,乃至PC游戏的走向大约都将因SSD产生真正的变化,这是以前PC广泛应用SSD未能达到的。
PS5的存储相关架构(选读)
去年索尼公布PS5的配置以后,玩家们的争议还是颇大的。尤其是PS5在算力、RAM配置上不及Xbox Series X,还有像动态频率、图形计算特性缺失等问题。SSD高速I/O事实上也成为一部分人的黑点,认为索尼完全搞错了路子,甚至说PS5已经有当年惨败的PS3的影子了。
起码个人认为,PS5的其他组成部分虽不理想,但其存储与I/O方面的探索是有价值的。前文除了提及这块高速SSD本身,多少也谈到了周边架构,包括SoC之上专门的解压缩单元。本文选读部分,就对PS5相关存储的架构,再做一些简单的阐述——毕竟游戏主机属于定制消费电子产品,而不是PC这样的开放平台。所以系统的整体性,往往比某个高规格的个体重要。
首先是定制的闪存控制器,或者叫主控芯片。12通道的设计,也让PS5的SSD与一般SSD显得很不一样。这个通道数在消费领域基本上没见过,可能也会比较昂贵。不过较高的通道数,要达到5.5GB/s的速率,每通道分到的量也就没那么多了;存储介质用TLC都可。
另外,12通道也是825GB这个看起来颇为奇葩容量的原因,每通道64GiB。索尼有一项相关专门针对游戏主机的DRAMless控制器,以更大的数据块,令FTL(flash translation layer)映射表足够小,可以放到很小的SRAM中;这么做似乎便于节省成本(而且传统4kB请求达到5.5GB/s的速率也很吃力,用更大的数据块会轻松很多)。
这种设计对游戏读取性能而言没什么问题,但对写入会有影响——不过游戏机并不看重这一点。一般PC应用的SSD不会采用这种设计。
Mark Cerny提到系统中的任何潜在瓶颈都需要解决,专门的Kraken解压缩是其中的“解决方案”之一。优化系统中的数据流动,确保流水线整体的高效性,应当也是“定制”主控芯片的着力点。
另外在SoC的I/O模块中,有个专门的DMA(Direct Memory Access)控制器,用于处理来自压缩单元的数据拷贝操作。作为不需要通过CPU,就执行数据读写操作的外围设备,这没什么稀奇。I/O模块中另外有两个比较显眼的I/O协处理器,其中一个用于SSD I/O,另一个用于内存映射,具体职能应当与相关组件的工作分配有关(与存储API强相关)——这俩处理器有片上SRAM资源,这个SRAM用于存储各种查询表。
前文提到索尼PS5的SSD准备了6种数据优先级,这种设定理论上应该是减少特定数据类型的延迟的。比如说前文提到的敌人阵亡时的音效,需要控制在某个固定的延迟内,因为其延迟的可感知性很强。不过6种数据优先级听起来本身又是个高开销的东西。索尼好像挺嫌弃NVMe标准自身的优先级特性可用性。未来可扩展的三方SSD,就需要经过PS5的处理器与I/O协处理器的工作,来模拟这6种优先级。
I/O模块中的Coherency Engines是值得一提的。PS5的16GB RAM是CPU与GPU共享的,其中数据不再区隔不同空间,不需要执行拷贝之类的操作;在数据通过I/O模块载入内存,覆盖旧数据的时候,这里的内存一致性引擎要将缓存失效信号发往所有相关的cache。苹果M1芯片也有类似的特性。不过这一点原本就是AMD的看家本领。
AMD早年就提过HSA(Hetergeneous System Architecture),这是实现不同组件融合的一系列规范。索尼PS3的CELL处理器最早践行过HSA,就是当年Lisa Su还在IBM的时候。(看起来,说PS5是又一个PS3,还挺有渊源;或者说索尼和Lisa Su挺有渊源……)HSA标准下的内存架构,就是GPU、CPU拥有共同的地址空间。
目前能够掌握的信息差不多也就是这些了。从更高层的抽象去分析,存储系统应该放到整个游戏主机系统中去看。不过具体的效率,以及索尼宣传的一些技术,我们自然是无法验证的。无论CPU、GPU选择上是否合理,存储系统的探索对于游戏行业而言都是有价值的。
这其中有一点颇为值得一提,即AMD作为既为游戏机造芯片,也为PC造芯片的企业,其上提到的不少技术可能是双方共享的。比如说Zen和RDNA都有类似PS5这样的压缩和解压缩加速IP;至于具备内存一致性的APU,就更不用说了。这应该也是AMD构想PC领域的未来。
至于PS5在这套系统的完成质量上如何,比如软件API效率等,那又是另一个话题了。有关PS5 SSD及存储系统的更多信息,建议前往观看Mark Cerny的演讲视频。
责编:Luffy Liu