DirectStorage Bulk Load Demo 測試解放 CPU 使用率高速讀取
微軟新一代 DirectStorage API,主要目的是讓遊戲能夠完整的應用 NVMe SSD 高速讀取的特性,能以每秒 GB 的速度讀取遊戲的小型資料,同時降低 CPU 使用率的開銷。
當然以往遊戲開發都透過 ReadFile-based IO 來操作,但是當讀取的資料量提升、每個資料的大小變小的同時,往往會讓 CPU 使用率飆升。而且,遊戲開發者為了縮短遊戲的下載與安裝時間,都會對遊戲的資料、材質進行壓縮,因此在遊戲讀取資料、材質的同時要進行解壓縮的動作。
但是以往的讀取操作解壓縮的重擔就變成 CPU 需要承擔,也造成以往遊戲讀取時間較久且無法發揮 NVMe SSD 高效能讀取的速度。而 DirectStorage API 已在 Xbox 家用主機上實做,但家用主機是採用 NVMe 硬體佇列管理 I/O 與硬體加速解壓縮。
在 Windows 11 的作業系統與 Xbox 的 DirectStorage API 極為相似,其目的就是讓遊戲開發商在這兩個平台上有著較好的開發相容性。
目前微軟在 Github 上的 microsoft / DirectStorage 專案中,已經釋出「BulkLoadDemo」的程式碼,玩家可自行透過 Visual Studio 將專案 Build 成可執行檔來進行測試。
測試前,玩家可先使用 Win + G 透過 Xbox 程式 > 設定 > 遊戲功能,檢查目前電腦是否支援 DirectX 12 Ultimate,以及 GPU、儲存裝置是否支援 DirectStorage。
BulkLoadDemo 內建 DirectStorage 使用大量的模型讀取,並測量讀取時間、CPU 使用率、頻寬等數據,引情是基於 MiniEngine 開發支援 glTF 2.0 的模型。
首先在 PCIe 4.0 NVMe SSD(系統碟)執行 BulkLoadDemo,測得讀取 0.9s、0.96% CPU 使用率、頻寬 9.62GB/s;接著相同設定下關閉 -gpu-decompression 功能也就是換成 CPU 來解壓縮。
這時 CPU 解壓縮的讀取時間 1.13s、96% CPU 使用率、頻寬 7.67GB/s,可見 DirectStorage 除了提升讀取速度外更重要的是 GPU 解壓縮,解放 CPU 使用率。
上述系統碟的 PCIe 4.0 NVMe SSD 是安裝在主機板第一根 M.2 插槽使用 CPU 通道,接著換成 PCH 通道測試,反而有著更好的效能。
讀取 0.74s、0.97% CPU 使用率、頻寬 11.79GB/s。
接著換上另一根 PCIe 3.0 NVMe SSD 使用 PCH 通道,測得讀取 0.83s、0.96% CPU 使用率、頻寬 10.40GB/s。
最後,SATA SSD 測得讀取 4.19s、1.44% CPU 使用率、頻寬 2.07GB/s。
以讀取時間來看,使用 PCIe 4.0 或 3.0 SSD 對於讀取效能差異並不會太大,但相比 SATA SSD 依舊是天壤之別,但 DirectStorage 最大優勢除了高速讀取外,則是 GPU 解壓縮解放 CPU 使用率這點。
目前有支援 DirectStorage 的 PC 遊戲是《Forspoken》,不過目前因為優化太爛的關係而褒貶不一,這款之後有機會再針對 DirectStorage 的速度、FPS 來測試比較。
source: 測試專案下載