我正在寻找一些指导,了解如何使我的EGLFS qt应用程序在etnaviv驱动程序下的性能与在IMX6上的专有Vivante驱动程序下一样好。
使用一个只绘制QLabel小部件的简单qt测试应用程序,Etnaviv驱动程序的性能明显低于Vivnate驱动程序。渲染时间大约高出5-6倍(~9mS至45-55mS(,CPU负载高出3倍(3%至~9%(。(软件渲染的(鼠标也很迟钝,鼠标到光标的延迟从大约100mS上升到300mS。
这两个系统设置之间存在许多巨大的软件差异,但在投入大量时间消除这些差异之前,我想调查一下是什么导致了这种速度减慢。本质上,我在比较:
- 一个基于Vivante的系统,运行在Yocto Krogarth(Qt 5.4和内核4.1.15(上,带有恩智浦的专有驱动程序。此系统使用EGLFS iMX6后端
- 一个基于Etnaviv的系统在Yocto Dunfall上运行(带有Qt 5.14.2和内核5.10.73-RT(。该系统使用EGLFS KMS后端(GBM(,引入MESA/libdrm等
渲染输出在它们之间是可识别的,但Etnaviv性能较差。'perf’显示,超过43%的应用程序时间用于Etnaviv的drm_ioctl调用。
我已经阅读并尝试了Qt EGLFS网站上的大多数适用环境变量,但没有任何有意义的区别。Mesa和Qt配置看起来都很合理(也是Yocto Dunfall与Etnaviv的库存配置(。
有什么建议我可以尝试/检查一下,看看是什么导致了我的性能问题?(内核配置、Mesa配置、Qt配置、环境变量、DTS等(。
回答我自己的问题。这个问题是由两个问题引起的:(1(U-boot中的一个错误的解决方法使内存性能降低了约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版本中为IMX6Q隐式启用(使用SHA1 f27ffe4177a7cc09614e2f87012234c1e260c8f2(。修改U-boot以强制禁用此勘误表解决方法可以解决此问题。据我所知,我们从未达到勘误表中描述的条件,但其他面临此问题的人需要在禁用解决方法之前验证勘误表是否影响他们。
LDB时钟问题通过将时钟母级设置为视频PLL来解决,正如在arch/arm/boot/dts/imx6qdl-zii-rdu2.dtsi 中所做的那样