Oh.... and i have more to say about the Windows Scheduler, now that i have got started on it!!!!!
Ryzen, particularity Ryzen 3000.
In lightly threaded Workloads (like low threaded games) what's supposed to happen is everything is meant to happen within one CCX, nothing is ever supposed to jump between CCX's let alone chiplets, this to keep latency low, as low as Coffelake's Ring Bus, low Latency Inter core communication = high performance in games.
The Windows Scheduler just doesn't do that, it likes to switch a singular workload between cores, you can even see this when your watching MSI OSD CPU threads, you can see the load on the CPU's moving around all over the place, this is fine on Coffeelake with its Ring Bus everything is always extremely close and tight, the down side it this only works with upto 10 cores, beyond that the traces are too long and complex which is why Skylake-X has a high latency "Mesh" architecture.
The problem for Ryzen 3000 with the Windows Scheduler is the same workload is moving around between CCX's and die clusters adding unnecessary latency, this isn't quite so apparent because the IPC on Ryzen 3000 is about 10% higher than Coffeelake, so the end result is less of an impact by comparison.
Sometimes AMD can put in hacks to force low threaded games to stay within one CCX, when that is the case you can see the true performance of Ryzen 3000.
Exhibit A: CS:GO really easy to hack as this game only uses 2 maybe 3 threads at most.
The 3900X with PBO is probably running at about 4.5Ghz here, vs a 5Ghz 9900K.
The 9900K is about 10% higher clocked and yet the 3900X is about 4% faster in CS:GO.
If the Windows Scheduler wasn't so crap more games would look something like this on Ryzen 3000