游戏直播:性能监控

对于精打细算的团队来说,比赛现场直播可能会充满挑战。 在这里,我只想讨论一个技术问题,即性能。

那么,如何确保游戏的每个版本都能正常运行? 以下是几个主要挑战:指标选择,重复工作,覆盖范围。 为性能测试选择度量标准并不容易,因为在发布前只能进行有限数量的测试,而且度量标准甚至在每次运行之间都会有所不同。 从一个版本到另一个版本,性能都必须再次进行测试,而且性能的好坏之间甚至没有清晰的界线。 设备覆盖率和内容覆盖率也需要大量的努力。

还有另一种选择,从用户那里收集性能数据并对其进行监视。 您无法获得比实际用户基础更好的具有统计意义的数据。 您无法在实际用户群上获得更好的覆盖率。 即使它仍然依靠您的团队不引入严重的性能问题,但随着时间的流逝,您仍将看到有关游戏性能如何漂移并采取相应行动的明显趋势。

要监视什么?

要监视的最自然的东西是帧速率。 但是您将如何处理呢? 帧速率不是一个单一的数字,它在用户之间具有分布,并且在一个会话内具有分布。 一种有意义的方法是我从后端实时操作中借用的指标:P50,P90,P95和P99帧时间。 这些百分位数基本上意味着在一个会话中,什么帧时间下最快的90%帧位于什么帧时间下,或者说比什么帧时间下最慢的10%帧高。 这些数字将使您对分布情况感到有意义。 后端开发人员对它们进行了充分的讨论。 我鼓励你看看。

如何监控?

要获得P50等,我们需要记录所有帧时间并进行处理。 由于帧时间通常从16.66ms到数百毫秒不等,因此天真地完成此操作将消耗大量内存。 我要解决的方法是使用存储桶来计数帧。 假设我们的目标帧速率是30,从33ms到64ms,我们每个使用一个存储桶,除此之外,我将使用对数刻度来减少所需的存储桶数量。 映射将如下所示:

  [0ms,32ms] =>值区0 
  [33ms,63ms] =>存储桶1到31 
  [64ms,320ms] =>存储桶32到40 

这使我们可以有效地记录帧时间。 如果您想在更高的范围内获得更精确的帧时间,最好不要使用对数刻度,因为从16ms到320ms的每毫秒存储桶只会消耗略多于1KB的空间。

特定于游戏开发,比较这些数字还可以告诉您帧速率的稳定性。 是否有CPU峰值? 它多久发生一次? 检查您的P95和P99。

如何收集和使用数据?

理想情况下,您已经集成了一些分析。 对于精益团队而言,使用第三方分析可能非常有价值。 或者你自己滚。 无论哪种方式,这里都有一些提示:

  1. 记录正确的时间段。 如果您的游戏具有“游戏中”场景和“游戏外”场景,则您可能希望在切换时立即开始和停止录制。
  2. 记录平台和操作系统版本。 对于手机游戏,iOS似乎总是比Android更好。 并且不同的Android OS版本通常意味着不同的设备版本。 考虑到Android市场的分散程度,OS版本似乎比设备类型更好。
  3. 记录游戏功能。 根据游戏的性质,可能会有一些因素会显着影响性能。 例如,某些环境可能比其他环境更复杂,某些字符可能具有更复杂的VFX。 记录您关心的所有元数据。 这样,您不仅可以了解整体性能,而且还可以使用一个强大的工具来缩小特定的性能问题,无论是代码相关的还是内容相关的。
  4. 考虑设备升级的问题。 在很长一段时间内,您可能会发现游戏的性能会越来越好,而无需采取任何措施。 这是因为用户正在升级其设备。 知道世界还在变得越来越好感到很🙂