Etnaviv 性能 vs 活着

Etnaviv performance vs Vivante

我正在寻找有关如何使我的 EGLFS qt 应用程序在 etnaviv 驱动程序下像在 IMX6 上的专有 Vivante 驱动程序下一样运行的指导。

对于仅绘制 QLabel 小部件的简单 qt 测试应用程序,Etnaviv 驱动程序下的性能明显低于 Vivnate 驱动程序。渲染时间大约高 5-6 倍(~9mS 到大约 45-55mS)并且 CPU 负载高 3 倍(3% 到 ~9%)。 (软件呈现的)鼠标也很迟钝,鼠标到光标的延迟从大约 100 毫秒到 300 毫秒不等。

这两个系统设置之间存在许多较大的软件差异,但在投入大量时间消除这些差异之前,我想调查可能导致这种速度下降的原因。本质上我是在比较:

  1. Yocto Krogarth(Qt 5.4 和内核 4.1.15)上基于 Vivante 的系统 运行,带有 NXP 的专有驱动程序。该系统使用 EGLFS iMX6 后端。
  2. Yocto Dunfell 上基于 Etnaviv 的系统 运行(使用 Qt 5.14.2 和内核 5.10.73-RT)。该系统正在使用 EGLFS KMS 后端 (GBM),引入 MESA/libdrm 等

它们之间的渲染输出相同,但 Etnaviv 性能较差。 'perf' 显示超过 43% 的应用程序时间花在了 drm_ioctl 对 Etnaviv 的调用上。

我已经阅读并尝试了 Qt EGLFS 网站上的大部分适用环境变量,但 none 产生了任何有意义的差异。 Mesa 和 Qt 配置看起来都很合理(并且是 Yocto Dunfell 和 Etnaviv 的标准配置)。

有什么建议可以让我 try/check 了解是什么导致了我的性能问题? (内核配置、Mesa 配置、Qt 配置、环境变量、DTS 等)。

回答我自己的问题。该问题由 2 个问题引起:(1) U-boot 中的勘误解决方法使 memcpy 性能降低了约 33%; (2) LDB 的时钟配置错误导致帧速率锁定为 ~14fps 或 ~28fps,具体取决于像素时钟的设置方式。

U-boot 中的勘误解决方法在这里:https://community.nxp.com/t5/i-MX-Processors/Cortex-A9-ARM-Errata-845369/td-p/399972 2020 年 8 月 18 日之后的 U-boot 版本(使用 SHA1 f27ffe4177a7cc09614e2f87012234c1e260c8f2)为 IMX6Q 隐式启用了此解决方法。修改 U-boot 以强制禁用此勘误解决方法可以解决此问题。据我所知,我们从未遇到勘误表中描述的情况,但是其他面临此问题的人将需要在禁用解决方法之前验证勘误表不会影响他们。

通过将时钟父级设置为视频 PLL 解决了 LDB 时钟问题,在 arch/arm/boot/dts/imx6qdl-zii-rdu2.dtsi

中也是如此