i.MX8MP: ~40% OpenGL ES performance regression between imx-gpu-viv 6.2.4 (Yocto 3.0 / kernel 6.6)

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

i.MX8MP: ~40% OpenGL ES performance regression between imx-gpu-viv 6.2.4 (Yocto 3.0 / kernel 6.6)

664 Views
djordje_nod
Contributor I

Platform: i.MX8MP, Vivante GC7000UL (model=7000, revision=6204)
GPU cores: GC7000UL 3D + GC520L 2D + GC8000 ML
Kernel type: PREEMPT_RT on both setups

========================================
Setup A (baseline):
========================================
Yocto 3.0, kernel 5.4 (PREEMPT_RT)
imx-gpu-viv 6.2.4.p4.0 (user-space)
kernel-module-imx-gpu-viv 6.2.4.p1.2
glmark2 2017.07, off-screen: score 697

========================================
Setup B (regression):
========================================
Yocto 5.0 (scarthgap), kernel 6.6 (PREEMPT_RT)
imx-gpu-viv 6.4.11.p2.4 (user-space)
kernel-module-imx-gpu-viv 6.4.11.p2.2
glmark2 2023.01, off-screen: score 426

Observed regression: ~39% lower score on identical hardware
at identical GPU clock (1 GHz).

GPU clock confirmed on Setup B:
gpu3d_core=1GHz
gpu3d_shader_core=1GHz
gpu2d_core=1GHz
gpu_axi=800MHz
gpu_ahb=400MHz

glmark2 output on Setup B:
GL_VENDOR: Vivante Corporation
GL_RENDERER: Vivante GC7000UL
GL_VERSION: OpenGL ES 3.1 V6.4.11.p2.745085

[build] use-vbo=false: FPS: 831
[build] use-vbo=true: FPS: 1243
[texture] nearest: FPS: 942
[texture] linear: FPS: 901
[texture] mipmap: FPS: 797
[shading] gouraud: FPS: 662
[shading] blinn-phong: FPS: 597
[shading] phong: FPS: 404
[shading] cel: FPS: 353
[bump] high-poly: FPS: 392
[bump] normals: FPS: 781
[bump] height: FPS: 512
[effect2d] 3x3 kernel: FPS: 263
[effect2d] 5x5 kernel: FPS: 113
[pulsar] <default>: FPS: 628
[desktop] blur: FPS: 128
[desktop] shadow: FPS: 282
[buffer] map: FPS: 135
[buffer] subdata: FPS: 134
[buffer] interleave: FPS: 185
[ideas] <default>: FPS: 175
[jellyfish] <default>: FPS: 188
[terrain] <default>: FPS: 19
[shadow] <default>: FPS: 390
[refract] <default>: FPS: 56
[conditionals] v=0,f=0: FPS: 733
[conditionals] v=0,f=5: FPS: 184
[conditionals] v=5,f=0: FPS: 696
[function] low,5: FPS: 334
[function] medium,5: FPS: 195
[loop] no-uniform: FPS: 327
[loop] non-uniform: FPS: 325
[loop] uniform: FPS: 203

glmark2 Score: 426

========================================
What we have ruled out (all tested, no improvement):
========================================

1. powerManagement=0 galcore module param -> no change
2. gcdPOWEROFF_TIMEOUT=0 (kernel patch) -> no change
3. gcdSHARED_PAGETABLE=0 (kernel patch) -> no change
4. GPU clock stuck (devfreq) -> no devfreq present,
clock confirmed 1 GHz

Note on gcdWAIT_LINK_FE_MODE: this define does not exist in
gc_hal_options.h in imx-gpu-viv 6.2.4. The V3.0 gc_hal_kernel.c
hardcodes gcvHW_FE_WAIT_LINK unconditionally anyway, so there is no
FE mode difference between the two setups. Setting
gcdWAIT_LINK_FE_MODE=0 in 6.4.11 forces gcvHW_FE_END mode which
results in a black screen and is not functional.

========================================
Root cause hypothesis:
========================================

Since imx-gpu-viv is a closed-source binary package and all
kernel-level tunables show no effect, we believe the regression is
inside the user-space shader compiler or command buffer generator in
imx-gpu-viv 6.4.11 vs 6.2.4. Fragment-shader-heavy scenes (phong,
cel, terrain, refract) show the largest relative drop, which is
consistent with a shader compiler quality regression.

========================================
Questions:
========================================

1. Is there a known performance regression in imx-gpu-viv 6.4.11 on
GC7000UL compared to 6.2.4?

2. Is there a newer imx-gpu-viv release (6.4.11.p3 or later) that
addresses this?

3. Are there any runtime environment variables (e.g. VIV_*) or Yocto
recipe options for imx-gpu-viv 6.4.11 that can improve OpenGL ES
fragment shader performance on i.MX8MP?

Labels (1)
0 Kudos
Reply
1 Reply

472 Views
Manuel_Salas
NXP TechSupport
NXP TechSupport

Hello @djordje_nod 

 

Hope you are doing very well.

 

1. Is there a known performance regression in imx-gpu-viv 6.4.11 on
GC7000UL compared to 6.2.4?

There are not known issues related to the performance regression.

 

2. Is there a newer imx-gpu-viv release (6.4.11.p3 or later) that
addresses this?

Ac moment, the last one is 6.4.11.

 

3. Are there any runtime environment variables (e.g. VIV_*) or Yocto
recipe options for imx-gpu-viv 6.4.11 that can improve OpenGL ES
fragment shader performance on i.MX8MP?

You can take a look to the chapter 13.5.4.1 Setting vProfiler property options for OpenGL ES of the IMXGRAPHICUG.

 

Best regards,

Salas.

0 Kudos
Reply
%3CLINGO-SUB%20id%3D%22lingo-sub-2369369%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3Ei.MX8MP%3A%20~40%25%20OpenGL%20ES%20performance%20regression%20between%20imx-gpu-viv%206.2.4%20(Yocto%203.0%20%2F%20kernel%206.6)%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2369369%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EPlatform%3A%20i.MX8MP%2C%20Vivante%20GC7000UL%20(model%3D7000%2C%20revision%3D6204)%3CBR%20%2F%3EGPU%20cores%3A%20GC7000UL%203D%20%2B%20GC520L%202D%20%2B%20GC8000%20ML%3CBR%20%2F%3EKernel%20type%3A%20PREEMPT_RT%20on%20both%20setups%3C%2FP%3E%3CP%3E%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3CBR%20%2F%3ESetup%20A%20(baseline)%3A%3CBR%20%2F%3E%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3CBR%20%2F%3EYocto%203.0%2C%20kernel%205.4%20(PREEMPT_RT)%3CBR%20%2F%3Eimx-gpu-viv%206.2.4.p4.0%20(user-space)%3CBR%20%2F%3Ekernel-module-imx-gpu-viv%206.2.4.p1.2%3CBR%20%2F%3Eglmark2%202017.07%2C%20off-screen%3A%20score%20697%3C%2FP%3E%3CP%3E%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3CBR%20%2F%3ESetup%20B%20(regression)%3A%3CBR%20%2F%3E%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3CBR%20%2F%3EYocto%205.0%20(scarthgap)%2C%20kernel%206.6%20(PREEMPT_RT)%3CBR%20%2F%3Eimx-gpu-viv%206.4.11.p2.4%20(user-space)%3CBR%20%2F%3Ekernel-module-imx-gpu-viv%206.4.11.p2.2%3CBR%20%2F%3Eglmark2%202023.01%2C%20off-screen%3A%20score%20426%3C%2FP%3E%3CP%3EObserved%20regression%3A%20~39%25%20lower%20score%20on%20identical%20hardware%3CBR%20%2F%3Eat%20identical%20GPU%20clock%20(1%20GHz).%3C%2FP%3E%3CP%3EGPU%20clock%20confirmed%20on%20Setup%20B%3A%3CBR%20%2F%3Egpu3d_core%3D1GHz%3CBR%20%2F%3Egpu3d_shader_core%3D1GHz%3CBR%20%2F%3Egpu2d_core%3D1GHz%3CBR%20%2F%3Egpu_axi%3D800MHz%3CBR%20%2F%3Egpu_ahb%3D400MHz%3C%2FP%3E%3CP%3Eglmark2%20output%20on%20Setup%20B%3A%3CBR%20%2F%3EGL_VENDOR%3A%20Vivante%20Corporation%3CBR%20%2F%3EGL_RENDERER%3A%20Vivante%20GC7000UL%3CBR%20%2F%3EGL_VERSION%3A%20OpenGL%20ES%203.1%20V6.4.11.p2.745085%3C%2FP%3E%3CP%3E%5Bbuild%5D%20use-vbo%3Dfalse%3A%20FPS%3A%20831%3CBR%20%2F%3E%5Bbuild%5D%20use-vbo%3Dtrue%3A%20FPS%3A%201243%3CBR%20%2F%3E%5Btexture%5D%20nearest%3A%20FPS%3A%20942%3CBR%20%2F%3E%5Btexture%5D%20linear%3A%20FPS%3A%20901%3CBR%20%2F%3E%5Btexture%5D%20mipmap%3A%20FPS%3A%20797%3CBR%20%2F%3E%5Bshading%5D%20gouraud%3A%20FPS%3A%20662%3CBR%20%2F%3E%5Bshading%5D%20blinn-phong%3A%20FPS%3A%20597%3CBR%20%2F%3E%5Bshading%5D%20phong%3A%20FPS%3A%20404%3CBR%20%2F%3E%5Bshading%5D%20cel%3A%20FPS%3A%20353%3CBR%20%2F%3E%5Bbump%5D%20high-poly%3A%20FPS%3A%20392%3CBR%20%2F%3E%5Bbump%5D%20normals%3A%20FPS%3A%20781%3CBR%20%2F%3E%5Bbump%5D%20height%3A%20FPS%3A%20512%3CBR%20%2F%3E%5Beffect2d%5D%203x3%20kernel%3A%20FPS%3A%20263%3CBR%20%2F%3E%5Beffect2d%5D%205x5%20kernel%3A%20FPS%3A%20113%3CBR%20%2F%3E%5Bpulsar%5D%20%3CDEFAULT%3E%3A%20FPS%3A%20628%3CBR%20%2F%3E%5Bdesktop%5D%20blur%3A%20FPS%3A%20128%3CBR%20%2F%3E%5Bdesktop%5D%20shadow%3A%20FPS%3A%20282%3CBR%20%2F%3E%5Bbuffer%5D%20map%3A%20FPS%3A%20135%3CBR%20%2F%3E%5Bbuffer%5D%20subdata%3A%20FPS%3A%20134%3CBR%20%2F%3E%5Bbuffer%5D%20interleave%3A%20FPS%3A%20185%3CBR%20%2F%3E%5Bideas%5D%20%3CDEFAULT%3E%3A%20FPS%3A%20175%3CBR%20%2F%3E%5Bjellyfish%5D%20%3CDEFAULT%3E%3A%20FPS%3A%20188%3CBR%20%2F%3E%5Bterrain%5D%20%3CDEFAULT%3E%3A%20FPS%3A%2019%3CBR%20%2F%3E%5Bshadow%5D%20%3CDEFAULT%3E%3A%20FPS%3A%20390%3CBR%20%2F%3E%5Brefract%5D%20%3CDEFAULT%3E%3A%20FPS%3A%2056%3CBR%20%2F%3E%5Bconditionals%5D%20v%3D0%2Cf%3D0%3A%20FPS%3A%20733%3CBR%20%2F%3E%5Bconditionals%5D%20v%3D0%2Cf%3D5%3A%20FPS%3A%20184%3CBR%20%2F%3E%5Bconditionals%5D%20v%3D5%2Cf%3D0%3A%20FPS%3A%20696%3CBR%20%2F%3E%5Bfunction%5D%20low%2C5%3A%20FPS%3A%20334%3CBR%20%2F%3E%5Bfunction%5D%20medium%2C5%3A%20FPS%3A%20195%3CBR%20%2F%3E%5Bloop%5D%20no-uniform%3A%20FPS%3A%20327%3CBR%20%2F%3E%5Bloop%5D%20non-uniform%3A%20FPS%3A%20325%3CBR%20%2F%3E%5Bloop%5D%20uniform%3A%20FPS%3A%20203%3C%2FDEFAULT%3E%3C%2FDEFAULT%3E%3C%2FDEFAULT%3E%3C%2FDEFAULT%3E%3C%2FDEFAULT%3E%3C%2FDEFAULT%3E%3C%2FP%3E%3CP%3Eglmark2%20Score%3A%20426%3C%2FP%3E%3CP%3E%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3CBR%20%2F%3EWhat%20we%20have%20ruled%20out%20(all%20tested%2C%20no%20improvement)%3A%3CBR%20%2F%3E%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3C%2FP%3E%3CP%3E1.%20powerManagement%3D0%20galcore%20module%20param%20-%26gt%3B%20no%20change%3CBR%20%2F%3E2.%20gcdPOWEROFF_TIMEOUT%3D0%20(kernel%20patch)%20-%26gt%3B%20no%20change%3CBR%20%2F%3E3.%20gcdSHARED_PAGETABLE%3D0%20(kernel%20patch)%20-%26gt%3B%20no%20change%3CBR%20%2F%3E4.%20GPU%20clock%20stuck%20(devfreq)%20-%26gt%3B%20no%20devfreq%20present%2C%3CBR%20%2F%3Eclock%20confirmed%201%20GHz%3C%2FP%3E%3CP%3ENote%20on%20gcdWAIT_LINK_FE_MODE%3A%20this%20define%20does%20not%20exist%20in%3CBR%20%2F%3Egc_hal_options.h%20in%20imx-gpu-viv%206.2.4.%20The%20V3.0%20gc_hal_kernel.c%3CBR%20%2F%3Ehardcodes%20gcvHW_FE_WAIT_LINK%20unconditionally%20anyway%2C%20so%20there%20is%20no%3CBR%20%2F%3EFE%20mode%20difference%20between%20the%20two%20setups.%20Setting%3CBR%20%2F%3EgcdWAIT_LINK_FE_MODE%3D0%20in%206.4.11%20forces%20gcvHW_FE_END%20mode%20which%3CBR%20%2F%3Eresults%20in%20a%20black%20screen%20and%20is%20not%20functional.%3C%2FP%3E%3CP%3E%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3CBR%20%2F%3ERoot%20cause%20hypothesis%3A%3CBR%20%2F%3E%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3C%2FP%3E%3CP%3ESince%20imx-gpu-viv%20is%20a%20closed-source%20binary%20package%20and%20all%3CBR%20%2F%3Ekernel-level%20tunables%20show%20no%20effect%2C%20we%20believe%20the%20regression%20is%3CBR%20%2F%3Einside%20the%20user-space%20shader%20compiler%20or%20command%20buffer%20generator%20in%3CBR%20%2F%3Eimx-gpu-viv%206.4.11%20vs%206.2.4.%20Fragment-shader-heavy%20scenes%20(phong%2C%3CBR%20%2F%3Ecel%2C%20terrain%2C%20refract)%20show%20the%20largest%20relative%20drop%2C%20which%20is%3CBR%20%2F%3Econsistent%20with%20a%20shader%20compiler%20quality%20regression.%3C%2FP%3E%3CP%3E%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3CBR%20%2F%3EQuestions%3A%3CBR%20%2F%3E%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3C%2FP%3E%3CP%3E1.%20Is%20there%20a%20known%20performance%20regression%20in%20imx-gpu-viv%206.4.11%20on%3CBR%20%2F%3EGC7000UL%20compared%20to%206.2.4%3F%3C%2FP%3E%3CP%3E2.%20Is%20there%20a%20newer%20imx-gpu-viv%20release%20(6.4.11.p3%20or%20later)%20that%3CBR%20%2F%3Eaddresses%20this%3F%3C%2FP%3E%3CP%3E3.%20Are%20there%20any%20runtime%20environment%20variables%20(e.g.%20VIV_*)%20or%20Yocto%3CBR%20%2F%3Erecipe%20options%20for%20imx-gpu-viv%206.4.11%20that%20can%20improve%20OpenGL%20ES%3CBR%20%2F%3Efragment%20shader%20performance%20on%20i.MX8MP%3F%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-2369369%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3Ei.MX%208M%20%7C%20i.MX%208M%20Mini%20%7C%20i.MX%208M%20Nano%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2374584%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20i.MX8MP%3A%20~40%25%20OpenGL%20ES%20performance%20regression%20between%20imx-gpu-viv%206.2.4%20(Yocto%203.0%20%2F%20kernel%206.6%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2374584%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F221973%22%20target%3D%22_blank%22%3E%40djordje_nod%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3EHope%20you%20are%20doing%20very%20well.%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%3CSTRONG%3E1.%20Is%20there%20a%20known%20performance%20regression%20in%20imx-gpu-viv%206.4.11%20on%3C%2FSTRONG%3E%3CBR%20%2F%3E%3CSTRONG%3EGC7000UL%20compared%20to%206.2.4%3F%3C%2FSTRONG%3E%3C%2FP%3E%0A%3CP%3EThere%20are%20not%20known%20issues%20related%20to%20the%26nbsp%3Bperformance%20regression.%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%3CSTRONG%3E2.%20Is%20there%20a%20newer%20imx-gpu-viv%20release%20(6.4.11.p3%20or%20later)%20that%3C%2FSTRONG%3E%3CBR%20%2F%3E%3CSTRONG%3Eaddresses%20this%3F%3C%2FSTRONG%3E%3C%2FP%3E%0A%3CP%3EAc%20moment%2C%20the%20last%20one%20is%26nbsp%3B6.4.11.%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%3CSTRONG%3E3.%20Are%20there%20any%20runtime%20environment%20variables%20(e.g.%20VIV_*)%20or%20Yocto%3C%2FSTRONG%3E%3CBR%20%2F%3E%3CSTRONG%3Erecipe%20options%20for%20imx-gpu-viv%206.4.11%20that%20can%20improve%20OpenGL%20ES%3C%2FSTRONG%3E%3CBR%20%2F%3E%3CSTRONG%3Efragment%20shader%20performance%20on%20i.MX8MP%3F%3C%2FSTRONG%3E%3C%2FP%3E%0A%3CP%3EYou%20can%20take%20a%20look%20to%20the%20chapter%26nbsp%3B13.5.4.1%20Setting%20vProfiler%20property%20options%20for%20OpenGL%20ES%20of%20the%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fwww.nxp.com%2Fdocs%2Fen%2Fuser-guide%2Fi.MX_AA_Graphics_User's_Guide.pdf%22%20target%3D%22_self%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3EIMXGRAPHICUG%3C%2FA%3E.%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3EBest%20regards%2C%3C%2FP%3E%0A%3CP%3ESalas.%3C%2FP%3E%3C%2FLINGO-BODY%3E