系统延迟是一个重要的游戏性能指标。在许多情况下,它对整体游戏体验的影响比每秒帧数( 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.