Is there any way to reduce usage of a specific core? W10 and maybe Linux? BIOS? NOT disable!

Nazo

2[H]4U
Joined
Apr 2, 2002
Messages
3,672
EDIT: At this point I consider the question basically answered. I just didn't realize that essentially it's already basically doing what I want. While some things like games are basically ignoring it, the CPU itself is already sending a preferred core order to the OS and, as expected, the worst core is listed last. This is basically the kind of thing I was looking for and just didn't know was already there.

So I have been running CoreCycler to find new PBO voltage curve numbers after changing a bunch of stuff and I noticed something: core 4 not only has always needed a higher voltage than the rest, but when Prime95 is running on it, the CPU runs 11-13C hotter than any other core! That is... a pretty huge difference... I guess it uses more current too because that's not even on scale with just the voltage difference alone. Core 4 is absolutely the culprit in the majority of heat and power usage on this CPU and very probably was the one that kept that CCX from being binned higher.

What I would like to do is, if possible just sort of de-emphasize that specific core. To be specific I do NOT want to disable it entirely! This is only a six core processor and while my normal usage (gaming in particular) generally never fully utilizes all cores I do still do many things that do such as encoding, heavy compression, etc and the temperature difference even using all six cores is still well managed (I have a fairly good HSF.) In my experience, most games either use 2 or 4 cores in total effectively depending on tech level and it seems like they always end up on 1-4 somehow (I know you'd think it would be random, but as far as I can tell it's pretty much always the same range.) I just want to generate less heat and waste less power whenever not doing any of those things like encoding/etc that actually do utilize all cores significantly, but during those things I still want to utilize the full CPU capabilities within reason. So in other words, I just want things to prefer to send tasks to any other core most of the time, then use it only as much as is needed.

I don't know if this is entirely possible. Even if it is, it may require Windows 11 for Windows versions (I know it has smarter task handling since it can handle Raptor Lake and newer on Intel processors without crashing.) I will not be installing Windows 11. I'm also considering making a Linux migration despite that it is less ideal for gaming, so ideally I'd like to do the same thing there. What would really be most ideal is if there were some sort of setting on the SoC itself that the BIOS could control (maybe that reorders the cores to the OS or something?) I didn't see any obvious settings related to that however. If I have to go with a software solution, I'd rather something like registry tweaks or etc, not something that requires installing programs that have to run continously (such as Ryzen Master, which isn't available on Linux anyway -- or at least wasnt't last I checked.)

Can it be done?
 
Last edited:
On Linux you can "easily" run the entire userland on a set of cores of your choosing only. The kernel will still be on all cores, though.

The command is taskset(1). So you do something like that from the login shell before any graphical UI comes up:
$ taskset --cpu-list 0-2,6 bash

That will give you a shell which will spawn all children und children thereof only on the CPUs specified. So in that shell you then start your graphical desktop, e.g.
$ gnome-session
 
To do what uOpt suggested for all user/system processes in a systemd system, set AllowedCPUs on the user.slice and/or system.slice.
 
On Linux you can "easily" run the entire userland on a set of cores of your choosing only. The kernel will still be on all cores, though.

The command is taskset(1). So you do something like that from the login shell before any graphical UI comes up:
$ taskset --cpu-list 0-2,6 bash

That will give you a shell which will spawn all children und children thereof only on the CPUs specified. So in that shell you then start your graphical desktop, e.g.
$ gnome-session
That would be ridiculously painful to work around getting some stuff to be able to fully utilize the CPU since I'd basically have to manually run each separately. Also, again, I don't really want to disable that core, just make it low priority getting only whatever is left over after the preferred cores are loaded and this effectively disables it for things running within that userland. It isn't that it isn't ok for anything to run on core 4 -- I have cooling well in hand -- I just want things to go to the other cores more.
Seems possible, but I don't know how. This article discusses some processor prioritization stuff and won't help you directly, but might get you pointed in the right direction for you to search in (maybe there's a way to override the information that Windows gets from the CPPC2 api). https://www.anandtech.com/show/15137/amd-clarifies-best-cores-vs-preferred-cores
Some of that seems like the right sort of concept, but it would need some BIOS option to tell the firmware to do it and so far I haven't found anything like that unless I'm just not understanding something (which is entirely possible with all the various almost completely undocumented things in any advanced BIOS!)
 
Some of that seems like the right sort of concept, but it would need some BIOS option to tell the firmware to do it and so far I haven't found anything like that unless I'm just not understanding something (which is entirely possible with all the various almost completely undocumented things in any advanced BIOS!)

Yeah, so I'm hoping maybe there's some registry magic you can do to substitute in different values than what the BIOS provides. Maybe, hopefully.
 
Yeah, so I'm hoping maybe there's some registry magic you can do to substitute in different values than what the BIOS provides. Maybe, hopefully.
Yeah, that's the sort of thing I'd really like to see. I think maybe that's done too "on the fly" so to speak though for it to be so simple. I think you at least have the right general sort of idea, just even if it can be done that way neither of us knows how, lol.
 
So I have been running CoreCycler to find new PBO voltage curve numbers after changing a bunch of stuff and I noticed something: core 4 not only has always needed a higher voltage than the rest, but when Prime95 is running on it, the CPU runs 11-13C hotter than any other core! That is... a pretty huge difference... I guess it uses more current too because that's not even on scale with just the voltage difference alone. Core 4 is absolutely the culprit in the majority of heat and power usage on this CPU and very probably was the one that kept that CCX from being binned higher.

What I would like to do is, if possible just sort of de-emphasize that specific core. To be specific I do NOT want to disable it entirely! This is only a six core processor and while my normal usage (gaming in particular) generally never fully utilizes all cores I do still do many things that do such as encoding, heavy compression, etc and the temperature difference even using all six cores is still well managed (I have a fairly good HSF.) In my experience, most games either use 2 or 4 cores in total effectively depending on tech level and it seems like they always end up on 1-4 somehow (I know you'd think it would be random, but as far as I can tell it's pretty much always the same range.) I just want to generate less heat and waste less power whenever not doing any of those things like encoding/etc that actually do utilize all cores significantly, but during those things I still want to utilize the full CPU capabilities within reason. So in other words, I just want things to prefer to send tasks to any other core most of the time, then use it only as much as is needed.

I don't know if this is entirely possible. Even if it is, it may require Windows 11 for Windows versions (I know it has smarter task handling since it can handle Raptor Lake and newer on Intel processors without crashing.) I will not be installing Windows 11. I'm also considering making a Linux migration despite that it is less ideal for gaming, so ideally I'd like to do the same thing there. What would really be most ideal is if there were some sort of setting on the SoC itself that the BIOS could control (maybe that reorders the cores to the OS or something?) I didn't see any obvious settings related to that however. If I have to go with a software solution, I'd rather something like registry tweaks or etc, not something that requires installing programs that have to run continously (such as Ryzen Master, which isn't available on Linux anyway -- or at least wasnt't last I checked.)

Can it be done?

What's the core ranking (you can see this in hwinfo64)? It's probably already the lowest ranked core so would be used least by default.
 
What's the core ranking (you can see this in hwinfo64)? It's probably already the lowest ranked core so would be used least by default.
If, by that, you mean "core performance order," I guess hwinfo does list that one last (well, it enumerates from 1 instead of 0, so I have to assume it's listing them in the same order.) Which begs the question of why anything that uses four cores (eg most newer games) ends up on that one instead of either of the other two not being heavily used (well I presume the first core is priority for the OS or something, but that still clears up the last as higher priority in the list anyway.) But you may be right, it may be at least in general Windows tries to use it less. I think the heaviest gaming threads usually aren't on that core at least, but it's kind of hard to track.

I would assume at least Linux is smarter about it. I don't have good testing in it and am not sure what even would show a per-core breakdown. (I'm waiting for the new Ubuntu LTS for various unrelated reasons.) But my experience is it tends to adhere to conventions like these better than Windows.

Maybe you're right and ultimately nothing really needs to be done. Though I do wish Windows just just a smidge smarter about it if so then.
 
If, by that, you mean "core performance order," I guess hwinfo does list that one last (well, it enumerates from 1 instead of 0, so I have to assume it's listing them in the same order.) Which begs the question of why anything that uses four cores (eg most newer games) ends up on that one instead of either of the other two not being heavily used (well I presume the first core is priority for the OS or something, but that still clears up the last as higher priority in the list anyway.) But you may be right, it may be at least in general Windows tries to use it less. I think the heaviest gaming threads usually aren't on that core at least, but it's kind of hard to track.

I would assume at least Linux is smarter about it. I don't have good testing in it and am not sure what even would show a per-core breakdown. (I'm waiting for the new Ubuntu LTS for various unrelated reasons.) But my experience is it tends to adhere to conventions like these better than Windows.

Maybe you're right and ultimately nothing really needs to be done. Though I do wish Windows just just a smidge smarter about it if so then.
It moves loads around from core to core to better distribute heat and allow higher overall boost, that's why you're seeing it loaded even on less than all core loads, but it should run least often on that core.
 
It moves loads around from core to core to better distribute heat and allow higher overall boost, that's why you're seeing it loaded even on less than all core loads, but it should run least often on that core.
Strangely it really feels like Windows is putting stuff more or less in order. I admit it's hard to really tell, but most games in particular seem to always end up starting from core 1 and just going in order, so usually end up on core 4 unless it's an older one that only truly uses two threads (or really old and only using one.) Though most of their load ends up on the first two that they are using anyway, so it still gets the least of the four used. Maybe the games themselves just start with 2 and then add the other threads manually, without consideration of core priority or something. Though that seems like it could be tricky on Intel's latest processors if any bypass Windows' own handling too much. Luckily not a problem I have to deal with. I admit I haven't really tested extensively with non-game software. Most things that use more than one or two threads are designed to use all cores (like compression/encoding/etc.)

Oh well. I think probably my initial question is at least basically answered. I don't know why Windows is being a tad stubborn about it for some things, but at least this does mean that core 4 should be largely de-prioritized.


As for Linux, I have no idea what scheduler it will be using. I'll just have to wait and see I guess.
 
That [using taskset] would be ridiculously painful to work around getting some stuff to be able to fully utilize the CPU since I'd basically have to manually run each separately.
I think a roundabout variant of this method might be possible.

It might require some coding, though - a piece of software that just runs "do nothing" instructions or "wait" (as in - sleep) which you'd assign to the hot core on boot up.
I do not know how to produce such a thing, it's just an idea I had.
 
Well, I would prefer not to add too much extra complexity with management software and etc. At a certain point it starts to defeat any efficiency improvements when you add on too much to... manually add efficiency improvements. That's why when I initially looked into this my first thought was something like what someone suggested of a registry tweak. However, I would suppose that bobzdar is probably right and the main thing I was looking for is actually already in there. Of course I could manually assign affinities and such in regards to things like games that seem to use the core they shouldn't, but, again, it starts to defeat the purpose if too much is being added on. It's worth noting that while they are using it, they're using it fairly minimally for the most part. Like I said, they seem to go in numerical order starting from core 1, so the bulk of their effort ends up on 1 and 2 which are pretty decent. (In fact, HWInfo lists Core Performance Order as 4, 3, 2, 1, 6, 5, which I presume means 3,2,1,0,5,4 if order is the same, so that means games are putting the bulk of the load on the third, then second most efficient cores. Which is fine.)

I should possibly add here that I'm not doing any overclocking and have a negative voltage curve configured in PBO. Prime95 with all cores maxed out and running AVX2 instructions still stays over 4.5GHz, which is fine (I was formerly using a fixed 4.4GHz speed and a fixed voltage which resulted in around 76 max in Prime95, but decided to let PBO do its thing with a fair bit of tweaking,) so basically anything less than that can pretty much hold the full 4.65GHz on all cores indefinitely probably. I'm not worried about games maxing anything out. I was just looking to make sure that things were fairly optimized in regards to not just randomly wasting energy or producing extra heat without actual need.

In theory I guess that is already in there and I just didn't know it though.

I think a roundabout variant of this method might be possible.

It might require some coding, though - a piece of software that just runs "do nothing" instructions or "wait" (as in - sleep) which you'd assign to the hot core on boot up.
I do not know how to produce such a thing, it's just an idea I had.
I'm not quite sure I understand what you're meaning here. That's actually super easy to do. While I'm at a programming level of "have to google to remind myself how to write a 'hello world' application" I did once create a program to do exactly this. There is a literal "NOP" (no op) command and I ran it in a loop. I made it back in the single core CPU days when messing with overclocking as an emergency measure to force the CPU to cool if Prime95 or etc got out of control and it worked well enough to beat out Prime95, but I think that with a modern OS it's just going to waste cycles and achieve nothing while the OS would probably still see the core as underutilized and assign stuff to it anyway. It might even be possible with modern processors to send a command to force a core to sleep instead of a noop, but again, I still just don't see the point.

If you're thinking just to effectively "disable" the core, there are other, much better ways of doing this, but that is not my goal here.



Probably it's best just to leave it alone. I need to find a way to effectively test programs (maybe a benchmark that starts lots of processes over and over to see how the OS handles multitasking or something?) but probably games are the only things doing it wrong and they're probably just ignoring that processor feature that they... should not be ignoring really. Which puts the real blame on them. Since they're still putting their primary load on my second most efficient cores (assuming HWInfo's order corresponds to what everything else says) it's not that big of a deal if this is all that they do.
 
I'm not quite sure I understand what you're meaning here. That's actually super easy to do. While I'm at a programming level of "have to google to remind myself how to write a 'hello world' application" I did once create a program to do exactly this. There is a literal "NOP" (no op) command and I ran it in a loop. I made it back in the single core CPU days when messing with overclocking as an emergency measure to force the CPU to cool if Prime95 or etc got out of control and it worked well enough to beat out Prime95, but I think that with a modern OS it's just going to waste cycles and achieve nothing while the OS would probably still see the core as underutilized and assign stuff to it anyway. It might even be possible with modern processors to send a command to force a core to sleep instead of a noop, but again, I still just don't see the point.

If you're thinking just to effectively "disable" the core, there are other, much better ways of doing this, but that is not my goal here.
Yeah, I was thinking about spamming NOPs or other "easy" instructions on the core you want to be used less.

My assumption was that the OS would have to yield for processes that were forced to run on that core, and assign stuff to it as a last resort.

The core would be active, but busy processing instructions that cost very little power to perform (but still require a clock tick to finish). It would receive other work, just less often.

But, that all hinges on the idea that 'filler' instructions would actually be cheap enough power-wise to make it viable.
 
But, that all hinges on the idea that 'filler' instructions would actually be cheap enough power-wise to make it viable.
I see what you mean. I think that it wouldn't work because the OS would still see it as mostly idle with today's processor handling. What worked back in the day for the likes of Windows XP just doesn't really apply to the latest OSes. Also it definitely would still use a bit of CPU power (if nothing else handling the actual loop and processing everything else around that NOP.) If things like games are just bypassing the OS for thread handling, then they wouldn't care anyway and would still end up using that core despite the process even if it otherwise worked.
 
Yeah, if the core has to wake up for Noop, that's less time it can spend sleeping. Yes, modern cpus sleep cores while others are working to reduce heat. They're doing everything they can to eek out as much performance as they can.
 
So I have been running CoreCycler to find new PBO voltage curve numbers after changing a bunch of stuff and I noticed something: core 4 not only has always needed a higher voltage than the rest, but when Prime95 is running on it, the CPU runs 11-13C hotter than any other core! That is... a pretty huge difference... I guess it uses more current too because that's not even on scale with just the voltage difference alone. Core 4 is absolutely the culprit in the majority of heat and power usage on this CPU and very probably was the one that kept that CCX from being binned higher.


Can it be done?
A hotter core requires more power, as a rule. You may have gotten unlucky and the solder application is uneven or wasn't heated correctly. I would RMA it.
 
At this point the only way I could do that would be to send it to AMD under the warranty and telling them "one core runs a bit hotter" when the entire CPU is Prime95 stable and that one core can run Prime95 full speed is probably going to result in a refusal under a warranty claim anyway. I don't think that makes sense though regardless. They're not individually soldered separately and haphazardly as you seem to imply. All six cores are in the same CCX and it's attached to the package via a pretty thorough process. It's just bad luck that one in it is so much worse than the others, but it's not about to fall off or something. The biggest problem is mostly just that in something that does use cores heavily (like Prime95 with AVX2 on) it reduces overall performance since it pushes the whole package's temperature up more than the other cores do. It's still stable though and the warranty pretty much only guarantees that it works, not specific performance curves.
 
Back
Top