7950X3D + Proxmox CPU Core Pinning = Gaming VM w/ V-Cache?

Hello!

I have been anticipating the Ryzen 7000 series 3D V-Cache chips for some time now and am planning to build a new system with one soon. If the situation I detail below performs as I hope, I would like to use it in a Proxmox system with a Windows gaming VM.

Now that the 7950X3D & 7900X3D are out, we know that only 1 CCD has access to the large cache and the Windows Game Bar mechanism to park the cores on the non-V-Cache CCD is being used. Also, on the Proxmox side of things, as of release 7.3, it is possible to pin CPU cores to a VM.

Given that info, the question in my mind is…

Would a gaming VM that has had only the cores from the V-Cache CCD pinned to it perform similarly to a native Windows system on the same hardware?

Also, is there any obvious reason this wouldn’t work?

While not exactly the same, the core pinning in Proxmox seems like it could kind-of-sort-of accomplish the same as the core parking in Windows, but I am not well versed enough in the nuts and bolts CPU pinning/parking/affinity/etc to make an educated guess.

If I had an AM5 system now, I would absolutely test this out. Maybe someone like @wendell (wink wink nudge nudge) might share the same curiosity as me?


EDIT: An additional thought on this subject:

One of my concerns with the 7950X3D under virtualization is how the system would handle the 7950X3D/7900X3D’s core parking mechanic. Basically, will Windows still attempt to park cores?

In one of the 7800X3D reviews (I think GN), it was pointed out that systems previously used with the 7950X3D would need a fresh Windows install because it would still attempt to park cores (parkour!) despite this mechanism not being needed on the 7800X3D. I am curious as to what exactly happens to a 7950X3D VM with half the core count.

I am waiting my 7900X3D chip next week and I will use it with Manjaro and KVM for Windows gaming.
I assume that if I isolate/ping the 6 3D cores to my VM, I will have very similar result to a native Windows system (a bit lower cause memory access is not as fast).
However my concern is more on how I am going to setup Linux not to use cores 0-1, which are two of the 3d ones, and work on the other 6.
I read that there is such setting in the BIOS, but haven’t seen one in the manuals I downloaded.
Will give feedback in few days, after I do my testing.

Answer: YES.
With 7950x, I can get 85% single thread and 95% multithreads performance in virtualized Windows. In the VM, Windows doesn’t know which core has best silicon quality, so it loses more single thread performance than multithreads.

Also, Windows scheduler just can’t handle so many cores. In some case, a virtualized Windows will be faster than baremetal, which is mind blowing.

Pardon the delay. I didn’t have email notifications on and didn’t realize anyone had responded.

Awesome! I am very interested in what your testing will show. :grinning:

Interesting to hear that it loses 15% on ST, though not totally unsurprising. I wonder what mechanism Windows uses to determine the most performant core(s).

7950x, -10 Curve Optimizer. DDR5-5600.
Here is the performance inside the VM. Only passthrough 16 cpus. Each vcpu is pinned to each physical core.

1 Like

For now, my VM never worked, as ASRock X670E Steel Legend is on its way back, as it has 7 IOMMU groups. Constant errors regarding IOMMU groups.

Waiting a GB Aorus Master X670E, but due to Easter holidays, I don’t expect it before next weekend.

Was this after turning on ACS? There was someone else who had a similar issue with the Taichi, and the problem was resolved simply by turning it on.

No, I didn’t try that, but the errors where because each group had several devices in it, and I couldn’t pass-through only the ones I wanted. Does ACS splits devices in more groups?

Edit: I cannot find ACS in BIOS, just to test it. If you know where it is, let me know. I looked under CBS

An additional thought on this subject:

One of my concerns with the 7950X3D under virtualization is how the system would handle the 7950X3D/7900X3D’s core parking mechanic. Basically, will Windows still attempt to park cores?

In one of the 7800X3D reviews (I think GN), it was pointed out that systems previously used with the 7950X3D would need a fresh Windows install because it would still attempt to park cores (parkour!) despite this mechanism not being needed on the 7800X3D. I am curious as to what exactly happens to a 7950X3D VM with half the core count.

It’s probably a good idea to stay as far away from chipset drivers in a VM as possible (also for non-V-cache CPUs) AFAIK those are responsible for the parking behaviour. So if you never install them, I don’t see how there could be an issue?

That said, I don’t have a 7950X3D to try it with. I can confirm however that the cache sizes of my 7950X are recognised correctly by Windows regardless of how I pin cores (1 CCD, 2 CCD’s, parts of CCD’s etc.)

There’s probably no way to be 100% sure without trying, if the AMD/Microsoft implementation is so buggy that it won’t recognise the difference between a 7950X3D and a 7800X3D. Though even then, one might be able to spoof the CPUs model to the hypervisor such that it is unaware of the exact model you have.

1 Like

Ah, you’re right. I wasn’t sure how exactly the core parking mechanism worked, but chipset drivers makes sense. In my current system, I have it set up such that I can either boot into Windows via a Proxmox VM, or Windows baremetal (it’s installed on its own dedicated drive). This setup would probably not fly with the 3D v-cache parts, haha.

1 Like

I am receiving my 7950X3D by end of this week, and my plan is to pass-through only the V-Cache cores. So, Windows will “see” an 7800X3D. Therefore, I won’t install chipset drivers (chipset actually is Q35 for VM) nor Gamebar.
My only concern is, how Linux will handle Core 0, since it is used by Kernel, even if you pin/isolate it.

Have you had a chance to do any testing with the 7950X3D in a VM yet?

Actually I did. Lots of issues to setup my system and VM, you can see my thread here.

Without any Isolation, just pinned the CPUs, I have these results (compared to same settings with isolated & pinned 5900X)

  <vcpu placement="static">16</vcpu>
  <iothreads>2</iothreads>
  <cputune>
    <vcpupin vcpu="0" cpuset="0"/>
    <vcpupin vcpu="1" cpuset="16"/>
    <vcpupin vcpu="2" cpuset="1"/>
    <vcpupin vcpu="3" cpuset="17"/>
    <vcpupin vcpu="4" cpuset="2"/>
    <vcpupin vcpu="5" cpuset="18"/>
    <vcpupin vcpu="6" cpuset="3"/>
    <vcpupin vcpu="7" cpuset="19"/>
    <vcpupin vcpu="8" cpuset="4"/>
    <vcpupin vcpu="9" cpuset="20"/>
    <vcpupin vcpu="10" cpuset="5"/>
    <vcpupin vcpu="11" cpuset="21"/>
    <vcpupin vcpu="12" cpuset="6"/>
    <vcpupin vcpu="13" cpuset="22"/>
    <vcpupin vcpu="14" cpuset="7"/>
    <vcpupin vcpu="15" cpuset="23"/>
    <emulatorpin cpuset="15,31"/>
    <iothreadpin iothread="1" cpuset="13,29"/>
    <iothreadpin iothread="2" cpuset="14,30"/>
    <vcpusched vcpus="0" scheduler="rr" priority="1"/>
    <vcpusched vcpus="1" scheduler="rr" priority="1"/>
    <vcpusched vcpus="2" scheduler="rr" priority="1"/>
    <vcpusched vcpus="3" scheduler="rr" priority="1"/>
    <vcpusched vcpus="4" scheduler="rr" priority="1"/>
    <vcpusched vcpus="5" scheduler="rr" priority="1"/>
    <vcpusched vcpus="6" scheduler="rr" priority="1"/>
    <vcpusched vcpus="7" scheduler="rr" priority="1"/>
    <vcpusched vcpus="8" scheduler="rr" priority="1"/>
    <vcpusched vcpus="9" scheduler="rr" priority="1"/>
    <vcpusched vcpus="10" scheduler="rr" priority="1"/>
    <vcpusched vcpus="11" scheduler="rr" priority="1"/>
    <vcpusched vcpus="12" scheduler="rr" priority="1"/>
    <vcpusched vcpus="13" scheduler="rr" priority="1"/>
    <vcpusched vcpus="14" scheduler="rr" priority="1"/>
    <vcpusched vcpus="15" scheduler="rr" priority="1"/>
  </cputune>

Haven’t enable any EXPO or Curve optimizers yet.

does your board have the option to set the CCD for your host OS?
I got my new system yesterday, ASUS B650 Creator and 7950x, luckily had no problems, just transferred my config from the old system and was done.
On my CPU, the first CCD is a bit better, but apparently not all boards have the option to set the CCD to initialize the host system.
Did you change the cpu governor from the host?

My board has 3 options for the CCDs:
Frequency
Gaming
Auto
I set it to Frequency but haven’t notice any difference in the behavior. Even when running plain Linux, not the VM, it uses any available CPU core, not just the non-VCache ones.

What I meant was, you pinned the cores of CCD0 for your VM, but your host OS also uses CCD0, with the new bios versions you can change that

Prioritization of CCDs

Asus doesn’t follow 100% AMDs guidelines, so I am not sure how efficient this will be. At the moment, all the tests I have done point to correct utilization of cores and I haven’t even enable isolation.

here is the explanation why I had asked this

Pinning and isolation of 7950x3d

Possible solution

These are my posts :slight_smile:
And as I said, for now, I am not isolating, as I don’t have any issues. It turns out Linux scheduler does a great job. Also, Kernel 6.3 has even better scheduling for the V-cache processors, but haven’t try it, as it is beta and I am getting a white screen as soon as I login to KDE.