分析线程调度

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

  • 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) 在核心之间切换的游戏,显示为紫色