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

#251
R-T-B
INSTG8RIt has been fixed should be in next driver
Appreciate the update.
Posted on Reply
#252
300BaudBob
Ok AMD back to BASICs for you
10 print x
20 x=x+1
30 goto 10
40 print "I am lost forever"
See how easy it is to spot the mistake?

Seriously w1azzard nice spotting of a bug and figuring out the underlying issue.
Wish I had a dime for everytime I've seen a newbie who needs to be told it's highly recommend to remove the old drivers to try and fix some problem or to avoid problems to begin with..here's a nice easy example to point them to as to why.
Posted on Reply
#253
flowirin
YukikazeSomething to note, there is a (very small) subset of users who will feel this adversely.
it also hits normal users with amd cards. many reporting 100% core usage with 2020 software.

like me.

this article tied together all clues.
Posted on Reply
#254
INSTG8R
Vanguard Beta Tester
flowirinit also hits normal users with amd cards. many reporting 100% core usage with 2020 software.

like me.

this article tied together all clues.
Patience next driver it’s gone so I would guess after the holidays
Posted on Reply
#255
lexluthermiester
300BaudBobWish I had a dime for everytime I've seen a newbie who needs to be told it's highly recommend to remove the old drivers to try and fix some problem or to avoid problems to begin with..
Except for those usage scenario's that require the software and drivers to remain on the system.
Posted on Reply
#256
zlobby
lexluthermiesterExcept for those usage scenario's that require the software and drivers to remain on the system.
Yes, I see an ever-increasing trend in these scenarios. /s
Posted on Reply
#257
lexluthermiester
zlobbyYes, I see an ever-increasing trend in these scenarios. /s
Save the sarcasm. Those situations do happen and while not everyone needs that functionality, some do and it is important for them. Therefore it is important that hardware makers ensure that their software is fully inactive and does not interfere with normal operations when the matching hardware is not present.
Posted on Reply
#258
zlobby
lexluthermiesterSave the sarcasm. Those situations do happen and while not everyone needs that functionality, some do and it is important for them. Therefore it is important that hardware makers ensure that their software is fully inactive and does not interfere with normal operations when the matching hardware is not present.
Yes, I agree that software should be well-written and with every scenario in mind. It just sounded like the one you were talking about is generally important, hence my sarcasm.
Posted on Reply
#259
300BaudBob
lexluthermiesterExcept for those usage scenario's that require the software and drivers to remain on the system.
Which is why I feel vindicated in making a joke at AMD's expense and calling it a bug... still could use those dimes-- I don't run across many running AMD and Nvidia in the same system ;)
Posted on Reply
#260
Adam Krazispeed
KhonjelGod! The more I browse the internet the more I come to know that AMD software sucks.
if using an nvidia gpu the shit should have been uninstalled?? so bahh
300BaudBobWhich is why I feel vindicated in making a joke at AMD's expense and calling it a bug... still could use those dimes-- I don't run across many running AMD and Nvidia in the same system ;)
I did?

I had AMD Ryzen 1st 2nd and 3rd now 5th gen with a GTX 1080Ti 11Gb so bahh

also a 5700 XT and a XT bios flashed 5700 (NON XT) ALL REFERENCE cards? Baaahhh for comparative testing
Posted on Reply
#261
300BaudBob
Adam Krazispeedif using an nvidia gpu the shit should have been uninstalled?? so bahh


I did?

I had AMD Ryzen 1st 2nd and 3rd now 5th gen with a GTX 1080Ti 11Gb so bahh

also a 5700 XT and a XT bios flashed 5700 (NON XT) ALL REFERENCE cards? Baaahhh for comparative testing
Like I said not many. I've known some software developers who did for comparison/testing purposes.
Posted on Reply
#262
Mussels
Freshwater Moderator
Did this get resolved in newer drivers?
Posted on Reply
#263
GSDragoon
MusselsDid this get resolved in newer drivers?
Yes
Posted on Reply
#264
windwhirl
GSDragoonYes
About that...
AMD is currently investigating end user reports that Radeon Software may sometimes have higher than expected CPU utilization, even when a system is at idle. Users who are experiencing this issue are encouraged to file a bug report in Radeon Software.
Posted on Reply
#265
GSDragoon
windwhirlAbout that...
The issue brought up in the article has been addressed. Are there other issues causing high CPU usage from Radeon Software? Based on community feedback, yes. That is what AMD is still investigating. If you are running into them, submit a bug report for it so AMD can hopefully identify and fix the issue.
Posted on Reply
#266
B_Bang
Why didn't you use DDU to clear out team red properly before switching to team green? Software works for both ways.....
Posted on Reply
#267
windwhirl
B_BangWhy didn't you use DDU to clear out team red properly before switching to team green? Software works for both ways.....
... Why are you reopening a thread that was dead for a whole year for no good reason??
Posted on Reply
#268
lexluthermiester
windwhirl... Why are you reopening a thread that was dead for a whole year for no good reason??
To be fair may not be aware that necro-posting without good reason could be considered trolling..
B_BangWhy didn't you use DDU to clear out team red properly before switching to team green? Software works for both ways.....
Please review Forum Guidelines as they will be helpful for you in future. It is also helpful if you read through a thread before commenting as your suggestion was already offered earlier in the thread.
Posted on Reply
#269
windwhirl
lexluthermiesterTo be fair may not be aware that necro-posting without good reason could be considered trolling..
That's why threads have this warning when they have been inactive for quite some time (both on desktop and mobile)
Posted on Reply
#270
zlobby
windwhirl... Why are you reopening a thread that was dead for a whole year for no good reason??
Chill, dude may be on IE. It managed to load the page just now.
Posted on Reply
#271
lexluthermiester
zlobbyChill, dude may be on IE. It managed to load the page just now.
And that would be their own fault for using a browser that is extremely and woefully out of date, not to mention ill advised.
Posted on Reply
Add your own comment
Nov 22nd, 2024 00:37 EST change timezone

New Forum Posts

Popular Reviews

Controversial News Posts