I'm looking for some guidance on how to make my EGLFS qt application perform as well under the etnaviv driver as it does under the proprietary Vivante driver on an IMX6.
With a simple qt test application that draws only a QLabel widget, the performance under the Etnaviv driver is signficiantly worse than under the Vivnate driver. Render times are approx 5-6 times higher (~9mS up to around 45-55mS) and CPU load 3 times higher (3% up to ~9%). The (software rendered) mouse is also sluggish, with mouse to cursor latency up from around 100mS to 300mS.
There are a number of large software differences between the two system seteps, but before investing a lot of time removing those differences, I'd like to investigate what might be causing this slow-down. Essentially I am comparing:
- A Vivante-based system running on Yocto Krogarth (Qt 5.4 and Kernel 4.1.15) with NXP's proprietary driver. This system is using a EGLFS iMX6 backend.
- A Etnaviv-based system running on Yocto Dunfell (with Qt 5.14.2 and Kernel 5.10.73-RT). This system is using a EGLFS KMS backend (GBMs), pulling in MESA/libdrm etc.
The rendered output is identifical between them, but the Etnaviv performance is poor. 'perf' shows that more than 43% of the applications time is spent on drm_ioctl calls for Etnaviv.
I've already read and tried most of the applicable environment variables on the Qt EGLFS website but none made any meaningful difference. The Mesa and Qt configs both look reasonable (and are the stock config for Yocto Dunfell with Etnaviv).
Any suggestions on things that I could try/check to see what's causing my performance issues? (Kernel config, Mesa config, Qt config, environment variables, DTS etc).