CPU分析对优化VR应用十分有用。在日前一篇博文中,Meta表示Linux Perf工具的Android实现SimplePerf现在已经支持Meta Quest设备。
与Perfetto等其他常用工具不同,SimplePerf不需要修改源代码,这样你就可以更容易地发现应用中的性能热点,同时它允许你检查整个应用的性能,无需在源代码中插入标记。
工作原理
SimplePerf是一个采样分析器,这意味着你可以给它一组要记录的事件,以及写出其中sample的频率。在每个时间间隔,你的应用都会被中断,并会记录一个sample。SimplePerf使用应用中的symbols将样本与源代码关联。你可以记录多种类型的软件和硬件事件。
默认情况下,SimplePerf记录cpu-cycle事件。对于通过计算所有已用cpu-cycle来确定执行部分应用所需的时间而言,这非常有用。录制事件时,它会显示应用中最长和最频繁调用的函数。函数运行的时间越长,它越有可能被采样中断。你可能会发现cpu-cycle事件对于大多数调查来说已经足够,但有其他事件可以与之结合使用,从而可能有助于确定代码速度慢的原因。
“cache-misses”事件统计CPU数据缓存miss。函数发生的缓存miss越多,它在报告中显示的可能性就越大。它可以记录其他类似的计数器事件,如“instructions”和“page-faults”等等。
SimplePerf用例
SimplePerf并非适合所有性能调查。例如,SimplePerf无法轻松帮助你找到帧峰值的原因,因为它不善于揭示偶尔缓慢的代码。SimplePerf所能做的就是报告它为给定函数记录的sample量,所以如果你有一个执行1000次的函数“foo”,并且只有其中一次速度很慢,SimplePerf只会告诉你它为foo调用记录了N个sample。对于这种情况,诸如Perfetto这样的工具将更为有用。
另外,特定函数可能不会包含在报告中,因为它们出现在sample之间。你可以通过增加采样频率来增加快速函数采样的可能性,但增加采样会增加应用的开销。你可能需要调整每个事件的频率,从而在开销和准确性之间取得平衡。
SimplePerf可以很好地帮助你全面了解应用的性能,无需首先标记代码。能够对各种硬件和软件事件进行采样,这不仅可以帮助你更容易地找到速度慢的地方,并且可以找到和判断相关原因。