游戏引擎

了解和测量 PC 延迟

系统延迟是一个重要的游戏性能指标。在许多情况下,它对整体游戏体验的影响比每秒帧数( FPS )更大。虽然 FPS 相对容易测量,但系统延迟传统上很难测量

端到端( E2E )系统延迟是管道中各种延迟的总和,如图 1 所示。为了缓解 E2E 测量困难, PC 延迟( PCL )统计数据使游戏玩家、评论家和开发人员能够测量 PCL ,这是系统延迟的主要组成部分

外围设备延迟+ PCL +显示延迟可让您全面了解 E2E 系统延迟。使用 PCL Stats ,您可以在没有任何外部设备或干预的情况下自主测量每帧 PCL 。

Diagram showing peripheral latency, PC Latency, and display latency, which together make up end-to-end system latency.
图 1 。端到端系统延迟的组成部分

要测量系统延迟管道的这一关键部分,请集成 PC latency Stats (通过NVIDIA Reflex SDK或虚幻引擎插件)。一旦集成, PCL 可以通过FrameViewGeForce Experience in-game overlay.

图 2 显示了集成 PCL Stats 时 FrameView 将记录的所有交互。这些信息是理解和测量延迟的关键。

Diagram showing several markers and events from a game and graphics API/OS being tracked using FrameView.
图 2 :当 PCL Stats 集成在游戏中时,通过 FrameView 进行的每帧交互示例

PC Latency Stats 如何发出事件日志

你的游戏负责以 100 到 300 毫秒的随机间隔向自己发布独特的“ ping ”消息。它还发出相应的PCLStatsInputWindows ( 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
表 1 。 PCL Stats ETW 事件列表

FrameView 和 PC Latency

FrameView是一个利用开源项目的应用程序PresentMon用于测量 GPU 上的帧速率、帧时间、功率和每瓦性能。使用 PCL Stats ETW 事件中的帧 ID , FrameView 可以通过游戏管道的不同阶段跟踪每一帧。

PC 延迟是平均输入到帧开始( I2FS )延迟、帧开始到呈现( FS2P )延迟和呈现到显示( P2D )延迟的总和。这些术语的定义如下。

I2FS 延迟

I2FS 延迟是指PCLStatsInputETW 事件和SIMULATION_START标记的下一帧的标记PC_LATENCY_PING标记

I2FS 延迟值通常在输入采样间隔上均匀分布。游戏是周期性地对输入进行采样,每个输入的 I2FS 延迟取决于输入在两个采样之间的确切时间。因此,在将 I2FS 延迟包括在 PCL 中之前,有必要计算平均 I2FS 延迟

请注意,由于使用了启发式方法,当游戏低于 10 FPS 时, I2FS 延迟测量将不正确。在大多数情况下, I2FS 延迟非常接近“采样延迟”。采样延迟是指从鼠标点击到游戏采样之间的等待时间。

Diagram showing what part of the CPU contributes to I2FS latency: Sampling.
图 3 。 输入到帧启动( I2FS )延迟

FS2P 延迟

FS2P 延迟是指SIMULATION_START标记和Present()呼叫这是 CPU 在帧上花费的总时间

即使没有输入,也可以在每个帧上测量 FS2P 。在大多数情况下, Present ()调用是在渲染提交结束时进行的, FS2P 延迟非常接近“游戏延迟”。游戏延迟是指 CPU 处理对世界的输入或更改并向 GPU 提交新帧以进行渲染所需的时间。

Diagram showing what part of the CPU contributes to FS2P latency: Sim, Render Submission, and Driver.
图 4 。帧开始到呈现( FS2P )延迟

P2D 延迟

P2D 延迟是指Present()调用和帧缓冲区翻转。 PresentMon 已将此值度量为msUntilDisplayed请注意, P2D 延迟不包括显示器扫描延迟。显示器扫描延迟是显示器延迟的一个组成部分。

Diagram showing the render queue and GPU comprises P2D latency.
图 5 。呈现到显示( P2D )延迟

将平均 I2FS 延迟、 FS2P 延迟和 P2D 延迟相加,得到 PCL 。请注意,此 PCL 计算不包括 USB SW 延迟。假设 USB SW 延迟是一致的,相对较小,因此可以用较小的偏移来表示。

This diagram summarizes PCL across simulation, rendering, and the GPU.
图 6 。 PCL 管道视图

PCL Stats 如何处理帧丢弃

在窗口模式下,一些帧可以被丢弃而不显示在显示器上。这会以以下两种方式影响 PCL :

  1. 丢弃的帧将不会显示延迟。
  2. 这个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 。

Diagram summarizing PCL across simulation, rendering, and the GPU when there are frame drops.
图 7 。 PCL 处于窗口模式

总结

减少系统延迟对于获得最流畅的游戏体验至关重要。随着 PC 延迟的几个组件的神秘化,您可以利用 PCL Stats 来准确跟踪、测量和改善渲染管道中的延迟

通过下载最新版本的 PCL StatsNVIDIA Reflex SDKget more information,包括集成提示。 PCL Stats 也是虚幻引擎中的主要功能。您也可以在NVIDIA forums.

 

Tags