I purchased a system76 Thelio Mira Elite With a AMD Radeon RX 7900 XT. I kinda regret not going with Nvidia at this point but it is what it is. I primarily use it as a developer workstation, but want to play games on it as well so I can be rid of my windows box.
I didn’t expect it to be able to play the latest and greatest games but I did expect it to be able to play older titles reasonably well. Games launch from steam and seem to work, but I’m getting between 0 and 10 fps on the title screen of Kerbal Space Program. Other games are similarly functional but poorly performing.
Where do I start? How can I ensure my GPU is being leveraged? Is this as good as it gets?
Something is definitely off on your system. I’ve a 7900 XTX (the slightly-higher-end version of that card), and while I don’t have the box in front of me, it definitely runs at at least reasonable (60fps+) rates at 2560x1440 on KSP. Might do well above that, dunno. It’s definitely not herky-jerky to the level you’re seeing, though.
Are you using Wayland or Xorg?
If you run
radeontop
(in Debian trixie, package radeontop) it should tell you various load characteristics. There isn’t a GPU-agnostic utility to do this, unless things have changed since last I’ve looked – Nvidia and AMD both have their own utilities.Unless you’re aiming for AI stuff, where there are some significant benefits, like a large userbase and support for transformers, I’d probably recommend AMD for Linux use.
EDIT:
If you run
glxinfo
on either Xorg (or Wayland, since the emulation layer will handle it), package mesa-utils on Debian trixie, it’ll tell you what OpenGL is trying to use. If you’re using hardware-accelerated stuff, you’ll get something like this:That’s been the quick-thumb-in-the-wind test to know whether hardware 3d acceleration is running since just about forever. KSP probably doesn’t actually use OpenGL – I’d guess that it’s probably using DirectX going through some emulation layer in Proton to Vulkan – but if you’ve got something wonky like no usable 3D driver support for your GPU, that’ll show it up.
EDIT2: There’s also
vulkaninfo
in (package vulkan-tools in Debian trixie). It’ll give you something like:EDIT3: If you’re using Xorg and that doesn’t show hardware acceleration in use, then the next thing that I’d probably look at is
/var/log/Xorg.0.log
to see what Xorg is saying regarding your GPU. I don’t know much about diagnosing Wayland issues, as I’ve not been using it for all that long. The kernel log may also have interesting messages information (as root,journalctl -kb
ordmesg
) if the problem is at the kernel level.glxinfo | grep Vendor
Vendor: Mesa (0xffffffff)
glxinfo | grep Device
Device: llvmpipe (LLVM 17.0.6, 256 bits) (0xffffffff)
glxinfo | grep “OpenGL rend”
OpenGL renderer string: llvmpipe (LLVM 17.0.6, 256 bits)
Let me know if that’s not right. glxinfo dumps a lot of text but those are the only hits for your comment.
When I launch radeontop it prints this before launching, and then the output suggests it isn’t working:
Unknown Radeon card. <= R500 won’t work, new cards might.
All stats sit at 0.00% except for Memory Clock @ 9%.
EDIT:
xorg, not wayland
Yeah, so it’s not using hardware acceleration then – your (poor) CPU has been trying to do all this in software emulation. I updated my comment above – take a look in Xorg.0.log if you’re on Xorg. My first guess is that you most-likely need newer drivers.
I know that these are new enough for the 7900 XTX; that’s current for Debian trixie, just to provide a known-good point in terms of driver version.
EDIT: You don’t say what distro you’re using. If you’re using Debian stable – I think I was when I first got my 7900 XTX, and IIRC they didn’t have driver support in at that point, though that was a while back now – you might check whether you have the backports repository present.
EDIT2: The first results for my search as to minimum supported version, though I wouldn’t take this as authoritative:
https://old.reddit.com/r/debian/comments/1301rph/radeon_7900_support/
EDIT3: Sorry, you did say which OS you were using – PopOS.
dpkg -l|grep radeon
ii libdrm-amdgpu-radeon1:amd64 1:2.4.120.60103-1787201.22.04 amd64 Userspace interface to radeon-specific kernel DRM services -- runtime ii libdrm-radeon1:amd64 2.4.120-1pop1~1706792268~22.04~bfb54ee amd64 Userspace interface to radeon-specific kernel DRM services -- runtime ii libdrm-radeon1:i386 2.4.120-1pop1~1706792268~22.04~bfb54ee i386 Userspace interface to radeon-specific kernel DRM services -- runtime ii radeontop 1.4-1 amd64 Utility to show Radeon GPU utilization ii xserver-xorg-video-radeon 1:19.1.0-2ubuntu1 amd64 X.Org X server -- AMD/ATI Radeon display driver
I don’t know exactly what i’m looking for in the xorg logs… cat /var/log/Xorg.*.log | grep “EE”
cat /var/log/Xorg.*.log | grep “WW”
[ 5068.047] (WW) Falling back to old probe method for modesetting [ 5068.047] (WW) Falling back to old probe method for fbdev
cat /var/log/Xorg.*.log | grep “gpu”
[ 5067.696] (II) Applying OutputClass "AMDgpu" to /dev/dri/card1 [ 5067.696] loading driver: amdgpu [ 5067.696] (==) Matched amdgpu as autoconfigured driver 0 [ 5067.696] (II) LoadModule: "amdgpu" [ 5067.696] (II) Loading /usr/lib/xorg/modules/drivers/amdgpu_drv.so [ 5067.696] (II) Module amdgpu: vendor="X.Org Foundation" All GPUs supported by the amdgpu kernel driver
sudo journalctl -kb | grep gpu
Feb 15 08:59:51 pop-os kernel: [drm] amdgpu kernel modesetting enabled. Feb 15 08:59:51 pop-os kernel: amdgpu: Virtual CRAT table created for CPU Feb 15 08:59:51 pop-os kernel: amdgpu: Topology: Add CPU node Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: enabling device (0006 -> 0007) Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: Fetched VBIOS from VFCT Feb 15 08:59:51 pop-os kernel: amdgpu: ATOM BIOS: 113-APM7199-002 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: CP RS64 enable Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: [drm:jpeg_v4_0_early_init [amdgpu]] JPEG decode is enabled in VM mode Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: vgaarb: deactivate vga console Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: Trusted Memory Zone (TMZ) feature not supported Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: MEM ECC is not presented. Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: SRAM ECC is not presented. Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: VRAM: 16368M 0x0000008000000000 - 0x00000083FEFFFFFF (16368M used) Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: GART: 512M 0x00007FFF00000000 - 0x00007FFF1FFFFFFF Feb 15 08:59:51 pop-os kernel: [drm] amdgpu: 16368M of VRAM memory ready Feb 15 08:59:51 pop-os kernel: [drm] amdgpu: 64286M of GTT memory ready. Feb 15 08:59:51 pop-os kernel: [drm] GART: num cpu pages 131072, num gpu pages 131072 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: Will use PSP to load VCN firmware Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: reserve 0x1300000 from 0x83fc000000 for PSP TMR Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: RAP: optional rap ta ucode is not available Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: SECUREDISPLAY: securedisplay ta ucode is not available Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: smu driver if version = 0x0000003d, smu fw if version = 0x00000040, smu fw program = 0, smu fw version = 0x004e7e00 (78.126.0) Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: SMU driver if version not matched Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: SMU is initialized successfully! Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: [drm:jpeg_v4_0_hw_init [amdgpu]] JPEG decode initialized successfully. Feb 15 08:59:51 pop-os kernel: amdgpu: HMM registered 16368MB device memory Feb 15 08:59:51 pop-os kernel: kfd kfd: amdgpu: Allocated 3969056 bytes on gart Feb 15 08:59:51 pop-os kernel: kfd kfd: amdgpu: Total number of KFD nodes to be created: 1 Feb 15 08:59:51 pop-os kernel: amdgpu: Virtual CRAT table created for GPU Feb 15 08:59:51 pop-os kernel: amdgpu: Topology: Add dGPU node [0x744c:0x1002] Feb 15 08:59:51 pop-os kernel: kfd kfd: amdgpu: added device 1002:744c Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: SE 6, SH per SE 2, CU per SH 8, active_cu_number 80 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring gfx_0.0.0 uses VM inv eng 0 on hub 0 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring comp_1.0.0 uses VM inv eng 1 on hub 0 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring comp_1.1.0 uses VM inv eng 4 on hub 0 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring comp_1.2.0 uses VM inv eng 6 on hub 0 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring comp_1.3.0 uses VM inv eng 7 on hub 0 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring comp_1.0.1 uses VM inv eng 8 on hub 0 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring comp_1.1.1 uses VM inv eng 9 on hub 0 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring comp_1.2.1 uses VM inv eng 10 on hub 0 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring comp_1.3.1 uses VM inv eng 11 on hub 0 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring sdma0 uses VM inv eng 12 on hub 0 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring sdma1 uses VM inv eng 13 on hub 0 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring vcn_unified_0 uses VM inv eng 0 on hub 8 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring vcn_unified_1 uses VM inv eng 1 on hub 8 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring jpeg_dec uses VM inv eng 4 on hub 8 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: ring mes_kiq_3.1.0 uses VM inv eng 14 on hub 0 Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: amdgpu: Using BACO for runtime pm Feb 15 08:59:51 pop-os kernel: [drm] Initialized amdgpu 3.57.0 20150101 for 0000:03:00.0 on minor 2 Feb 15 08:59:51 pop-os kernel: fbcon: amdgpudrmfb (fb0) is primary device Feb 15 08:59:51 pop-os kernel: amdgpu 0000:03:00.0: [drm] fb0: amdgpudrmfb frame buffer device Feb 15 08:59:52 pop-os kernel: RAPL PMU: hw unit of domain pp1-gpu 2^-14 Joules Feb 15 08:59:52 pop-os kernel: snd_hda_intel 0000:03:00.1: bound 0000:03:00.0 (ops amdgpu_dm_audio_component_bind_ops [amdgpu]) ...
uname -r
I think this is the mesa version?
OpenGL version string: 4.5 (Compatibility Profile) Mesa 24.1.0-devel
cat /etc/os-release
NAME="Pop!_OS" VERSION="22.04 LTS" ID=pop ID_LIKE="ubuntu debian" PRETTY_NAME="Pop!_OS 22.04 LTS" VERSION_ID="22.04" HOME_URL="https://pop.system76.com/" SUPPORT_URL="https://support.system76.com/" BUG_REPORT_URL="https://github.com/pop-os/pop/issues" PRIVACY_POLICY_URL="https://system76.com/privacy" VERSION_CODENAME=jammy UBUNTU_CODENAME=jammy LOGO=distributor-logo-pop-os
Those are the kernel and Mesa versions, and at least assuming that the thing I linked above is correct as to minimum versions, you should be okay as to versions of those.
And if this is the out-of-box preinstalled OS from System76, I’d think that it’d be set up out of box for hardware acceleration. Hmm.
Yep, you’re using software rendering and your extremely fast GPU is sitting there idle. Talk to System76 about enabling the correct driver.
(That was obvious from the initial “0-10 FPS in KSP” symptom, of course – even my 7-year-old AMD GPU, a Vega 56, can run that game just fine, and I’m pretty sure the AMD GPU I had before that could too.)
vulkan-tools | grep “GPU id”:
GPU id = 0 (Radeon RX 7900 GRE (RADV NAVI31)) GPU id = 1 (Intel(R) Graphics (RPL-S)) GPU id = 2 (llvmpipe (LLVM 15.0.7, 256 bits)) GPU id = 0 (Radeon RX 7900 GRE (RADV NAVI31)) GPU id = 1 (Intel(R) Graphics (RPL-S)) GPU id = 2 (llvmpipe (LLVM 15.0.7, 256 bits)) GPU id = 0 (Radeon RX 7900 GRE (RADV NAVI31)) GPU id = 1 (Intel(R) Graphics (RPL-S)) GPU id = 2 (llvmpipe (LLVM 15.0.7, 256 bits)) GPU id = 0 (Radeon RX 7900 GRE (RADV NAVI31)) GPU id = 1 (Intel(R) Graphics (RPL-S)) GPU id = 2 (llvmpipe (LLVM 15.0.7, 256 bits)) GPU id = 0 (Radeon RX 7900 GRE (RADV NAVI31)) GPU id = 1 (Intel(R) Graphics (RPL-S)) GPU id = 2 (llvmpipe (LLVM 15.0.7, 256 bits)) GPU id = 0 (Radeon RX 7900 GRE (RADV NAVI31)) GPU id = 1 (Intel(R) Graphics (RPL-S)) GPU id = 2 (llvmpipe (LLVM 15.0.7, 256 bits)) GPU id = 0 (Radeon RX 7900 GRE (RADV NAVI31)) GPU id = 1 (Intel(R) Graphics (RPL-S)) GPU id = 2 (llvmpipe (LLVM 15.0.7, 256 bits)) GPU id : 0 (Radeon RX 7900 GRE (RADV NAVI31)): GPU id : 1 (Intel(R) Graphics (RPL-S)): GPU id : 2 (llvmpipe (LLVM 15.0.7, 256 bits)):
cat /var/log/Xorg.*.log | grep amd
[ 5067.696] (II) LoadModule: "amdgpu" [ 5067.696] (II) Loading /usr/lib/xorg/modules/drivers/amdgpu_drv.so [ 5067.696] (II) Module amdgpu: vendor="X.Org Foundation" All GPUs supported by the amdgpu kernel driver
cat /var/log/Xorg.*.log | grep gpu
[ 5067.696] (II) Applying OutputClass "AMDgpu" to /dev/dri/card1 [ 5067.696] loading driver: amdgpu [ 5067.696] (==) Matched amdgpu as autoconfigured driver 0 [ 5067.696] (II) LoadModule: "amdgpu" [ 5067.696] (II) Loading /usr/lib/xorg/modules/drivers/amdgpu_drv.so [ 5067.696] (II) Module amdgpu: vendor="X.Org Foundation" All GPUs supported by the amdgpu kernel driver
Make sure that you actually have permission to that /dev/dri/card1 device. This may be arranged by udev or “video” group membership.
Regarding AMD vs Nvidia, unless you need CUDA you probably made the right choice. This sounds like a config issue and you’d probably be dealing with the same thing with Nvidia too.
Yeah I’m pleasantly surprised by the unanimous responses that AMD seems to be the way to go in this space. At this point I know it’s not using my GPU at all, so you are right that nvidia wouldn’t be any different
That may mean that you have accelerated graphics via Vulkan. I’m familiar with
glxinfo
’s output, and I’m pretty sure that the fact that it’s not listing your GPU means that OpenGL apps won’t have hardware acceleration, but not sure whatvulkaninfo
does if it has no hardware acceleration available – I’m not certain that having the GPU listed there means that it has 3D acceleration, or whether it can list something running via software emulation.Hmm. This may take a bit of feeling about, as a bit of this is new territory for me too.
When you run
vkcube
– which uses Vulkan – it’ll show a spinning cube and print a single line of text about the GPU used. What does it show for you?EDIT: Okay, apparently vkcube doesn’t do what Vulkan apps are supposed to do by default – it tries to pick a discrete GPU, so it’s probably not the best sanity test for “what is a Vulkan-using program trying to render to”.
I’m going to assume that the fact that
vulkaninfo
can see the GPU means that it’s accelerated, though. If that’s true:You probably have 3D acceleration at the kernel and Xorg levels.
Kerbal Space Program has a Linux-native binary (on Steam, this shows up as that SteamOS icon), so it’s probably not going through Proton’s DirectX emulation, and from there to Vulkan, which it would if it only had a Windows binary. It looks like it has both an OpenGL and a DirectX rendering path on Windows. Typically games like this with a Linux-native release use the OpenGL path on Linux. kagis At least as of 2021, it looks like it was indeed using only OpenGL on Linux. So if you don’t have accelerated OpenGL, then it’s presumably not going to be accelerated.
I don’t think that
glxinfo
should be showing “llvmpipe”. I’m pretty sure that that means that you don’t have accelerated OpenGL available.Take this with a grain of salt – I’ve not run into an actual system where Vulkan-using games are accelerated, and OpenGL games are not. This is a guess. But it’d at least vaguely fit my understanding of what you’ve provided. I’m fuzzy on the relationship between Vulkan, OpenGL, and Mesa – I don’t know what exactly it might take to create issues for OpenGL but not Vulkan.
Okay, after some poking around, I did find at least one mechanism that could possibly cause OpenGL to not be accelerated but Vulkan to be accelerated:
https://superuser.com/questions/106056/force-software-based-opengl-rendering-on-ubuntu
I also confirmed that it produces the output that you’re seeing on my system – with that set,
glxinfo
returns llvmpipe, even thoughvulkaninfo
has GPU id 0 being the Radeon card. So if you’ve got that environment variable set somewhere, that could produce the behavior you’re seeing.@zamithal@programming.dev, I don’t know how you could have gotten that set, but in whatever terminal you were running
glxinfo
andvulkaninfo
, can you runset|strings|grep LIBGL
and see if maybe that’s set? If it is, maybeunset LIBGL_ALWAYS_SOFTWARE
and then from that terminal startsteam
again and see if Kerbal Space Program runs fine then?It doesn’t appear to be set and additionally I don’t appear to have the
libgl1-mesa-swx11
package mentioned in that post.set|strings|grep LIBGL
apt list | grep libgl1-mesa
This does remind me that while developing a webgl canvas based javascript app the other day I was forced to go into firefox’s about:config and set webgl.force-enabled = true. I should have dug deeper on that.
Ah, okay. Bit of a long shot.
You shouldn’t need it – that’s for software rendering.
You might want libgl1-mesa-glx, but it sounds from that page like that was restructured prior to your distro release.
https://askubuntu.com/questions/1517352/issues-installing-libgl1-mesa-glx
Both libgl1:amd64 and libglx-mesa-0:amd64 are installed on my system. Are they installed on yours? If not, if they are available in your apt repo, maybe do so and see if your problems disappear?
deleted by creator
nvtop
also works with AMD now and is way nicer thanradeontop
IMOAh, neat, thanks.