您的位置:首页 > 国际新闻

详解Oculus性能调试工具OVR Metrics Tool各项指标

时间:2020-01-29

资料来源:魏莹作者严昌华

如果你试图提高你的应用程序的性能,你可能已经知道ovmetricstool或Logcat中的VrApi日志。OVR MetricTool是Oculus为统一、虚幻和本地开发者提供的性能工具。平视模式允许您在虚拟现实覆盖图中查看实时指示器,而报告模式在虚拟现实会话结束后提供性能报告。Oculus希望扩展OVR度量工具中提供的信息,通过将其集成到操作系统中来进一步实现无缝体验,并构建允许您使用控制器来打开和关闭它的方法。

FPS是两者中最明显的统计信息,这对于判断应用程序是否以全帧速率运行非常有用,但它也包含许多其他信息。最近,Oculus的软件工程师特雷弗达施(Trevor Dasch)写了一篇介绍OOVR度量工具的文章,其中包含了你可以忽略和不可忽略的信息。以下是视频网络的具体安排,希望能为您提供一些参考:

ovrmetrictool参数和相应的VrApi日志值

1。重要参数

不是按字母顺序排列的,而是按重要性的顺序排列的(或者至少按我认为重要的顺序排列)。当然,您总是可以使用Ctrl+F来快速定位目标内容。

1.1过期帧(每秒)

ovmetrictool : stall

vrapilogs : stall

您可能会惊讶于我没有将FPS放在第一位。然而,当评估用户体验的质量时,过时的帧实际上是更有用的指标。什么是过时的框架?由于虚拟现实的工作方式,屏幕显示刷新率与应用程序的帧渲染没有直接关系。相反,有一个中间步骤叫做合成器,时间扭曲。它获取应用程序渲染的最后一帧,根据用户的头部移动计算方向校正,并将其显示在物理显示器上。

因此,时间扭曲想要在特定时间渲染最后一帧。如果该突发没有准备好,则必须使用“过时”的前一帧。这和FPS有什么不同?如果应用程序错过了一个帧,过时的帧增加1,帧速率减少1,这似乎形成了一个完美的反向抵消率。但事实并非如此。因为中央处理器和图形处理器并行工作,渲染一帧可能需要比一帧的总长度更长的时间,但是中央处理器和图形处理器都不需要比一帧更长的时间。因此,一个应用程序可以以72fps的速度运行,但是每秒有72个过期帧。实际情况并没有那么糟糕,渲染和显示时间之间的延迟更长,但是帧的释放速度非常稳定。

但是,如果所有大于零但小于72的帧都过时了,问题就会出现。此时,一些帧将连续显示两次,一些帧将被跳过。为了避免这种情况,我们使用“额外延迟模式/额外延迟模式”(如果使用“统一”或“不真实”,则默认为启用)。这告诉时间扭曲总是必须等待一个额外的帧,并且不要认为它们已经过时,除非它们在第二帧之后还没有准备好。如果应用程序确实渲染得很快,请考虑“早期”帧,但是一切看起来都很平滑。

1.2应用程序GPU时间

ovmetricstool 3360 appt(inμs,1/1000 thms)

vrapilogs : app(inms)

这可能是优化应用程序时需要注意的最有用的数据之一。应用图形处理器时间可以提供渲染单个帧所需的时间。如果超过单个帧的长度(即72fps为13.88毫秒),则它是GPU绑定的。如果小于该值,它可能是受中央处理器限制的。它在更改着色器、添加更多纹理、更改网格等方面也非常有用。它可以显示GPU的剩余空间以及是否添加调试逻辑来打开和关闭特定对象。你可以判断物体的性能。这是最接近真实性能分析的方法,无需修改渲染文件或快照龙剖析器等工具。

1.3 CPU和GPU利用率

ovmetricstool : cpu和gpu

vrapilogs : gpu%和CPU%

这对于确定应用程序是受中央处理器约束还是受图形处理器约束非常有用,但是您需要注意某些问题。事实上,图形处理器的利用率是一个更有用的指标,因为图形处理器在功能上是一个单一的核心(这不是图形处理器是如何工作的,但是就我们的比喻而言,我们不妨使用这个语句)。应用程序和时间扭曲都将工作提交给GPU,然后由GPU执行工作,并可以基于给定时间窗口内执行的工作总量来计算单个利用率。如果达到100%,则意味着图形处理器绑定。如果仅仅因为时间安排就超过了90%,你实际上可能已经开始遇到麻烦了。事实上,CPU利用率不是很有用。由于移动CPU是多核的,我们选择利用率来表示性能最差的内核(VrApi日志显示平均值和差值)。但是,由于大多数应用程序是多线程的,调度程序会将线程分配给可用的内核,即使主线程运行非常慢,CPU利用率指数也可能无法显示,因为线程最终由不同的内核运行。

为了利用这个指示器,您可以在调试期间设置线程关联性,并将主线程和呈现线程绑定到特定的内核。然而,这实际上会降低整个系统的效率,因为调度器非常擅长保持高吞吐量。因此,您可以保持注意力,但不建议依靠它来确定负载的位置。您需要使用一个分析器,如系统或内置在引擎中的分析器,来找出中央处理器方面的瓶颈。

1.4 CPU和GPU运行级别

ovmetricstool : CPU l和GPU l

vrapilogs : CPU[x]/GPU(x是当前的主内核)

对于齿轮虚拟现实,这些数字需要由应用程序手动设置。然而,随着Oculus Go的推出,我们增加了自动动态时钟。如果应用程序不满足所需的帧速率,它将增加这些数字。如果应用程序没有达到所需的帧速率,您最好检查一下中央处理器和图形处理器的操作级别,因为它会在中央处理器绑定或图形处理器绑定时提供信号,以及它们各自的近似负载。例如,如果您注意到CPU运行级别为4,GPU运行级别为2,您需要优化CPU利用率。如果两者都是4,您需要查看上面列出的其他指标。同时,您应该记住利用率数字需要与相关的操作级别数字相结合。例如,GPU 2级和90%的利用率实际上比GPU 4级和60%的利用率表现更好。

1.5帧/秒

ovmetricstool : fps

vrapilogs : fps

frames/秒可能不需要太多解释。如果它与显示器刷新率相匹配,没有太大问题。如果低于显示器刷新率,则需要采取某些措施。

1.6可用内存

ovmetrictool : amem

vrapilogs : free

报告安卓操作系统的可用内存。对于安卓来说,内存是以某种不透明的方式管理的,所以这个数字很难达到。例如,如果应用程序进入后台,新打开的应用程序可能会占用大量内存,因此即使您有数百兆的可用空间,应用程序也可能会停止运行。然而,判断内存分配是否比预期快或者内存是否按预期释放是一个非常好的方法。

2。“知道最好的”参数

以下参数不太重要。它们主要用于判断应用程序的设置是否符合预期。当然,它们对于故障排除非常有用。

2.1凝视渲染级别

ovmetricstool : FOV

vrapilogs : FOV

凝视渲染级别指应用程序的固定凝视渲染强度。0关闭,1低,2中,3高,4高(仅支持Quest),屏幕的下半部分比上半部分更清晰(对于显示双手的应用非常有用)。这个数字将直接影响图形处理器的性能,当渲染级别改变时,屏幕边缘的可见伪像将变得越来越明显。为了实现所需的性能改进,选择视觉上可接受的渲染级别提高是很重要的。

2.2眼图缓冲区宽度/高度

OVR度量工具: EBW和EBH

这是纹理的渲染分辨率。Oculus Go/Gear VR默认为1024×1024,而Quest默认为1216×1344。这有助于确认您已将其更改为期望值,并且纵横比与视角相匹配。分辨率直接影响图形处理器渲染时间,像素越多,片段着色器的时间就越长。

2.3时间扭曲时间

ovmetricstool : tw

vrapilogs : tw

这是时间扭曲渲染所需的时间。这一次与使用的层数及其复杂性直接相关(等向层和圆柱层的负荷高于四向层和投影层的负荷)。大多数应用程序不必担心这个,但是视频应用程序不用担心,因为时间扭曲需要太长时间才能把图片拆开。

2.4早期到帧

OVR度量工具:早期

虚拟现实应用编程接口日志:早期

如前所述,当使用额外延迟模式/额外延迟模式时,帧可以在需要之前交付。一些早期的帧可以忽略。如果您总是以高帧速率运行,请确保CPU/GPU的运行水平不高于实际情况。如果提前到达帧具有匹配的fps,我建议您关闭额外延迟模式。您也可以通过提高分辨率或增加着色器复杂性来利用边距。

2.5图片撕裂

ovmetricstool : ters

vrapilogs : ters

这表示时间扭曲花费太长,出现图片撕裂。这在早期的齿轮虚拟现实设备中更常见。Oculus Go和Quest现在基本上不会发生,除非应用程序使用太多的层(例如四层和圆柱层来显示用户界面元素)。

2.6 used memory

ovmetricstool : umem

used memory确实有用,但这个数字是用来说明PSS(比例集大小)内存的。因为应用程序可以在安卓系统中共享内存,所以这会增加应用程序使用的所有唯一内存,并根据共享应用程序的数量计算一小部分共享内存。例如,如果两个应用程序使用20mb的库,这将为每个应用程序的PSS增加10mb。该指示器可以跟踪应用程序分配了多少相对内存,但对跟踪实际内存使用情况没有帮助。

2.7 extra delay mode

ovmetricstool : lat

vrapilogs : lat

请参考前面的过时帧部分。它几乎总是1,这就是为什么尽管这个数字非常重要,但它仍然属于“最了解”的范畴。

2.8交换间隔

ovmetricstool : swap

vrapilogs : vsync

交换间隔告诉应用程序在渲染下一帧之前要跳过多少帧。它几乎总是1,因为输入2可能会导致应用程序以一半的速率呈现,这可能会导致用户不舒服。齿轮虚拟现实的节能模式将进入2,但我们从未在Oculus Quest中启用它。您可以将其用于调试目的或以非常高的分辨率使用,但是您永远不应该在分发应用程序中启用该功能,因为只要用户转过头来,他们就可以很容易地注意到它。

2.9预测时间

OVR度量工具:PRED

VR API日志:PRD

预测时间是指渲染前应用程序的查询手势和屏幕显示帧之间的绝对时间。根据引擎和监视器的刷新率,这应该几乎总是40毫秒到50毫秒之间的固定数字。只有当数字比预期的高得多时,这个参数才真正有用。它也不会告诉你延迟的整个故事,因为这是用于渲染的手势,而统一和虚幻都使用不同的手势来更新游戏逻辑。

2.10显示刷新率

ovmetricstool :drr

对于Oculus Go和Oculus Quest,显示刷新率可以是60或72。该指示器仅告诉您当前设置。如果屏幕刷新到72,这非常有用,但是您会看到FPS是60。这意味着你需要做很多优化。

2.11电池电量

OVR度量工具: BAT L

对性能分析没有帮助,但是如果您想在应用程序中监控电池电量,没有问题。

3。下面的参数“对档位虚拟现实有用,但没有问题可忽略”仅对档位虚拟现实有用。对于Oculus Go和Quest,因为硬件是固定的,温度不是问题,所以可以忽略它们。下面还列出了除了我们团队之外可能对任何人都没有用的参数。

3.1传感器温度

ovmetricstool :temp

对于早期档位VR,温度可能是个问题。当低功率手机的时钟以虚拟现实所需的速度运行时,它们可能会迅速升温,这可能会导致可怕的“过热”屏幕。随着智能手机性能的提高,这不再是一个问题,但是如果您仍然以S6和S7为目标,您可以对它们进行监控。

3.2电源管理

ovmetricstool :powl

此指示灯告诉您设备是否处于省电模式。三个报告的级别分别为正常=0、保存=1和危险=2。随着设备升温,功率水平将自动从正常变为保存,并最终变为危险。一旦达到危险,系统将显示过热对话框。对于应用程序,您可以查询当前功率水平,因此建议您将应用程序设置为SAVE状态,以降低渲染成本。有关此主题的更多信息,请参考我们的电源管理文档。

3.3处理器/图形处理器/内存频率

OVR度量工具:处理器、图形处理器和MEM处理器

这是处理器/图形处理器/内存的时钟速度。当中央处理器操作级别或图形处理器操作级别改变时,时钟速度也会改变。这对于监控不是很有用,因为原始数字不能提供使用不同SoC的器件之间的性能差异。

3.4电池温度

ovmetricstool :btem

当前电池温度对档位VR更为重要。

3.5电池/电源电流,电源电压

ovmetricstool : batc,powc和POW V

电池电流单位毫安,电压单位伏特。理论上,您可以监控它并确定功耗(Apms×伏特=瓦特),但最好的方法是优化CPU/GPU的操作水平和利用率。

3.6遥控器/控制器温度

ovmetricstool : lctm和rctm(前两者)

控制器温度

3.7最大速度

OVR度量工具: M ROT

头部显示最大速度

4。VrApi日志参数

VrApi日志包含许多与OVR相同的统计信息,但它只计算一些独特的信息,具体使用将取决于您的具体需求。

FPS={FPS}、

Prd={预测}ms、

眼泪={眼泪}、

早期={早期}、

陈旧={陈旧}、

VSnc={交换间隔}、

Lat={额外延迟模式}、

Fov={ Foveation Level }、

中央处理器{测量的中央处理器内核}/中央处理器={中央处理器级别}/{中央处理器级别}、

{中央处理器频率}/{中央处理器频率}兆赫、

OC={在线内核屏蔽}、

TA={时间扭曲线程关联性}/{主线程关联性}

LCnt={层计数}、

GPU%={GPU利用率}、

cpu %={平均cpu利用率}(w {精纺核心cpu利用率})

这些指标按照它们在VrApi日志行中出现的顺序排序。 我已经指出了每个参数,并给出了我个人的实际分数(共5分)(如果有必要,你可能会发现它们多少有些用处)。

4.1测量的中央处理器核心

实用程序分数1/5

该数字仅表示报告中央处理器频率时测量的核心。对于大多数的中央处理器架构来说,它们有不同大小的内核,除非中央处理器级别设置为0,否则它们将变成大内核。

4.2在线核心掩码

实用性分数0/5

当中央处理器操作级别设置为低时,旧档位VR将关闭。现代的中央处理器不再这样做,并且可以在不使内核离线的情况下降低其能耗。因此,它不是很有用。

4.3 timewar/main/render threadaffinity

practivity score:3/5

这表示各种线程的线程亲和性。这对于判断线程是否在大内核上运行非常有用,但是最好现在避免手动设置相似性。对于任务,时间扭曲将显示为0。

4.4 timewar/main/render thread scheduling priority

practical score:4/5

这表示线程的优先级。“f”=sched _ FIFO是最高优先级,“n”=sched _ normal。时间偏差应该总是“f”,但对于Quest来说是“n”。如果您将“主”和“渲染”传递给vrapi_SetPerfThreads(UE4将自动执行此操作),它们将被设置为f.

4.5节电模式

实用性分数:0/5

节电模式是一个二进制值,它仅指示是否节电管理。

4.6监护图形处理器时间

实用性分数:3/5

类似于图形处理器应用时间和时间扭曲图形处理器时间,我们测量并报告保护系统图形处理器时间。当然,这只会对探索有用。这个号码你无能为力。因此,除了告诉你保护系统的GPU时间之外,它不是很有用。

4.7 CPU GPU时间

实用性分数:5/5

实用性分数:0/5

这是应用程序渲染帧所花费的总时间。目前仅在使用统一或不真实引擎时可用,它测量渲染或RHI线程的帧处理,直到GPU完成渲染。从中减去应用程序GPU时间可以计算渲染线程的近似时钟时间。如果这是您的瓶颈,这些参数可能会很有用。

4.8层计数

实用性分数:3/5

时间扭曲每帧渲染的层数。这包括保护系统等系统层。你最好注意,因为这个数字和时间扭曲GPU时间有直接的关系。保持在最低限度将有助于避免撕裂图片。

5。挖掘深度

虽然OVR度量工具和VrApi日志允许您轻松访问一些关键指标,但这通常只是渲染文档和快照龙事件探查器等工具的第一步。主要的游戏引擎还包括优秀的性能分析工具,用于调试处理器瓶颈。

原始链接:https://yivian.com/news/68288.html

日期归档
  • 友情链接:
  • 雨花台资讯网 版权所有© www.hcyxsq.cn 技术支持:雨花台资讯网| 网站地图