Why performance of Vulkan is so poor (nvidia)?

Hello.
I’m facing the trouble that I have a poor FPS with Unreal Engine 4 when it uses the Vulkan target.
(sorry, I don’t know where I must place this theme: Vulkan or Vulkan-Hardware)

So with same hardware stuff and same scene I have:

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

The main question: why is so big difference beetween OpenGL 4 and Vulkan ?

Here is my environment:

  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:

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 info:

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

I want be sure that it is not fail exactly of UnrealEngine4.
I should know whose that issue: Nvidia, Khronos or Epic ?

So I should to make detailed benchmark for OpenGL4 and Vulkan with my staff, how I can do it correctly?
Any ideas? (Or maybe somebody know what I’m doing wrong? Why Vulkan have a so poor perfomance?).

Please, help.
Thanks!

(this post is puplicated on phoronix forum)

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.

Hm, this is some switchable graphics.

By any chance, does it accidentally run on the iGPU?

krOoze,

No, with GPU is completely freezes (same as trying to use nouveau) even to try to use OpenGL4.
So, I’m using GPU with proprietary driver and nvidia-config with max performance (instead of quality).

Many thanks for clarification and your advice. I’ll try to open issue for Epics.

We saw an 80% increase in rendering speed when we switched from OpenGL to Vulkan.

Could you specify which GPU (vendor, GPU family) and Drivers are you tested in, please?

GEForce 2080, don’t know the driver. Most of the savings was in data being sent to the GPU each frame, I think, as that was our bottleneck.

I’ve got a bit funny situation: I’ve moved UE4 from HDD to SSD and it increases FPS in viewport from 25-30 to 35-40 FPS.

How it can be related?