0

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

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

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

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

渲染的输出在它们之间是相同的,但 Etnaviv 的性能很差。'perf' 表明超过 43% 的应用程序时间花费在对 Etnaviv 的 drm_ioctl 调用上。

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

关于我可以尝试/检查以查看导致性能问题的原因的任何建议?(内核配置、Mesa 配置、Qt 配置、环境变量、DTS 等)。

4

1 回答 1

0

回答我自己的问题。该问题由 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 此解决方法已为 IMX6Q 隐式启用在 2020 年 8 月 18 日之后的 U-boot 版本中(使用 SHA1 f27ffe4177a7cc09614e2f87012234c1e260c8f2)。修改 U-boot 以强制禁用此勘误解决方法可解决此问题。据我所知,我们从未遇到勘误表中描述的情况,但是其他面临此问题的人需要在禁用解决方法之前验证勘误表不会影响他们。

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

于 2021-12-16T14:05:05.427 回答