长久以来,微软一直在「绞尽脑汁」优化 windows 操作系统的游戏体验。我们能够数得着的优化方式就有 10 来种之多,而 directstorage 正是其中的重要一环。
directstorage 最初是为 xbox「velocity 架构」设计的 directx api。就像 directx 12 ultimate 能提供统一的顶级渲染技术那样,directstorage 也为 xbox 和游戏 pc 引入了先进的 io(输入/输出)技术支持。
在支持 directstorage 的游戏 pc 上运行兼容游戏时,将大大缩短加载时间,为玩家呈现更广阔、更细致的虚拟世界。接下来,我们就来详细聊聊 directstorage 的工作原理,以及它如何彻底改变 windows 11 的游戏体验。
01. 存储技术与游戏 io 模式的演进
随着 ssd 和 pcie,尤其是 nvme 技术的飞速发展,现代游戏 pc 的「存储性能」早已今非昔比。相比传统机械硬盘(每秒几十兆)的传输速度,像 xbox series x 使用的定制 nvme 固态硬盘,理论速度就可达每秒数千兆,性能提升非常明显。
与此同时,游戏的工作负载也在不断变化:
- 现代游戏需要加载的数据量越来越大,而且加载方式也更加智能。这是因为,更大的数据量需要更高效地装载到「共享 gpu 内存」或「专用 gpu 内存」中。
- 现代游戏不再是一次性加载「大型数据块」,而是将素材(如纹理)切成小块,只加载当前画面所需的部分。这种方式不仅提高了显存利用率,还能带来更优质的画面效果。不过,这也显著增加了 io 请求的数量。
比较尴尬的是,早期的「存储 api」并没有针对大量 io 请求进行优化,无法充分发挥 nvme 的带宽潜力,导致性能瓶颈,限制了游戏的表现。即使你有顶级的 pc 硬件和 nvme 硬盘,传统 api 依然无法完全利用 io 数据通道,宝贵的带宽就这样被白白浪费掉了。
正因如此,微软才推出了 directstorage 技术。这是专门针对 pc 游戏存储和 io 场景优化的全新 api,能够大幅提升游戏的性能表现。
02. directstorage 在 windows 11 中的工作原理
directstorage api 主要从 2 个方面来提升游戏体验:
- 缩短加载时间
- 支持更精细和庞大的游戏场景
这两个优势都源于 directstorage 对 io 系统的全面升级。举个例子:
- 无论是游戏角色服装的细腻纹理,还是远景中宏伟山脉的渲染,都离不开从「存储设备」提取数据并传送到「gpu」的过程。
- 加载时间的缩短通常体现在场景切换时加载画面的提速,而场景细节的实时加载则更多出现在开放世界游戏中——当玩家移动时,远方景物实时加载,同时系统会卸载已经脱离视野的数据。
2.1 早期技术瓶颈
- 传统游戏的素材流加载速度大约是每秒 50 mb,按照 64 kb 的区块大小(即每个纹理块的大小)来计算,每秒最多能处理几百次 io 请求。
- 而现在,nvme 固态硬盘的传输能力已经达到数千兆字节每秒。要充分利用这些带宽,io 请求量会激增到数万次。
- 以 xbox series x 的 nvme 硬盘为例,2.4 gb/s 的带宽在相同「块大小」下,每秒需要处理超过 35000 次 io 请求,才能完全利用带宽。
但遗憾的是,早期的「存储 api」需要逐一处理这些 io 请求,也就是:先提交请求、等待完成,然后再处理结果。对于运行在机械硬盘上的老游戏来说,单个请求的开销并不大,不会成为瓶颈。但在面对每秒成千上万次的请求时,这种操作方式就让 io 开销迅速攀升,严重阻碍了 nvme 带宽的充分利用。
另外,游戏素材往往是被压缩过的,在被 gpu 使用之前,必须先解压。如果游戏加载了再多数据,但没有高效的解压缩方式,也无法迅速将数据送到 gpu 完成渲染。
2.2 directstorage 技术
顾名思义,directstorage 就是「直连存储」。它让游戏能够利用最先进的解压缩技术,并优化从 nvme 到 gpu 的整个数据传输路径,最大限度地提升各个环节的性能,充分利用 nvme 来改善游戏体验。
- directstorage 允许跳过 cpu 这样的不必要路径,让 gpu 更快地接收游戏数据,从而实现几乎即时的加载时间。
- directstorage 支持最新的 gpu 解压缩技术,可以将解压缩工作从 cpu 挪动到 gpu 中。这就彻底跳过了 cpu,使得 gpu 可以更快、更直接地处理大量压缩数据。
这种方法极大地提高了处理大量 io 请求的效率,不仅缩短了玩家等待加载的时间,还能让虚拟世界变得更加庞大、细腻,同时保持与角色行动的实时同步。
03. 为什么要用 nvme?
nvme 不仅仅是一种拥有极高带宽的固态硬盘技术,它的硬件数据通道(即 nvme 队列)也非常契合游戏负载的需求:
- 操作系统通过这些队列向硬盘提交请求,而硬盘也通过队列向应用传递数据支持。每个 nvme 设备可以拥有多个队列,每个队列都能同时处理大量请求。
- 这种特性完美匹配了现代游戏工作负载的并行和批量处理需求。directstorage 编程模型则让开发者能够直接控制这些高效的硬件资源。
此外,传统存储 api 往往包含很多「多余步骤」,导致应用的 io 请求在抵达存储设备前,产生不必要的开销。这些额外操作有时是基于正常 io 操作的特定需求,但并非适用于所有 nvme 硬盘和游戏场景。directstorage 能够在检测到这些冗余步骤「非必要」时直接跳过,从而进一步减少 io 请求的处理开销。
04. directstorage 的软/硬件要求
- xbox series x 和 xbox series s 游戏机原生支持 directstorage,这是 velocity 架构的一部分。
- 在游戏 pc 端,windows 11 和 windows 10 v1909 及更高版本支持 directstorage,但对硬件有一定要求:
- 必须使用至少 1tb 的 pcie 3.0 nvme 固态硬盘,不过 pcie 4.0 会带来更好的性能表现。
- 必须使用支持 shader model 6.0 的 directx 12 ultimate gpu。例如 nvidia 的 rtx 20 系列及更高型号,以及搭载 rdna 2 架构的 amd 显卡等。
- steamdb 上有一个支持 directstorage 的游戏列表,共列出了 47 款游戏。
简单来说,要想体验 directstorage 带来的极致游戏性能,一块高速的 nvme 固态硬盘和一块支持 directx 12 ultimate 的强力显卡是必不可少的。
如果游戏和硬件支持,windows 11 会自动激活 directstorage。如果你的电脑配置不支持 directstorage,也不用担心,游戏依然可以正常运行,只不过性能表现会和以往相同。
发表评论