我正在寻找有关如何使我的 EGLFS qt 应用程序在 etnaviv 驱动程序下的性能与在 IMX6 上的专有 Vivante 驱动程序下一样好的指导。
使用仅绘制 QLabel 小部件的简单 qt 测试应用程序,在 Etnaviv 驱动程序下的性能明显比在 Vivnate 驱动程序下差。渲染时间大约高 5-6 倍(~9mS 到大约 45-55mS),CPU 负载高 3 倍(3% 到 ~9%)。(软件渲染的)鼠标也很慢,鼠标到光标的延迟从大约 100 毫秒到 300 毫秒。
两个系统设置之间存在许多较大的软件差异,但在投入大量时间消除这些差异之前,我想调查一下可能导致这种减速的原因。本质上我是在比较:
- 一个基于 Vivante 的系统,在 Yocto Krogarth(Qt 5.4 和内核 4.1.15)上运行,带有 NXP 的专有驱动程序。该系统使用 EGLFS iMX6 后端。
- 在 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 等)。