分析线程调度

为了确定您的游戏进程线程是否得到适当的利用和调度,以实现最佳性能,需要考虑一些事项。

  • Frame pacing
  • 多线程和线程并行化
  • CPU 核心亲和性

多线程处理

许多游戏和游戏引擎使用多线程处理将 CPU 工作划分为可在一定程度上独立运行的逻辑任务。一种典型的配置是用于处理输入和游戏逻辑的游戏线程、用于准备和提交要绘制的对象的渲染线程,以及用于动画或音频等其他子任务的工作器线程。

我们建议并行处理线程,以利用多线程的性能提升效果。例如,游戏和渲染线程在不同核心上部分或完全并发运行。这并非总是可行,例如在具有共享数据依赖项的情况下;但是,如果可能,这可能会导致 CPU 时间缩短,进而可能实现更高的帧速率。

具有高度并行化的主线程和渲染线程以及工作器线程和音频线程的游戏
图 1. 游戏具有并行化的主线程和渲染线程,以及工作器线程和音频线程

CPU 核心亲和性

对 CPU 工作负载性能有重大影响的一个因素是它们在核心上的调度方式。它可分为两部分:

  • 游戏线程是否运行在最佳核心上以提升性能
  • 游戏线程是否频繁切换核心

您可以在“CPU 使用率”下调查 CPU 线程行为,只需在获取轨迹时启用配置文件配置中的 CPU 即可。通过将轨迹的某一部分放大到 200 毫秒以内,您可以查看在设备的 CPU 核心上运行的各个进程。通常,小核心对应较小的索引(例如 CPU 0-3),而大核心对应较高的索引(例如 CPU 6-7)。

通常,当游戏位于前台时,持久性线程(如游戏线程和渲染线程)应在高性能大核心上运行,而其他进程和工作线程可能安排在较小的核心上。

游戏的主线程和渲染线程主要在大核心 (CPU 6-7) 上运行,显示为浅蓝色
图 2. 主线程和渲染线程主要在大核心 (CPU 6-7) 上运行的游戏,显示为浅蓝色

如果主线程和渲染线程在单个 CPU 帧内或在两个连续的 CPU 帧之间更改核心,那么您还可以观察游戏线程是否频繁切换核心。此 CPU 行为可能表示您的游戏线程未正确关联。此类核心切换会因上下文切换以及核心的缓存/寄存器的状态丢失而产生一些开销,从而导致 CPU 帧的长度增加。

具有可在核心之间切换的主线程 (Thread-7) 和渲染线程 (Thread-8) 的游戏,显示为紫色
图 3. 具有可在核心之间切换的主线程 (Thread-7) 和渲染线程 (Thread-8) 的游戏,显示为紫色