这篇文章最初发表在 NVIDIA 技术博客上。
系统延迟是一个重要的游戏性能指标。在许多情况下,它对整体游戏体验的影响比每秒帧数( FPS )更大。虽然 FPS 相对容易测量,但系统延迟传统上很难测量
端到端( E2E )系统延迟是管道中各种延迟的总和,如图 1 所示。为了缓解 E2E 测量困难, PC 延迟( PCL )统计数据使游戏玩家、评论家和开发人员能够测量 PCL ,这是系统延迟的主要组成部分
外围设备延迟+ PCL +显示延迟可让您全面了解 E2E 系统延迟。使用 PCL Stats ,您可以在没有任何外部设备或干预的情况下自主测量每帧 PCL 。
图 1 。端到端系统延迟的组成部分
要测量系统延迟管道的这一关键部分,请集成 PC latency Stats (通过NVIDIA Reflex SDK或虚幻引擎插件)。一旦集成, PCL 可以通过FrameView或GeForce Experience in-game overlay.
图 2 显示了集成 PCL Stats 时 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 延迟非常接近“采样延迟”。采样延迟是指从鼠标点击到游戏采样之间的等待时间。
图 3 。 输入到帧启动( I2FS )延迟
FS2P 延迟
FS2P 延迟是指SIMULATION_START标记和Present()呼叫这是 CPU 在帧上花费的总时间
即使没有输入,也可以在每个帧上测量 FS2P 。在大多数情况下, Present ()调用是在渲染提交结束时进行的, FS2P 延迟非常接近“游戏延迟”。游戏延迟是指 CPU 处理对世界的输入或更改并向 GPU 提交新帧以进行渲染所需的时间。
**图 4 。帧开始到呈现( FS2P )延迟
P2D 延迟
P2D 延迟是指Present()调用和帧缓冲区翻转。 PresentMon 已将此值度量为msUntilDisplayed请注意, P2D 延迟不包括显示器扫描延迟。显示器扫描延迟是显示器延迟的一个组成部分。
**图 5 。呈现到显示( P2D )延迟
将平均 I2FS 延迟、 FS2P 延迟和 P2D 延迟相加,得到 PCL 。请注意,此 PCL 计算不包括 USB SW 延迟。假设 USB SW 延迟是一致的,相对较小,因此可以用较小的偏移来表示。
图 6 。 PCL 管道视图
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 。
图 7 。 PCL 处于窗口模式
总结
减少系统延迟对于获得最流畅的游戏体验至关重要。随着 PC 延迟的几个组件的神秘化,您可以利用 PCL Stats 来准确跟踪、测量和改善渲染管道中的延迟
通过下载最新版本的 PCL StatsNVIDIA Reflex SDK和get more information,包括集成提示。 PCL Stats 也是虚幻引擎中的主要功能。您也可以在NVIDIA forums.