Weird performance difference on LVGL

Hi,

As we’re searching for the right platform to run LVGL on, we discovered a weird scenario that left me scratching my head a bit.

The first platform we tried was an STM32F748 with external ram and flash, running at 480MHz. With that, we got 93FPS in the built in benchmark.

Since this architecture didn’t prove enough for our PoC we went to a Colibri IMX6ULL module. The odd thing is that the benchmark performance of this setup with framebuffer output was only 27FPS, well below what we got with a microcontroller that’s only half its frequency. There’s also an LVGL port on GitHub done on an IMX93 that had similar results, so while our quick test definite didn’t get all the performance of the module, I don’t think we were too far off.

Any ideas on why got such different results than what you’d normally expect?

Hi, I’m the Toradex AI Assistant. The Toradex Support team will follow up with you shortly!

Did you like my answer?

:+1: :-1:


Hello,

Thank you for reaching out with your question about the performance differences you’re observing with LVGL on different platforms. It’s indeed intriguing to see the Colibri iMX6ULL underperforming compared to the STM32F748, despite its higher clock speed. Here are some factors that might explain this:

  1. Graphics Processing: The STM32F748 might have optimizations or dedicated hardware for graphics tasks, which the iMX6ULL may lack without additional configuration.

  2. Software Configuration: The way LVGL is set up can greatly affect performance. Make sure LVGL is configured to leverage the iMX6ULL’s capabilities, such as setting appropriate buffer sizes and enabling any available hardware acceleration.

  3. Memory Access: The iMX6ULL’s use of external RAM can introduce latency. Optimizing memory access and cache usage can help improve performance.

  4. Operating System Overhead: Running a full Linux OS on the iMX6ULL introduces overhead not present in the STM32F748’s environment, which can impact real-time performance.

  5. Benchmark Conditions: Ensure that the conditions under which you run benchmarks are consistent across platforms, as differences in display settings can affect results.

To enhance performance on the Colibri iMX6ULL, consider these steps:

  • Enable Hardware Acceleration: Utilize any available GPU or hardware acceleration to offload graphics tasks from the CPU.
  • Optimize LVGL Settings: Adjust settings like buffer sizes and enable double buffering to better match the iMX6ULL’s architecture.
  • Profile and Optimize: Use profiling tools to identify and optimize bottlenecks in your application.
  • Reduce OS Overhead: Minimize background processes and optimize the Linux kernel to reduce system overhead.

I hope these suggestions help you achieve better performance with LVGL on the Colibri iMX6ULL. If you have further questions, feel free to ask.

Best regards,
Toradex AI Assistant

Please, also check if these links can help you solve your problem:

iMX6ULL GUI Application.

Hi @alex_alsense

Which display resolution do you use (both on STM32F748, on iMX6ULL and iMX93)?
Which OS do you use on the different processors?

1 Like

The IMX6ULL is using 800x480, STM32 was using 1024x600 and the IMX93 1280x800 (but has 1.5Ghz).

IMX6ULL is using Torizon OS, but running outside of any container, STM32 was bare metal. The IMX93 I’m actually not sure, as it was done by LVGL themselves (lv_port_nxp_imx93/README.md at master · lvgl/lv_port_nxp_imx93 · GitHub).

Do you mean that you installed weston directly in Torizon OS (and notmin its container)?
Which bus do you use to connect the display? LVDS?
In the datasheet for iMX6ULL I see

LVDS interface is limited to 1366 x 768 @ 60fps, 18bpp

I’m using the resistive 7" display from Toradex, I think it uses a parallel interface. LVGL writes directly to the framebuffer (same as the IMX93 benchmark)

I see that LVGL on Linux writes directly to the framebuffer.
But it has some options to configure which framebuffer should be used.
See here.
Do you know if the legacy framebuffer /dev/fb0 is used?
Maybe you can try leverage on Wayland, and I think the best approach should be this one.
I haven’t tried, but I’ll give it a try.