* KVM: SVM: 32-bit PAE Windows 2000 guest crashes with AVIC on Zen 2 (EPYC 7402), reproducible in seconds @ 2026-10-27 4:52 Sam H 2026-10-27 13:48 ` Sean Christopherson 0 siblings, 1 reply; 3+ messages in thread From: Sam H @ 2026-10-27 4:52 UTC (permalink / raw) To: kvm Hey KVM Team, I have a 32-bit Windows 2000 guest running the PAE kernel that bugchecks within 15 to 134 seconds under a process churn load on an AMD Zen 2 host with AVIC enabled. The same guest survives the same load with AVIC off, or with PAE off. I have a disk clone that reproduces it on demand and can test patches against it. Host - 2 x AMD EPYC 7402 (family 17h), microcode 0x830107d - Proxmox VE 9.2.21, kernel 7.0.14-25-pve, QEMU 11.0.3 (pve-qemu-kvm 11.0.3-4) - kvm_amd: avic=Y, enable_ipiv=N, npt=Y - Also crashes on 6.14.8-2-pve (no enable_ipiv parameter on that kernel) Guest - Windows 2000 Datacenter Server SP4, boot.ini /PAE /3GB (ntkrpamp) - Crashes on both the SP4 kernel (5.00.2195.6717) and the Update Rollup 1 kernel (5.00.2195.7045) - -cpu kvm64, machine pc-i440fx-5.1, 2 sockets x 4 cores (8 vCPU), 8192 MiB, numa on - Extra args: -machine hpet=off -rtc driftfix=slew -global kvm-pit.lost_tick_policy=discard (the PIT policy is what keeps AVIC active for this guest) Crash - STOP 0x0000000A IRQL_NOT_LESS_OR_EQUAL, IRQL 2, always in ntkrnlpa.exe. - SP4 kernel: 0x0A (0x00000154, 2, 0, 0xDD537EAF), ntkrnlpa+0x137EAF, mov ecx,[ebx+0x154] with ebx = 0 or 0xF000FF53 (the real mode IVT pattern, i.e. the contents of guest physical page 0). - UR1 kernel: 0x0A (0x00000098, 2, 0, 0xDD53C9E6), ntkrnlpa+0x13C9E6, read of [esi+0x98] with esi = 0. - One write variant was also seen: 0x0A (0x00000098, 2, 1, 0xDD53C84C). - The faulting code is the PAE memory manager's hyperspace page table walk: it maps a page table page into a per-CPU hyperspace slot by writing a PTE, then reads through the slot, and the read comes back zero. - When it crashes, 7 of the 8 vCPUs are stopped at the same EIP (0xDD4335C3) and the crashing vCPU is at 0xDD06A1A6. Reproducer 6 concurrent sessions, each looping 200 short cmd.exe processes plus one debug.exe, so heavy process create and exit. Results on the clone (stress started after boot, same disk each time; 8 vCPU 2x4, kvm64, numa on, 8192 MiB unless stated) - AVIC on, /PAE /3GB (baseline): crashed at 134 s - AVIC on, /3GB only, no /PAE: survived 300 s - AVIC on, /PAE /3GB, 3584 MiB (no RAM above 4 GB): crashed at 26 s - AVIC on, /PAE without /3GB: crashed at 30 s - AVIC on, /PAE /3GB, QEMU vapic=off: crashed at 26 s - AVIC off (PIT reinject), /PAE /3GB: survived 600 s, twice - AVIC on, /PAE /3GB, repeat with tracing: crashed at 15 s - AVIC on, /PAE /3GB, 1 socket x 8 cores: crashed at 50 s - AVIC on, no /PAE, 30 minute soak: survived 1800 s The production copy of the guest also crashed 3 times in one day on a single vCPU with AVIC on (7.0.14-25, enable_ipiv=N), so one vCPU lowers the rate but does not remove it. Setting the CPU vendor to GenuineIntel made no difference. During a traced run the AVIC IRQ window toggled about 1 to 2 times a second, so I do not think it is the IRQ window inhibit issue. The same guest image ran on an Intel Xeon E5-2620 v4 host (Proxmox VE 5.4, kernel 4.15) for years and has no crash dumps on its disk from that time. What I have not tested: npt=0, because AVIC needs NPT, so npt=0 would also turn AVIC off and could not tell the two apart from the AVIC off run above. It would also be a host wide change on a host running ~70 other production workloads/guests, and we can't risk performance impacts. Also kernels other than 6.14 and 7.0. A possibly relevant difference: AMD APM Vol 2 section 15.25.10 says that under nested paging the guest's PAE PDPTEs are not loaded at MOV CR3 the way they are natively or under Intel EPT. I have not proven that is the mechanism, and the AVIC off result says interrupt delivery or timing plays a part as well. I can provide the two minidumps, register captures of all vCPUs at the moment of a crash, and KVM traces, and I can run any patch against the clone. Thanks, Sam Howell ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: KVM: SVM: 32-bit PAE Windows 2000 guest crashes with AVIC on Zen 2 (EPYC 7402), reproducible in seconds 2026-10-27 4:52 KVM: SVM: 32-bit PAE Windows 2000 guest crashes with AVIC on Zen 2 (EPYC 7402), reproducible in seconds Sam H @ 2026-10-27 13:48 ` Sean Christopherson 2026-10-28 1:34 ` Sam H 0 siblings, 1 reply; 3+ messages in thread From: Sean Christopherson @ 2026-10-27 13:48 UTC (permalink / raw) To: Sam H; +Cc: kvm On Tue, Oct 27, 2026, Sam H wrote: > Hey KVM Team, > > I have a 32-bit Windows 2000 guest running the PAE kernel On purpose? :-D > that bugchecks within 15 to 134 seconds under a process churn load on an AMD > Zen 2 host with AVIC enabled. The same guest survives the same load with AVIC > off, or with PAE off. I have a disk clone that reproduces it on demand and > can test patches against it. > > Host > - 2 x AMD EPYC 7402 (family 17h), microcode 0x830107d Do you have access to Zen4+ hardware? If this only reproduces on Rome (Zen2), then unfortunately the answer is going to be "don't run AVIC on Rome". > - Proxmox VE 9.2.21, kernel 7.0.14-25-pve, QEMU 11.0.3 (pve-qemu-kvm 11.0.3-4) > - kvm_amd: avic=Y, enable_ipiv=N, npt=Y > - Also crashes on 6.14.8-2-pve (no enable_ipiv parameter on that kernel) > > Guest > - Windows 2000 Datacenter Server SP4, boot.ini /PAE /3GB (ntkrpamp) > - Crashes on both the SP4 kernel (5.00.2195.6717) and the Update > Rollup 1 kernel (5.00.2195.7045) > - -cpu kvm64, machine pc-i440fx-5.1, 2 sockets x 4 cores (8 vCPU), > 8192 MiB, numa on > - Extra args: -machine hpet=off -rtc driftfix=slew -global > kvm-pit.lost_tick_policy=discard (the PIT policy is what keeps AVIC > active for this guest) > > Crash > - STOP 0x0000000A IRQL_NOT_LESS_OR_EQUAL, IRQL 2, always in ntkrnlpa.exe. > - SP4 kernel: 0x0A (0x00000154, 2, 0, 0xDD537EAF), ntkrnlpa+0x137EAF, > mov ecx,[ebx+0x154] with ebx = 0 or 0xF000FF53 (the real mode IVT > pattern, i.e. the contents of guest physical page 0). > - UR1 kernel: 0x0A (0x00000098, 2, 0, 0xDD53C9E6), ntkrnlpa+0x13C9E6, > read of [esi+0x98] with esi = 0. > - One write variant was also seen: 0x0A (0x00000098, 2, 1, 0xDD53C84C). > - The faulting code is the PAE memory manager's hyperspace page table > walk: it maps a page table page into a per-CPU hyperspace slot by > writing a PTE, then reads through the slot, and the read comes back > zero. > - When it crashes, 7 of the 8 vCPUs are stopped at the same EIP > (0xDD4335C3) and the crashing vCPU is at 0xDD06A1A6. > > Reproducer > 6 concurrent sessions, each looping 200 short cmd.exe processes plus > one debug.exe, so heavy process create and exit. > > Results on the clone (stress started after boot, same disk each time; > 8 vCPU 2x4, kvm64, numa on, 8192 MiB unless stated) > - AVIC on, /PAE /3GB (baseline): crashed at 134 s > - AVIC on, /3GB only, no /PAE: survived 300 s > - AVIC on, /PAE /3GB, 3584 MiB (no RAM above 4 GB): crashed at 26 s > - AVIC on, /PAE without /3GB: crashed at 30 s > - AVIC on, /PAE /3GB, QEMU vapic=off: crashed at 26 s > - AVIC off (PIT reinject), /PAE /3GB: survived 600 s, twice > - AVIC on, /PAE /3GB, repeat with tracing: crashed at 15 s > - AVIC on, /PAE /3GB, 1 socket x 8 cores: crashed at 50 s > - AVIC on, no /PAE, 30 minute soak: survived 1800 s > > The production copy of the guest also crashed 3 times in one day on a > single vCPU with AVIC on (7.0.14-25, enable_ipiv=N), so one vCPU > lowers the rate but does not remove it. Setting the CPU vendor to > GenuineIntel made no difference. During a traced run the AVIC IRQ > window toggled about 1 to 2 times a second, so I do not think it is > the IRQ window inhibit issue. > > The same guest image ran on an Intel Xeon E5-2620 v4 host (Proxmox VE > 5.4, kernel 4.15) for years and has no crash dumps on its disk from > that time. > > What I have not tested: npt=0, because AVIC needs NPT, so npt=0 would > also turn AVIC off and could not tell the two apart from the AVIC off > run above. It would also be a host wide change on a host running ~70 > other production workloads/guests, and we can't risk performance > impacts. Also kernels other than 6.14 and 7.0. > > A possibly relevant difference: AMD APM Vol 2 section 15.25.10 says > that under nested paging the guest's PAE PDPTEs are not loaded at MOV > CR3 the way they are natively or under Intel EPT. I have not proven > that is the mechanism, and the AVIC off result says interrupt delivery > or timing plays a part as well. > > I can provide the two minidumps, register captures of all vCPUs at the > moment of a crash, and KVM traces, and I can run any patch against the > clone. > > Thanks, > Sam Howell > ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: KVM: SVM: 32-bit PAE Windows 2000 guest crashes with AVIC on Zen 2 (EPYC 7402), reproducible in seconds 2026-10-27 13:48 ` Sean Christopherson @ 2026-10-28 1:34 ` Sam H 0 siblings, 0 replies; 3+ messages in thread From: Sam H @ 2026-10-28 1:34 UTC (permalink / raw) To: Sean Christopherson; +Cc: kvm >> I have a 32-bit Windows 2000 guest running the PAE kernel > > On purpose? :-D My face when I accidentally boot a Windows 2000 guest running the PAE kernel again xD Unfortunately, I inherited it. It's for a monolith app running on servers older than I am. We are currently trying to strangler fig it out of existence into microservices, but until the last vine closes in it has to keep running. When they bought the replacement hypervisor server, before I started, they didn't think (or know) to check for things like this, so the old dying box with Intel CPU's works fine and the new AMD one doesn't. >> Host >> - 2 x AMD EPYC 7402 (family 17h), microcode 0x830107d > > Do you have access to Zen4+ hardware? If this only reproduces on Rome (Zen2), > then unfortunately the answer is going to be "don't run AVIC on Rome". Yes, and it reproduces on Zen 4 as well. I copied the same disk clone to a Zen 4 host and ran it with the same QEMU arguments and the same stress load. It crashed twice out of two valid runs. Zen 4 host - AMD Ryzen Threadripper 7960X (family 19h, model 0x18), 1 socket, microcode 0xa10810c, CPU flags avic and x2avic - Ubuntu 24.04, kernel 7.0.0-38.38~24.04.4-generic (based on 7.0.14) - QEMU 8.2.2 (Debian 1:8.2.2+ds-0ubuntu1.18) - kvm_amd: avic=Y, enable_ipiv=Y, vnmi=Y, npt=Y - AVIC confirmed active during the runs with kvm tracing, not only from the module parameter Guest (same as the Rome runs) - Same disk clone, booted on a throwaway qcow2 overlay each run - Windows 2000 Datacenter Server SP4 kernel (5.00.2195.6717), boot.ini /PAE /3GB, CR4 0x6b1 on all 8 vCPUs - -cpu kvm64, machine pc-i440fx-5.1, 2 sockets x 4 cores (8 vCPU), 8192 MiB, numa on - -machine hpet=off -rtc driftfix=slew -global kvm-pit.lost_tick_policy=discard Results - AVIC on, /PAE /3GB: crashed within 28 s of starting the stress STOP 0x0000004E PFN_LIST_CORRUPT (0x00000099, 0x0, 0x0, 0x00000000) - AVIC on, /PAE /3GB, repeat: crashed 10 s after starting the stress STOP 0x0000004E PFN_LIST_CORRUPT (0x00000099, 0x0, 0x1, 0x00000000) The stop code is different from Rome (0x0A there), but the pattern is the same. Parameter 1 0x99 is a PTE pointing at an invalid PFN, and the PFN is 0. That fits a page table read coming back as zero, which is what the 0x0A crashes on Rome showed. At the time of the crash 7 of the 8 vCPUs were stopped at the same EIP (0xDD431D87), and the crashing vCPU was at 0xDD069C0E doing port I/O to 0x1F0 while it wrote the dump. The EIPs differ from my first mail because this clone is now on the SP4 kernel and not Update Rollup 1. Things that differ from the Rome host, for completeness: QEMU 8.2.2 here against 11.0.3 there, enable_ipiv=Y here against N there, and x2AVIC and vNMI are available here. What I do not have yet - A clean AVIC off control on the Zen 4 host. My one attempt did not finish booting the guest and I stopped it before any stress ran, so I am not counting it. I will rerun it and follow up with the result. - A reproducer I can share. The disk clone holds company data and Windows 2000 is not mine to redistribute. A Debian 12 i386 guest on the 686-pae kernel, same QEMU machine plus kvm=off -x2apic, under a fork/exec/exit storm (about 21,600 forks/s across 8 vCPUs) ran for about 4 minutes without a crash. That is a short run, so I would not call it conclusive. Next I will try a clean Windows 2000 SP4 install with the same QEMU arguments and boot.ini. If that crashes, I can send the full steps to rebuild it from your own media plus the stress script, which is ours. In the meantime the offer stands. I can run any patch or debug build against the clone on either host, and I can send vCPU register captures and KVM traces from the Zen 4 crashes. The full memory dumps contain company data, so I can't post those, but I can pull anything specific out of them on request. Thanks, Sam Howell On Tue, 27 Oct 2026 at 23:48, Sean Christopherson <seanjc@google.com> wrote: > > On Tue, Oct 27, 2026, Sam H wrote: > > Hey KVM Team, > > > > I have a 32-bit Windows 2000 guest running the PAE kernel > > On purpose? :-D > > > that bugchecks within 15 to 134 seconds under a process churn load on an AMD > > Zen 2 host with AVIC enabled. The same guest survives the same load with AVIC > > off, or with PAE off. I have a disk clone that reproduces it on demand and > > can test patches against it. > > > > Host > > - 2 x AMD EPYC 7402 (family 17h), microcode 0x830107d > > Do you have access to Zen4+ hardware? If this only reproduces on Rome (Zen2), > then unfortunately the answer is going to be "don't run AVIC on Rome". > > > - Proxmox VE 9.2.21, kernel 7.0.14-25-pve, QEMU 11.0.3 (pve-qemu-kvm 11.0.3-4) > > - kvm_amd: avic=Y, enable_ipiv=N, npt=Y > > - Also crashes on 6.14.8-2-pve (no enable_ipiv parameter on that kernel) > > > > Guest > > - Windows 2000 Datacenter Server SP4, boot.ini /PAE /3GB (ntkrpamp) > > - Crashes on both the SP4 kernel (5.00.2195.6717) and the Update > > Rollup 1 kernel (5.00.2195.7045) > > - -cpu kvm64, machine pc-i440fx-5.1, 2 sockets x 4 cores (8 vCPU), > > 8192 MiB, numa on > > - Extra args: -machine hpet=off -rtc driftfix=slew -global > > kvm-pit.lost_tick_policy=discard (the PIT policy is what keeps AVIC > > active for this guest) > > > > Crash > > - STOP 0x0000000A IRQL_NOT_LESS_OR_EQUAL, IRQL 2, always in ntkrnlpa.exe. > > - SP4 kernel: 0x0A (0x00000154, 2, 0, 0xDD537EAF), ntkrnlpa+0x137EAF, > > mov ecx,[ebx+0x154] with ebx = 0 or 0xF000FF53 (the real mode IVT > > pattern, i.e. the contents of guest physical page 0). > > - UR1 kernel: 0x0A (0x00000098, 2, 0, 0xDD53C9E6), ntkrnlpa+0x13C9E6, > > read of [esi+0x98] with esi = 0. > > - One write variant was also seen: 0x0A (0x00000098, 2, 1, 0xDD53C84C). > > - The faulting code is the PAE memory manager's hyperspace page table > > walk: it maps a page table page into a per-CPU hyperspace slot by > > writing a PTE, then reads through the slot, and the read comes back > > zero. > > - When it crashes, 7 of the 8 vCPUs are stopped at the same EIP > > (0xDD4335C3) and the crashing vCPU is at 0xDD06A1A6. > > > > Reproducer > > 6 concurrent sessions, each looping 200 short cmd.exe processes plus > > one debug.exe, so heavy process create and exit. > > > > Results on the clone (stress started after boot, same disk each time; > > 8 vCPU 2x4, kvm64, numa on, 8192 MiB unless stated) > > - AVIC on, /PAE /3GB (baseline): crashed at 134 s > > - AVIC on, /3GB only, no /PAE: survived 300 s > > - AVIC on, /PAE /3GB, 3584 MiB (no RAM above 4 GB): crashed at 26 s > > - AVIC on, /PAE without /3GB: crashed at 30 s > > - AVIC on, /PAE /3GB, QEMU vapic=off: crashed at 26 s > > - AVIC off (PIT reinject), /PAE /3GB: survived 600 s, twice > > - AVIC on, /PAE /3GB, repeat with tracing: crashed at 15 s > > - AVIC on, /PAE /3GB, 1 socket x 8 cores: crashed at 50 s > > - AVIC on, no /PAE, 30 minute soak: survived 1800 s > > > > The production copy of the guest also crashed 3 times in one day on a > > single vCPU with AVIC on (7.0.14-25, enable_ipiv=N), so one vCPU > > lowers the rate but does not remove it. Setting the CPU vendor to > > GenuineIntel made no difference. During a traced run the AVIC IRQ > > window toggled about 1 to 2 times a second, so I do not think it is > > the IRQ window inhibit issue. > > > > The same guest image ran on an Intel Xeon E5-2620 v4 host (Proxmox VE > > 5.4, kernel 4.15) for years and has no crash dumps on its disk from > > that time. > > > > What I have not tested: npt=0, because AVIC needs NPT, so npt=0 would > > also turn AVIC off and could not tell the two apart from the AVIC off > > run above. It would also be a host wide change on a host running ~70 > > other production workloads/guests, and we can't risk performance > > impacts. Also kernels other than 6.14 and 7.0. > > > > A possibly relevant difference: AMD APM Vol 2 section 15.25.10 says > > that under nested paging the guest's PAE PDPTEs are not loaded at MOV > > CR3 the way they are natively or under Intel EPT. I have not proven > > that is the mechanism, and the AVIC off result says interrupt delivery > > or timing plays a part as well. > > > > I can provide the two minidumps, register captures of all vCPUs at the > > moment of a crash, and KVM traces, and I can run any patch against the > > clone. > > > > Thanks, > > Sam Howell > > ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-28 1:34 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-10-27 4:52 KVM: SVM: 32-bit PAE Windows 2000 guest crashes with AVIC on Zen 2 (EPYC 7402), reproducible in seconds Sam H 2026-10-27 13:48 ` Sean Christopherson 2026-10-28 1:34 ` Sam H
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.