Poor performance in comparison with OpenGL 4

Hello. I was facing the trouble: I have a really bad performance with 3d apps when it uses Vulkan. In that time performance with OpenGL4 is good.

For example Unreal Engine 4:

Windows 10 = 100 FPS (+/- 5)
Ubuntu 18.04 (KDE Neon) with OpenGL4 target = 85-90 FPS
Ubuntu 18.04 (KDE Neon) with Vulkan taget = 25-35 FPS

Why is so big difference beetween OpenGL 4 and Vulkan ?

My hardware info:

PROCESSOR:          Intel Core i7-8550U @ 4.00GHz
    Core Count:       4                                        
    Thread Count:     8                                        
    Extensions:       SSE 4.2 + AVX2 + AVX + RDRAND + FSGSBASE
    Cache Size:       8192 KB                                  
    Microcode:        0xb4                                     
    Scaling Driver:   intel_pstate powersave                   

  GRAPHICS:           NVIDIA GeForce 930MX 2GB
    Frequency:        954/1001MHz      
    OpenGL:           4.6.0            
    Vulkan:           1.1.102          
    Display Driver:   NVIDIA 430.50    
    Screen:           1920x1080        

  MOTHERBOARD:        HP 837D
    BIOS Version:     Q85 Ver. 01.02.05                             
    Chipset:          Intel Xeon E3-1200 v6/7th                     
    Audio:            Conexant CX8200                               
    Network:          Realtek RTL8111/8168/8411 + Intel 8265 / 8275

  MEMORY:             8192MB

  DISK:               1000GB HGST HTS541010B7
    File-System:      ext4             
    Mount Options:    relatime rw      
    Disk Scheduler:   MQ-DEADLINE      

  OPERATING SYSTEM:   neon 18.04
    Kernel:           5.0.0-31-generic (x86_64)                                                                                   
    Desktop:          KDE Plasma 5.17.0                                                                                           
    Display Server:   X Server 1.19.6                                                                                             
    Compiler:         GCC 7.4.0 + Clang 6.0.0-1ubuntu2                                                                            
    Security:         l1tf: Mitigation of PTE Inversion; VMX: conditional cache flushes SMT vulnerable                            
                      + mds: Mitigation of Clear buffers; SMT vulnerable                                                          
                      + meltdown: Mitigation of PTI                                                                               
                      + spec_store_bypass: Mitigation of SSB disabled via prctl and seccomp                                       
                      + spectre_v1: Mitigation of usercopy/swapgs barriers and __user pointer sanitization                        
                      + spectre_v2: Mitigation of Full generic retpoline IBPB: conditional IBRS_FW STIBP: conditional RSB filling

Nvidia driver info:

Thu Oct 17 13:50:38 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.50       Driver Version: 430.50       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce 930MX       Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   47C    P0    N/A /  N/A |    506MiB /  2004MiB |     14%      Default |
+-------------------------------+----------------------+----------------------+

OpengGL and Vulkan ver.:

OpenGL version string: 4.6.0 NVIDIA 430.50
Vulkan Instance Version: 1.1.114

Please, help.
Thanks!

Here is duplication of the topic on Unreal Engine forum: https://answers.unrealengine.com/questions/930264/view.html

NVIDIA GeForce 930MX 2GB

This is quite a constrained card. I can totally imagine the Vulkan Unreal 4 benchmark you’re using tipping over 2GB in Vulkan and not handling the situation as well as NVIDIA OpenGL driver.

Are you able to reproduce these performance difference on other machines with more than 2GB?

You can use the SMI command line you’ve pasted above to check the memory usage while you’re running the performance tests to see how close you are to memory being full.

This is quite a constrained card.

Yes, I agree. But in that time I have a good perfomance with OpenGL4 or DirectX.

Are you able to reproduce these performance difference on other machines with more than 2GB?

Unfortunately no :( I have several notebooks from HP and Lenovo, but they all have similar GPUs

You can use the SMI command line you’ve pasted above to check the memory usage while you’re running the performance tests to see how close you are to memory being full.

Thanks for hint, I’ll try it with OpenGL4 and Vulkan and share results.

I can totally imagine the Vulkan Unreal 4 benchmark you’re using tipping over 2GB in Vulkan and not handling the situation as well as NVIDIA OpenGL driver.

It would be cool. Which OS and drivers version are you using?


But, in same time I’m a bit confused. Because I understand if I have a poor perfomance on all hardware/software stuff, on Windows/DirectX or Linux/OpenGL, or Linux/Vulkan. But no. I have problems only with Vulkan.

Khronos told me:

Khronos only provides the api specification for Vulkan. The actual implementation is done inside the driver.
Judging from my experience with NVIDIA and Vulkan their driver is very good and performance with Vulkan is usually better than with OpenGL due to the much lower overhead.
And most of the time low Vulkan performance is an application problem, so you’d have to ask the people that implemented Vulkan in the Unreal Engine why performance is so low compared to OpenGL. Usually that’s caused by bad api usage, e.g. over-synchronization, not moving buffer data to the GPU, etc.

(also I’m trying to discuss with Epics)


A don’t think that problems due to insufficient perfomance of that GPU for that tasks (I also tried to reduce and images quality, I did tried a lot of difference driver’s configuration, I tried to reduce resolution. No significant changes with Vulkan).

So, is there any change that this problem with Vulkan of specific GPUs family?

Ok, here is SMI output:

Without UE4 loaded, compositing is enabled:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.50       Driver Version: 430.50       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce 930MX       Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   47C    P0    N/A /  N/A |    515MiB /  2004MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      2189      G   /usr/lib/xorg/Xorg                           182MiB |
|    0      2427      G   /usr/bin/kwin_x11                              4MiB |
|    0      2433      G   /usr/bin/plasmashell                          74MiB |
|    0      2498      G   /usr/bin/latte-dock                           17MiB |
|    0      7246      G   /snap/anbox/158/usr/bin/anbox                230MiB |
+-----------------------------------------------------------------------------+

Compositing is disabled, UE4 scene loaded with OpenGL4 target ~65FPS

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.50       Driver Version: 430.50       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce 930MX       Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   56C    P0    N/A /  N/A |    794MiB /  2004MiB |      2%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      2189      G   /usr/lib/xorg/Xorg                           185MiB |
|    0      2427      G   /usr/bin/kwin_x11                              1MiB |
|    0      2433      G   /usr/bin/plasmashell                          74MiB |
|    0      2498      G   /usr/bin/latte-dock                           17MiB |
|    0      3429    C+G   ...lEngine/Engine/Binaries/Linux/UE4Editor   277MiB |
|    0      7246      G   /snap/anbox/158/usr/bin/anbox                230MiB |
+-----------------------------------------------------------------------------+

Compositing is disabled, UE4 scene loaded with Vulkan target ~25-30FPS:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.50       Driver Version: 430.50       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce 930MX       Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   53C    P0    N/A /  N/A |   1111MiB /  2004MiB |      2%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      2189      G   /usr/lib/xorg/Xorg                           190MiB |
|    0      2427      G   /usr/bin/kwin_x11                              1MiB |
|    0      2433      G   /usr/bin/plasmashell                          74MiB |
|    0      2498      G   /usr/bin/latte-dock                           17MiB |
|    0      6243    C+G   ...lEngine/Engine/Binaries/Linux/UE4Editor   586MiB |
|    0      7246      G   /snap/anbox/158/usr/bin/anbox                230MiB |
+-----------------------------------------------------------------------------+

Here is duplication of the topic on Unreal Engine forum: https://answers.unrealengine.com/questions/930264/view.html