Friday, December 4th 2020

PSA: AMD's Graphics Driver will Eat One CPU Core when No Radeon Installed

While I was messing around with an older SSD test system (not benchmarking anything) I wondered why the machine's performance was SO sluggish with the NVIDIA card I just installed. Windows startup, desktop, Internet, everything in Windows would just be incredibly slow. This is an old dual-core machine, but it ran perfectly fine with the AMD Radeon card I used before.
At first I blamed NVIDIA, but when I opened Task Manager I noticed one of my cores sitting at 100%—that can't be right.

Digging a bit further into this, it looks like RadeonSettings.exe is using one processor core at maximum 100% CPU load. Ugh, but there is no AMD graphics card installed right now.

Once that process was terminated manually (right click, select "End task"), performance was restored to expected levels and CPU load was normal again. This confirms that the AMD driver is the reason for the high CPU load. Ideally, before changing graphics card, you should uninstall the current graphics card driver, change hardware, then install the new driver, in that order. But for a quick test that's not what most people do, and others are simply not aware of the fact that a thing called "graphics card driver" exists, and what it does. Windows is smart enough to not load any drivers for devices that aren't present physically.
Looks like AMD is doing things differently and just pre-loads Radeon Settings in the background every time your system is booted and a user logs in, no matter if AMD graphics hardware is installed or not. It would be trivial to add a check "If no AMD hardware found, then exit immediately", but ok. Also, do we really need six entries in Task Scheduler?

I got curious and wondered how it is possible in the first place that an utility software like the Radeon Settings control panel uses 100% CPU load constantly—something that might happen when a mining virus gets installed, to use your electricity to mine cryptocurrency, without you knowing. By the way, all this was verified to be happening on Radeon 20.11.2 WHQL driver, 20.11.3 Beta and the press driver for an upcoming Radeon review.

Unless you're a computer geek you'll probably want to skip over the following paragraphs, I still found the details interesting enough to share with you.

I attached my debugger, looked for the thread that's causing all the CPU load and found this:
Hard to read, translated it into C code it might make more sense:
If you're a programmer you'd have /facepalm'd by now, let me explain. In a multi-threaded program, Events are often used to synchronize concurrently running threads. Events are a core feature of the Windows operating system, once created, they can be set to "signaled", which will notify every other piece of code that is watching the status of this event—instantly and even across process boundaries. In this case the Radeon Settings program will wait for an event called "DVRReadyEvent" to get created, before it continues with initialization. This event gets created by a separate, independent, driver component, that's supposed to get loaded on startup, too, but apparently never does. The Task Scheduler entries in the screenshot above do show "StartDVR". The naming suggests it's related to the ReLive recording feature that lets you capture and stream gameplay. I guess that part of the driver does indeed check if Radeon hardware is present, and will not start otherwise. Since Windows has no WaitForEventToGetCreated() function, the usual approach is to try to open the event until it can be opened, at which point you know that it does exist.

You're probably asking now, "what if the event never gets created?" Exactly, your program will be hung, forever, caught in an infinite loop. The correct way to implement this code is to either set a time limit for how long the loop should run, or count the number of runs and give up after 100, 1000, 1 million, you pick a number—but it's important to set a reasonable limit.

A more subtle effect of this kind of busy waiting is that it will run as fast as the processor can, loading one core to 100%. While that might be desirable if you have to be able to react VERY quickly to something, there's no reason to do that here. The typical approach is to add a short bit of delay inside the loop, which tells the operating system and processor "hey, I'm waiting on something and don't need CPU time, you may run another application now or reduce power". Modern processors will adjust their frequency when lightly loaded, and even power down cores completely, to conserve energy and reduce heat output. Even a delay of one millisecond will make a huge difference here.

This is especially important during system startup, where a lot of things are happening at the same time, that need processor time to complete—it's why you feel you're waiting forever for your desktop to become usable when you start the computer. With Radeon Settings taking over one core completely, there's obviously less performance left for other startup programs to complete.

I did some quick and dirty performance testing in actual gameplay on a 8-core/16-thread CPU and found a small FPS loss, especially in CPU limited scenarios, around 1%, in the order of 150 FPS vs 151 FPS. This confirms that this can be an issue on modern systems, too, even though just 5% of CPU power is lost (one core out of 16). The differences will be minimal though, and it's unlikely you'll subjectively notice the difference.

Waiting on synchronization signals is very basic programming skills, most midterm students would be able to implement it correctly. That's why I'm so surprised to see such low quality code in a graphics driver component that get installed on hundreds of millions of computers. Modern software development techniques avoid these mistakes by code reviews—one or multiple colleagues read your source code and point out potential issues. There's also "unit testing", which requires developers to write testing code that's separate from the main code. These unit tests can then be executed automatically to measure "code coverage"—how many percent of the program code are verified to be correct through the use of unit tests. Let's just hope AMD fixes this bug, it should be trivial.

If you are affected by this issue, just uninstall the AMD driver from Windows Settings - Apps and Features. If that doesn't work, use DDU. It's not a big deal anyway, what's most important is that you are aware, in case your system feels sluggish after a graphics hardware change.
Add your own comment

277 Comments on PSA: AMD's Graphics Driver will Eat One CPU Core when No Radeon Installed

#201
medi01
Vayra86on those drivers
It is page 9 and the piece of code in question is still referred to as "drivers".
Good job.
Posted on Reply
#202
windwhirl
medi01It is page 9 and the piece of code in question is still referred to as "drivers".
Good job.
We know the difference, but for the average user it might as well be all the same thing.
Posted on Reply
#203
zlobby
When the shit goes down, you better be ready! And I think W1zz was not.
Posted on Reply
#205
jayseearr
Vayra86Its very well possible AMD has talented engineers on those drivers, but if they do, they sure don't get to do their job right. Mismanagement can be a cause of bad software releases as much as lack of talent. Or both. Who knows, I just judge the results. AMD driver issues happen and they're often pretty influential on the experience, and fixes don't always come as quickly as you'd want. Nvidia has its oopsies too, but fixes a lot faster, and the magnitude of those oopsies is often less impactful.
well said^ at the end of the day results are the most important thing, how many of these issues actually reach/affect the end user? Myself personally, i've had multitudes of issues with AMD software/drivers/firmware whereas my issues with nvidia have generally been not only much less consistent but less impactful. I like AMD just as much as anybody else, but it doesn't mean I can't/won't admit that they have(had) issues on the soft-ware side of things.

Kinda sad to see how some people have so much of their being/soul attached and invested into a particular brand that they feel the need to get insulted and take every criticism as a direct attack rather than appreciating the fact that it could it potentially improve the thing that they already love SO much.
Posted on Reply
#207
Mescalamba
As for those multiple entries. Noticed that on PC from 2009. So AMD/ATi drivers dont change since then. Also it loves to load drivers multiple times, to the point that hybrid sleep and start is broken (some AMD driver just cant cope with it).
Posted on Reply
#208
WeeRab
I didn't realize W1zzard was such a novice.
Even a novice knows to use DDU or summat similar to uninstall previous graphics drivers before installing new ones.
Strewth!!
Posted on Reply
#209
zlobby
MescalambaAs for those multiple entries. Noticed that on PC from 2009. So AMD/ATi drivers dont change since then. Also it loves to load drivers multiple times, to the point that hybrid sleep and start is broken (some AMD driver just cant cope with it).
I guess we are pretty far from lean, concise and robust drivers. Basically, they need to get everything from the ground up. There is simply no way for them to refactor such a mess of spaghetti.
Posted on Reply
#210
wolf
Better Than Native
I'd say I'm blown away by how far people will go to insinuate this is a witch hunt, downplay it as a foolish user, white night for AMD, shit on AMD etc, but unfortunately I can't say that hand-on-heart.

The software should not act like this, period. That's really all there is to it.

This PSA will help people (as it already has in this comments section) and hopefully, lead to the issue being fixed for all.

Put down the pitchforks...
Posted on Reply
#211
R-T-B
WeeRabI didn't realize W1zzard was such a novice.
Even a novice knows to use DDU or summat similar to uninstall previous graphics drivers before installing new ones.
Strewth!!
Yes, because novices totally know how to disassemble a program and assemble a PSA like this...

/s, if it isn't obvious. You "fans" are honestly giving AMD a bad name.
Posted on Reply
#212
rtwjunkie
PC Gaming Enthusiast
WeeRabI didn't realize W1zzard was such a novice.
Even a novice knows to use DDU or summat similar to uninstall previous graphics drivers before installing new ones.
Strewth!!
You display your ignorance on your shirt like it’s a badge of honor.
Posted on Reply
#213
Mussels
Freshwater Moderator
NaterNo time to read the whole thread, but I get a sense of the back and forth now...

Has anyone here independently reproduced the issue?
Yep, it was affecting my games server
Posted on Reply
#215
lexluthermiester
WeeRabI didn't realize W1zzard was such a novice.
Even a novice knows to use DDU or summat similar to uninstall previous graphics drivers before installing new ones.
Strewth!!
Wow! That really says infinitely more about you than W1zzard. Would you like to offer any more gems of insight to amuse the rest of us?
Posted on Reply
#216
Mussels
Freshwater Moderator
God i love this

"BUT YOU CAN FIX IT"


yes.... we know. we all know. a PSA is to make people aware that they need to fix it...
Posted on Reply
#217
DeathtoGnomes
rtwjunkieYou display your ignorance on your shirt like it’s a badge of honor.
:respect:
Wait, what badges? I have one here somewhere....
Posted on Reply
#218
R-T-B
DeathtoGnomesI have on here somewhere....
Not anymore. W1zzard siphoned all our knowledge-badges and combined them to give himself superpowers.

Or at least, that's how I'm going to explain my incompetence at work today (OT, don't ask).
Posted on Reply
#219
Aoyagi
It's not just when there's no AMD GPU either. It's doing the exact same thing on my 2700U.
Posted on Reply
#220
Mussels
Freshwater Moderator
AoyagiIt's not just when there's no AMD GPU either. It's doing the exact same thing on my 2700U.
wait really? does that system have an IGP and a DGPU?
Posted on Reply
#221
R-T-B
AoyagiIt's not just when there's no AMD GPU either. It's doing the exact same thing on my 2700U.
Interesting. Have you tweaked the driver in any unusual way or something that may have contributed to this (not blaming, just curious how it happened. The software should not do this at all.)
Posted on Reply
#222
Aoyagi
Musselswait really? does that system have an IGP and a DGPU?
Yes, really. As I said, it has a Ryzen 2700U, which has a (Radeon) Vega 10 in it. No dGPU, I think I would have mentioned that, haha.
R-T-BInteresting. Have you tweaked the driver in any unusual way or something that may have contributed to this (not blaming, just curious how it happened. The software should not do this at all.)
No, I just updated from an old 18-something driver.
Posted on Reply
#223
R-T-B
AoyagiYes, really. As I said, it has a Ryzen 2700U, which has a (Radeon) Vega 10 in it. No dGPU, I think I would have mentioned that, haha.



No, I just updated from an old 18-something driver.
Maybe a clean install would fix it.

Still pretty weird. And given what we see here, you probably aren't alone. That's why we do PSAs people.
Posted on Reply
#224
Mussels
Freshwater Moderator
I'll have to check on my dads RX580 system when he wakes up, and see if this new driver is just bugged out

unless you look losing just one core of performance doesnt stand out too well, when task manager has 16 panels for your CPU
Posted on Reply
#225
b1k3rdude
efikkan
  • These are contradictory statements.
  • And as I said, both DirectX 12 and Vulkan is designed to have a mix of GPUs, so they should be aware of this and test it before shipping a new driver.
  • As a computer engineer of 20yrs this is a perfectly valid statement.
  • Call me pessimistic, but your expecting too much as this has never been the case.
Posted on Reply
Add your own comment
Nov 22nd, 2024 00:38 EST change timezone

New Forum Posts

Popular Reviews

Controversial News Posts