系統延遲是一個重要的游戲性能指標。在許多情況下,它對整體游戲體驗的影響比每秒幀數( FPS )更大。雖然 FPS 相對容易測量,但系統延遲傳統上很難測量
端到端( E2E )系統延遲是管道中各種延遲的總和,如圖 1 所示。為了緩解 E2E 測量困難, PC 延遲( PCL )統計數據使游戲玩家、評論家和開發人員能夠測量 PCL ,這是系統延遲的主要組成部分
外圍設備延遲+ PCL +顯示延遲可讓您全面了解 E2E 系統延遲。使用 PCL Stats ,您可以在沒有任何外部設備或干預的情況下自主測量每幀 PCL 。

要測量系統延遲管道的這一關鍵部分,請集成 PC latency Stats (通過NVIDIA Reflex SDK或虛幻引擎插件)。一旦集成, PCL 可以通過FrameView或GeForce Experience in-game overlay.
圖 2 顯示了集成 PCL Stats 時 FrameView 將記錄的所有交互。這些信息是理解和測量延遲的關鍵。

PC Latency Stats 如何發出事件日志
你的游戲負責以 100 到 300 毫秒的隨機間隔向自己發布獨特的“ ping ”消息。它還發出相應的PCLStatsInput
Windows ( ETW )事件的事件跟蹤
ETW 是一種 Windows 操作系統機制,使您能夠跟蹤和記錄事件。在過濾掉唯一消息的游戲引擎上, PCL Stats 可以發布虛擬鍵盤輸入消息,如 F13 。
當游戲對該消息進行采樣時,它會用PC_LATENCY_PING
標記 ETW 事件。游戲還使用SIMULATION_START
標記 ETW 事件,以及每個事件的開始/結束Present()
與的通話PRESENT_START/END
標記 ETW 事件
在不允許Present()
要括起來的調用RENDER_START/END
標記 ETW 事件用于記錄幀 ID ,將渲染提交括起來。有關標記事件的列表,請參見表 1 。
ETW 事件名稱 | 參數(標記) | 參數 |
---|---|---|
PCLStats 輸入 | ? | ? |
PCL 統計事件 | 個人防護用品 | 框架 ID |
? | 模擬啟動 | 框架 ID |
? | 模擬結束 | 框架 ID |
? | 渲染子任務啟動 | 框架 ID |
? | 渲染子任務啟動 | 框架 ID |
? | 當前_啟動 | 框架 ID |
? | 呈現_結束 | 框架 ID |
FrameView 和 PC Latency
FrameView是一個利用開源項目的應用程序PresentMon用于測量 GPU 上的幀速率、幀時間、功率和每瓦性能。使用 PCL Stats ETW 事件中的幀 ID , FrameView 可以通過游戲管道的不同階段跟蹤每一幀。
PC 延遲是平均輸入到幀開始( I2FS )延遲、幀開始到呈現( FS2P )延遲和呈現到顯示( P2D )延遲的總和。這些術語的定義如下。
I2FS 延遲
I2FS 延遲是指PCLStatsInput
ETW 事件和SIMULATION_START
標記的下一幀的標記PC_LATENCY_PING
標記
I2FS 延遲值通常在輸入采樣間隔上均勻分布。游戲是周期性地對輸入進行采樣,每個輸入的 I2FS 延遲取決于輸入在兩個采樣之間的確切時間。因此,在將 I2FS 延遲包括在 PCL 中之前,有必要計算平均 I2FS 延遲
請注意,由于使用了啟發式方法,當游戲低于 10 FPS 時, I2FS 延遲測量將不正確。在大多數情況下, I2FS 延遲非常接近“采樣延遲”。采樣延遲是指從鼠標點擊到游戲采樣之間的等待時間。

FS2P 延遲
FS2P 延遲是指SIMULATION_START
標記和Present()
呼叫這是 CPU 在幀上花費的總時間
即使沒有輸入,也可以在每個幀上測量 FS2P 。在大多數情況下, Present ()調用是在渲染提交結束時進行的, FS2P 延遲非常接近“游戲延遲”。游戲延遲是指 CPU 處理對世界的輸入或更改并向 GPU 提交新幀以進行渲染所需的時間。

P2D 延遲
P2D 延遲是指Present()
調用和幀緩沖區翻轉。 PresentMon 已將此值度量為msUntilDisplayed
請注意, P2D 延遲不包括顯示器掃描延遲。顯示器掃描延遲是顯示器延遲的一個組成部分。

將平均 I2FS 延遲、 FS2P 延遲和 P2D 延遲相加,得到 PCL 。請注意,此 PCL 計算不包括 USB SW 延遲。假設 USB SW 延遲是一致的,相對較小,因此可以用較小的偏移來表示。

PCL Stats 如何處理幀丟棄
在窗口模式下,一些幀可以被丟棄而不顯示在顯示器上。這會以以下兩種方式影響 PCL :
- 丟棄的幀將不會顯示延遲。
- 這個
PC_LATENCY_PING
標記可以標記到丟棄的幀。
丟棄的幀不會顯示給用戶,并且在系統延遲測量中應該被忽略。此外,如果標記的幀被丟棄,則必須擴展正確的輸入到幀的開始延遲,以包含SIMULATION_START
標記幀的標記( SSM )和未丟棄的下一幀的 SSM 。
例如,當在具有 60Hz 顯示器的窗口模式下運行 200 FPS 的游戲時,每顯示一幀,就會丟棄兩到三幀。假設在丟棄的幀 X 上,幀開始延遲的輸入最初被測量為 2 . 5ms 。幀 X 的 SSM 和幀 X + 1 的 SSM 之間的時間是 5ms 。幀 X + 1 也被丟棄。并且幀 X + 1 的 SSM 和幀 X + 2 的 SSM 之間的時間是 4 . 5ms 。向用戶顯示幀 X + 2 。在這個例子中,幀開始延遲的正確輸入是丟棄的幀的總和: 2 . 5 + 5 + 4 . 5 = 12ms 。

總結
減少系統延遲對于獲得最流暢的游戲體驗至關重要。隨著 PC 延遲的幾個組件的神秘化,您可以利用 PCL Stats 來準確跟蹤、測量和改善渲染管道中的延遲
通過下載最新版本的 PCL StatsNVIDIA Reflex SDK和get more information,包括集成提示。 PCL Stats 也是虛幻引擎中的主要功能。您也可以在NVIDIA forums.
?