[SOLVED] Hybrid Graphics Performance?

Does anyone have any ideas why hybrid mode performance seems to be lacking?

I recently decided to check out linux again after several years of solely Win10 use. I used to use Sabyon(Gentoo) over a decade ago and had fun with it but just don’t have time to be always building from source these days!

After checking Distrowatch and seeing Garuda so high on the list I thought I’d give it a shot. While I liked several things about it, I had issues with it I won’t get into here.

So with that said; I just installed Endeavor and I’m trying to figure out why hybrid graphics mode is working sub par.

This is a fresh install. I have an AMD RX580 and an NVIDIA GT710. The proprietary drivers on the LiveUSB don’t work so I installed with nouveau. After install I then installed the linux-zen kernel, the nvidia-470xx-dkms drivers, the optimus-manager, and hardware acceleration packages for VAAPI, VDPAU, and Vulkan.

The Optimus-Manager switches between Hybrid, AMD, and Nvidia just fine and well with no issues. However, when I run my benchmarks the performance seems lacking. I’ve been using Unigine Superpostion for reference. In Windows I get a score of about 2400 with and average 18fps. In Garuda with Hybrid I was getting a score of about 2000 with 16-17fps, and In Endeavor Hybrid I’m getting a score of about 1800 with 15fps. If I switch to solely AMD it will bump back up to about 2000.

I didn’t try glmark2 in Garuda and doubt it’s available in Windows. However, I just tried it as well in case it was something related to Unigine that might be causing it. In Hybrid mode I get a score of about 800 and in AMD only mode I get a score of about 10,000 which seems in line with other’s: Graphic performance i5-1035G4 v.s. Ryzen 5 3500U

See below for system info and let me know if any other config files might be useful.
(not sure how the text blocks are deciding what gets colorized or not…)

inxi -Faz --no-host

System: Kernel: 5.15.5-zen1-1-zen x86_64 bits: 64 compiler: gcc v: 11.1.0 
parameters: BOOT_IMAGE=/boot/vmlinuz-linux-zen root=UUID=81fb4ef3-a903-4a96-8f2b-efd1be7a4af9 rw quiet pci=nommconf 
loglevel=3 nowatchdog 
Desktop: KDE Plasma 5.23.4 tk: Qt 5.15.2 wm: kwin_x11 vt: 1 dm: SDDM Distro: EndeavourOS base: Arch Linux 
Machine:   Type: Desktop System: Micro-Star product: MS-7B85 v: 1.0 serial: <superuser required> 
Mobo: Micro-Star model: B450 GAMING PRO CARBON AC (MS-7B85) v: 1.0 serial: <superuser required> 
UEFI: American Megatrends LLC. v: 1.F6 date: 09/30/2021 
Battery:   ID-1: hidpp_battery_0 charge: 27% condition: N/A volts: 3.7 min: N/A 
model: Logitech G903 Wired/Wireless Gaming Mouse type: N/A serial: <filter> status: Discharging 
CPU: Info: 6-Core model: AMD Ryzen 5 1600 bits: 64 type: MT MCP arch: Zen family: 17 (23) model-id: 1 stepping: 1 
microcode: 8001138 cache: L1: 576 KiB L2: 3 MiB L3: 16 MiB 
flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm bogomips: 76795 
Speed: 2138 MHz min/max: 1550/3200 MHz boost: enabled Core speeds (MHz): 1: 2388 2: 1374 3: 3194 4: 1360 5: 1359 
6: 1360 7: 3218 8: 1366 9: 2784 10: 1277 11: 1313 12: 1358 
Vulnerabilities: Type: itlb_multihit status: Not affected 
Type: l1tf status: Not affected 
Type: mds status: Not affected 
Type: meltdown status: Not affected 
Type: spec_store_bypass mitigation: Speculative Store Bypass disabled via prctl 
Type: spectre_v1 mitigation: usercopy/swapgs barriers and __user pointer sanitization 
Type: spectre_v2 mitigation: Full AMD retpoline, IBPB: conditional, STIBP: disabled, RSB filling 
Type: srbds status: Not affected 
Type: tsx_async_abort status: Not affected 
Graphics:  Device-1: NVIDIA GK208B [GeForce GT 710] vendor: Micro-Star MSI driver: nvidia v: 470.86 
alternate: nouveau,nvidia_drm bus-ID: 25:00.0 chip-ID: 10de:128b class-ID: 0300 
Device-2: Advanced Micro Devices [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] vendor: XFX Pine 
driver: amdgpu v: kernel bus-ID: 26:00.0 chip-ID: 1002:67df class-ID: 0300 
Device-3: Logitech HD Pro Webcam C920 type: USB driver: snd-usb-audio,uvcvideo bus-ID: 1-2.2:4 chip-ID: 046d:082d 
class-ID: 0102 serial: <filter> 
Display: x11 server: X.Org 1.21.1.1 compositor: kwin_x11 driver: loaded: modesetting,nvidia display-ID: :0 
screens: 1 
Screen-1: 0 s-res: 4880x2560 s-dpi: 96 s-size: 1291x677mm (50.8x26.7") s-diag: 1458mm (57.4") 
Monitor-1: DP-3 res: 3440x1440 hz: 144 dpi: 109 size: 800x335mm (31.5x13.2") diag: 867mm (34.1") 
Monitor-2: DVI-D-1-0 res: 1440x2560 hz: 60 
OpenGL: renderer: AMD Radeon RX 580 Series (POLARIS10 DRM 3.42.0 5.15.5-zen1-1-zen LLVM 13.0.0) v: 4.6 Mesa 21.2.5 
direct render: Yes 
Audio:  Device-1: NVIDIA GK208 HDMI/DP Audio vendor: Micro-Star MSI driver: snd_hda_intel v: kernel bus-ID: 25:00.1 
chip-ID: 10de:0e0f class-ID: 0403 
Device-2: AMD Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] vendor: XFX Pine driver: snd_hda_intel 
v: kernel bus-ID: 26:00.1 chip-ID: 1002:aaf0 class-ID: 0403 
Device-3: Advanced Micro Devices [AMD] Family 17h HD Audio vendor: Micro-Star MSI driver: snd_hda_intel v: kernel 
bus-ID: 28:00.3 chip-ID: 1022:1457 class-ID: 0403 
Device-4: Logitech HD Pro Webcam C920 type: USB driver: snd-usb-audio,uvcvideo bus-ID: 1-2.2:4 chip-ID: 046d:082d 
class-ID: 0102 serial: <filter> 
Device-5: C-Media Storm HP-USB500 5.1 Headset type: USB driver: hid-generic,snd-usb-audio,usbhid bus-ID: 1-2.3:12 
chip-ID: 0d8c:0006 class-ID: 0300 serial: <filter> 
Device-6: Logitech PRO X Wireless Gaming Headset type: USB driver: hid-generic,snd-usb-audio,usbhid 
bus-ID: 1-8.4:11 chip-ID: 046d:0aba class-ID: 0300 
Device-7: Logitech G560 Gaming Speaker type: USB driver: hid-generic,snd-usb-audio,usbhid bus-ID: 3-1:2 
chip-ID: 046d:0a78 class-ID: 0300 serial: <filter> 
Sound Server-1: ALSA v: k5.15.5-zen1-1-zen running: yes 
Sound Server-2: JACK v: 1.9.19 running: no 
Sound Server-3: PulseAudio v: 15.0 running: yes 
Sound Server-4: PipeWire v: 0.3.40 running: no 
Network:   Device-1: Intel Wireless-AC 9260 driver: iwlwifi v: kernel modules: wl bus-ID: 21:00.0 chip-ID: 8086:2526 
class-ID: 0280 
IF: wlan0 state: down mac: <filter> 
Device-2: Intel I211 Gigabit Network vendor: Micro-Star MSI driver: igb v: kernel port: e000 bus-ID: 22:00.0 
chip-ID: 8086:1539 class-ID: 0200 
IF: enp34s0 state: up speed: 1000 Mbps duplex: full mac: <filter> 
Bluetooth: Device-1: Intel Wireless-AC 9260 Bluetooth Adapter type: USB driver: btusb v: 0.8 bus-ID: 3-4:5 chip-ID: 8087:0025 
class-ID: e001 
Report: rfkill ID: hci0 rfk-id: 1 state: down bt-service: disabled rfk-block: hardware: no software: no 
address: see --recommends 
Drives: Local Storage: total: 4.17 TiB used: 24.65 GiB (0.6%) 
SMART Message: Unable to run smartctl. Root privileges required. 
ID-1: /dev/nvme0n1 maj-min: 259:0 vendor: HP model: SSD EX920 1TB size: 953.87 GiB block-size: physical: 512 B 
logical: 512 B speed: 31.6 Gb/s lanes: 4 type: SSD serial: <filter> rev: SVN139B temp: 53.9 C scheme: GPT 
ID-2: /dev/sda maj-min: 8:0 vendor: Samsung model: SSD 860 EVO 500GB size: 465.76 GiB block-size: physical: 512 B 
logical: 512 B speed: 6.0 Gb/s type: SSD serial: <filter> rev: 1B6Q 
ID-3: /dev/sdb maj-min: 8:16 vendor: Western Digital model: WD2001FASS-00W2B0 size: 1.82 TiB block-size: 
physical: 512 B logical: 512 B speed: 3.0 Gb/s type: HDD rpm: 7200 serial: <filter> rev: 0101 
ID-4: /dev/sdc maj-min: 8:32 vendor: Smart Modular Tech. model: SHGS31-1000GS-2 size: 931.51 GiB block-size: 
physical: 4096 B logical: 512 B speed: 6.0 Gb/s type: SSD serial: <filter> rev: 0Q00 scheme: GPT 
ID-5: /dev/sdd maj-min: 8:48 type: USB vendor: SanDisk model: Cruzer size: 57.33 GiB block-size: physical: 512 B 
logical: 512 B type: N/A serial: <filter> rev: 1.00 scheme: MBR 
SMART Message: Unknown USB bridge. Flash drive/Unsupported enclosure? 
Partition: ID-1: / raw-size: 898.97 GiB size: 883.79 GiB (98.31%) used: 24.65 GiB (2.8%) fs: ext4 dev: /dev/sdc2 maj-min: 8:34 
ID-2: /boot/efi raw-size: 512 MiB size: 511 MiB (99.80%) used: 296 KiB (0.1%) fs: vfat dev: /dev/sdc1 maj-min: 8:33 
Swap:   Kernel: swappiness: 60 (default) cache-pressure: 100 (default) 
ID-1: swap-1 type: partition size: 32.03 GiB used: 0 KiB (0.0%) priority: -2 dev: /dev/sdc3 maj-min: 8:35 
Sensors:   System Temperatures: cpu: 39.0 C mobo: 39.0 C gpu: amdgpu temp: 58.0 C 
Fan Speeds (RPM): fan-1: 0 fan-2: 1310 fan-3: 812 fan-4: 0 fan-5: 806 fan-6: 1042 gpu: amdgpu fan: 830 
Info:   Processes: 301 Uptime: 32m wakeups: 2 Memory: 31.34 GiB used: 2.75 GiB (8.8%) Init: systemd v: 249 tool: systemctl 
Compilers: gcc: 11.1.0 clang: 13.0.0 Packages: pacman: 1069 lib: 307 Shell: Bash v: 5.1.12 running-in: konsole 
inxi: 3.3.09

xrandr –listproviders

Providers: number : 2 
Provider 0: id: 0x49 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 6 outputs: 5 associated providers: 1 name:modesetting 
Provider 1: id: 0x35e cap: 0x2, Sink Output crtcs: 4 outputs: 3 associated providers: 1 name:NVIDIA-G0

glxinfo | grep -i opengl

OpenGL vendor string: AMD 
OpenGL renderer string: AMD Radeon RX 580 Series (POLARIS10, DRM 3.42.0, 5.15.5-zen1-1-zen, LLVM 13.0.0) 
OpenGL core profile version string: 4.6 (Core Profile) Mesa 21.2.5 
OpenGL core profile shading language version string: 4.60 
OpenGL core profile context flags: (none) 
OpenGL core profile profile mask: core profile 
OpenGL core profile extensions: 
OpenGL version string: 4.6 (Compatibility Profile) Mesa 21.2.5 
OpenGL shading language version string: 4.60 
OpenGL context flags: (none) 
OpenGL profile mask: compatibility profile 
OpenGL extensions: 
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 21.2.5 
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20 
OpenGL ES profile extensions:

paru -Qs amd

local/amd-ucode 20211027.1d00989-1 
      Microcode update image for AMD CPUs 
local/amdvlk 2021.Q4.1-1 
      AMD's standalone Vulkan driver 
local/lib32-amdvlk 2021.Q4.1-1 
      AMD's standalone Vulkan driver 
local/lib32-opencl-mesa 21.2.5-1 
      OpenCL support for AMD/ATI Radeon mesa drivers (32-bit) 
local/opencl-mesa 21.2.5-1 
      OpenCL support for AMD/ATI Radeon mesa drivers 
local/systemd-vgaswitcheroo-units 1.3-1 
      Disable discrete GPU at boot for AMD/NVIDIA & Intel dual stuff. This is based on the old AUR package that was not migrated to AUR4. 
local/xf86-video-amdgpu 21.0.0-2 (xorg-drivers)
      X.org amdgpu video driver

paru -Qs nvidia

local/egl-wayland 2:1.1.9+r3+g582b2d3-1 
      EGLStream-based Wayland external platform 
local/lib32-libvdpau 1.4-1 
      Nvidia VDPAU library 
local/lib32-nvidia-470xx-utils 470.86-1 
      NVIDIA drivers utilities (32-bit) 
local/lib32-opencl-nvidia 495.44-1 
      OpenCL implemention for NVIDIA (32-bit) 
local/libvdpau 1.4-1 
      Nvidia VDPAU library 
local/libxnvctrl-470xx 470.86-1 
      NVIDIA NV-CONTROL X extension 
local/nvidia-470xx-dkms 470.86-3 
      NVIDIA drivers - module sources 
local/nvidia-470xx-settings 470.86-1 
      Tool for configuring the NVIDIA graphics driver 
local/nvidia-470xx-utils 470.86-3 
      NVIDIA drivers utilities 
local/nvidia-installer-db 2.5.1-2 
      Database for the script to setup nvidia drivers in EndeavourOS 
local/nvidia-installer-dkms 3.3.11-1 
      Script to setup nvidia drivers (dkms version) in EndeavourOS 
local/nvidia-prime 1.0-4 
      NVIDIA Prime Render Offload configuration and utilities 
local/nvtop 1.2.2-1 
      An htop like monitoring tool for NVIDIA GPUs 
local/opencl-nvidia 495.44-6 
      OpenCL implemention for NVIDIA 
local/systemd-vgaswitcheroo-units 1.3-1 
      Disable discrete GPU at boot for AMD/NVIDIA & Intel dual stuff. This is based on the old AUR package that was not migrated to AUR4.

paru -Qs mesa

local/glu 9.0.2-1 
      Mesa OpenGL Utility library 
local/lib32-libva-mesa-driver 21.2.5-1 
      VA-API implementation for gallium (32-bit) 
local/lib32-mesa 21.2.5-1 
      An open-source implementation of the OpenGL specification (32-bit) 
local/lib32-mesa-vdpau 21.2.5-1 
      Mesa VDPAU drivers (32-bit) 
local/lib32-opencl-mesa 21.2.5-1 
      OpenCL support for AMD/ATI Radeon mesa drivers (32-bit) 
local/lib32-vulkan-mesa-layers 21.2.5-1 
      Mesa's Vulkan layers (32-bit) 
local/lib32-vulkan-radeon 21.2.5-1 
      Radeon's Vulkan mesa driver (32-bit) 
local/libva-mesa-driver 21.2.5-1 
      VA-API implementation for gallium 
local/mesa 21.2.5-1 
      An open-source implementation of the OpenGL specification 
local/mesa-demos 8.4.0-6 
      Mesa demos 
local/mesa-utils 8.4.0-6 
      essential Mesa utilities 
local/mesa-vdpau 21.2.5-1 
      Mesa VDPAU drivers 
local/opencl-mesa 21.2.5-1 
      OpenCL support for AMD/ATI Radeon mesa drivers 
local/vulkan-mesa-layers 21.2.5-1 
      Mesa's Vulkan layers 
local/vulkan-radeon 21.2.5-1 
      Radeon's Vulkan mesa driver

This is a desktop?

:point_up:

Yes it is.

Why?

1 Like

I don’t understand your question. Why what?

Why do hybrid on a desktop?

2 Likes

Ah, I plan on looking into PCI passthrough for a VM to check it’s effectiveness for when I need to use Windows only programs. Since I have dual monitors I figured I’d toss in the old GT710 I had lying around so that I can still use Linux while the VM is running.

Interesting…I wanted to try to figure out if I could pass through on vbox with my RX590 but haven’t even tried. I don’t think anyone has mentioned hybrid on a desktop. I have enough trouble with hybrid laptops.

Well, I figured it out. To make a long story short, my GPU was not getting enough power and was being throttled. If interested read the story below. Hybrid mode does appear to have a minor performance hit but it’s negligible at only 1-2fps and statistically not important.

After a lot of google searches I found some tools to assist:
Corectrl
amdgpu-clock
Gallium Hud
GOverlay

After installing Corectrl and running Unigine I noticed that my GPU never reached the max frequency and it along with the voltage levels were bouncing around all over the place never reaching a steady state. So, checking the tools available under advanced performance mode, I found that the power limit was only set to half of max. I set that to max and wouldn’t you know it? That was pretty much all I had to do, the GPU reached it’s final state with a steady max frequency with only minor fluctuations in voltage.

For most people experiencing poor performance this is most likely all they’ll need to check.

However, for those a bit more adventurous here’s some additional knowledge. If interested in tweaking each clock state/level for max performance or better performance per watt you’ll want to unlock your GPU controls:

sudo micro /etc/modprobe.d/amdgpu.conf

options amdgpu ppfeaturemask=0xffffffff

If you get stuttering with this flag enabled try ppfeaturemask=0xfffd7fff depending on your gpu some people have better luck with one than the other.

Once you saved and closed that file regenerate your initial ramdisk and reboot

sudo mkinitcpio -P

Or instead of -P (all presets) specify the specific preset you want

You should now be able to view your current clock levels

cat /sys/class/drm/card0/device/pp_od_clk_voltage

If that works, you can check the Arch Wiki on how to edit with echo commands. However, I found the the amdgpu-clock tool to be quick and easy and would recommend it instead. The corectrl program is supposed to be able to adjust your clocks but I couldn’t get it to work for that. Your mileage may vary. I did use corectrl to set a custom fan curve however and that works wonderfully.

Be careful here, make small changes. Also, more isn’t always better. You can sometimes actually get better performance by under-clocking or under-volting due to the chipset throttling itself. Especially if it starts getting too hot and you don’t have adequate cooling. Even if it runs without crashing you can see the fluctuations in your stats/graphs. Slow is smooth. Smooth is fast.

Finally, you may find Gallium Hud and GOverlay to be useful as well, especially if you only have a single monitor and your benchmarking with full screen. They provide an onscreen overlay for monitoring performance.

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.