You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[Bug]: Linux guest intermittently hangs during boot: expedited RCU grace period never completes because target vCPU is idle with interrupts enabled (lost IPI) #861
The jiffies count climbs indefinitely and the guest never recovers. Every task
that subsequently forks blocks behind the stalled grace period, so boot stops.
The significant finding is that the vCPU that RCU reports as blocking is not
stuck. Reading guest CPU state from the host shows it halted in the idle loop
with interrupts enabled, indistinguishable from the other vCPUs. It is idle and
fully interruptible; it has simply never received the expedited grace period IPI.
This appears to be a lost or undelivered inter-processor interrupt in VirtualBox's
software APIC emulation, not a guest kernel deadlock.
Booting the guest with nox2apic rcupdate.rcu_normal=1 eliminates the hang
completely. This was verified across three labs of ~37 machines each under
production load, against control labs that continued to fail.
VirtualBox 7.2.14 r174565, Extension Pack installed, but also experienced with other 7.2 versions
Full VT-x available and in use. HM: Using VT-x implementation 3.0,
nested paging and unrestricted guest enabled, UseNEMInstead = 0. No Hyper-V involvement - these are Linux hosts (see "Ruled out" below).
Guest
Linux Mint 22.2 (MATE), Ubuntu 24.04 base
Reproduced on kernel 6.8.0-139-generic and 6.17.0-35-generic and 6.14.0-37-generic
4 vCPUs, 8 GB RAM, EFI firmware
Reproduced on both PIIX3 and ICH9 chipsets
VMSVGA graphics, 256 MB VRAM, 3D disabled
PCnet-FAST III NIC, NAT
Immutable disk (differencing VMDK, discarded each boot)
Guest Additions 7.2.14 installed
Effective paravirt provider: KVM
Frequency: intermittent. Occurs on a minority of boots, but reliably affects
several machines per lab session when 30+ machines boot at around the same time. The machines that are affected differ each time - they are not the same machines all the time.
Symptoms
Boot proceeds normally to the point where systemd is starting services, then:
rcu: INFO: rcu_preempt detected expedited stalls on CPUs/tasks: { 3-...D } 60580 jiffies s: 93 root: 0x8/.
rcu: blocking rcu_node structures (internal RCU debug):
INFO: task (sd-mkdcreds):492 blocked for more than 122 seconds.
Tainted: G W OE 6.8.0-139-generic #139-Ubuntu
INFO: task kworker/1:0:25 blocked for more than 122 seconds.
The stall message repeats with a rising jiffies count (observed up to 781474
jiffies, roughly 13 minutes, before the machine was reset manually). It does not
recover.
Which CPU is named varies between boots (CPU 1 and CPU 3 both observed), as does
the accompanying root: mask (0x2/, 0x8/).
Which systemd units fail varies between machines and boots - polkit.service, systemd-logind.service, accounts-daemon.service, switcheroo-control.service have all been seen. These are not independent
failures: they are whichever services happened to be forking when the block
occurred. Blocked task names are frequently truncated systemd children caught
mid-exec.
Key diagnostic evidence
The reported CPU is idle, not stuck
With a guest in the hung state, from the host:
$ VBoxManage debugvm <vm> info cpumguest
All four vCPUs, including CPU 3 which RCU reports as blocking, show:
All four vCPUs are at the same kernel RIP, on per-CPU idle stacks spaced
0x8000 apart.
VBoxManage debugvm <vm> info cpumguestinstr disassembles that address as c3 retn - the function epilogue reached after hlt returns in the idle loop.
Every general-purpose register is zeroed, consistent with an idle task.
eflags=00000246 - bit 9 (IF) is set. Interrupts are enabled on the
"blocking" CPU.
Sampled five times over 15+ seconds: values byte-identical, no progress.
This state is indistinguishable from a healthy idle guest. The CPU is not
spinning on a lock, not in a driver, and not executing anything. It is halted
and available, waiting for an interrupt that never arrives.
SysRq confirms the kernel is alive
With kernel.sysrq=1 set:
SysRq-W (show blocked state) printed sysrq: Show Blocked State to the
console and then listed no tasks - despite the hung task detector reporting
two blocked tasks moments earlier. This is consistent with the tasks waiting
in synchronize_rcu_expedited, which is a killable wait not enumerated by the
blocked-state dump.
SysRq-L (backtrace all active CPUs) printed sysrq: Show backtrace of all active CPUs and then produced no backtraces at
all, suggesting the NMIs it sends were also not answered.
Both handlers executed, so the guest kernel is running and servicing keyboard
interrupts on at least one CPU.
Host side is healthy
top -H -p <VirtualBoxVM pid> during the hang shows all EMT threads in S
state at ~2% CPU. No thread is in D state. The host is not blocked on I/O and
the VM process is not spinning.
Associated kernel warning
A WARN_ON in RCU fires on affected guests, and also on some successful boots:
The call trace contains no VirtualBox modules. It is an APIC timer interrupt
arriving while a udev-worker is in __slab_free, and RCU's consistency check
failing. This is the same warning reported in ticket #22222 (there at tree_plugin.h:744 on a 6.11 kernel - same function, same (udev-worker)
process, same G OE taint).
This warning appears on healthy boots too, so it is not by itself the hang - but
it indicates RCU is repeatedly finding itself in an unexpected state relative to
timer interrupt delivery.
Relevant VBox.log lines
GIM: Using provider 'KVM' (Implementation version: 0)
APIC0: Switched mode to x2APIC
APIC: fPostedIntrsEnabled=false fVirtApicRegsEnabled=false fSupportsTscDeadline=false
HM: Using VT-x implementation 3.0
The guest CPUID hypervisor leaf 40000001 returns 01000089 - clocksource,
clocksource2, PV_UNHALT and the stable-TSC bit. KVM_FEATURE_STEAL_TIME and PV_SCHED_YIELD are not advertised.
The APIC is emulated entirely in software with no hardware assist (no posted
interrupts, no virtual APIC registers, no TSC deadline).
Ruled out
Each of the following was tested and does not affect the outcome:
Hypothesis
Test
Result
Guest kernel version
6.8.0-139 and 6.17.0-35
Identical failure on both
Chipset
PIIX3 and ICH9
Identical failure on both
Shared folders (vboxsf)
Removed the only shared folder, one full lab
Still failed at normal rate
Graphics driver
vmwgfx absent from call trace
Not implicated
Host storage
NVMe; host threads never in D state
Not implicated
Hyper-V / NEM fallback
Linux hosts, full VT-x, UseNEMInstead=0
Not applicable
Core dump handling
apport removed, systemd-coredump capped
Symptom persisted
The reporter notes the guest previously ran without incident on kernel 5.19.17,
suggesting changes in RCU's expedited grace period usage and/or tick handling
since then have made a pre-existing race reachable.
Workaround
Adding the following to the guest kernel command line eliminates the hang:
nox2apic rcupdate.rcu_normal=1
rcupdate.rcu_normal=1 disables expedited grace periods entirely for the life of
the boot. The guest confirms this at startup:
rcu: Preemptible hierarchical RCU implementation.
No expedited grace period (rcu_normal).
With expedited grace periods disabled, RCU waits passively for each CPU to pass
through a quiescent state via the tick rather than demanding acknowledgement by
IPI, so the undelivered IPI no longer blocks anything.
nox2apic forces the guest onto legacy xAPIC. It has not been independently
verified as necessary - the two parameters were deployed together.
Note that rcupdate.rcu_normal_after_boot=1 alone is not sufficient, because
the hang occurs during boot when expedited grace periods are still forced on.
NOTE: Prior to this work, it was observed that manually installing kernel 5.19.17-generic on the guest Linux OS worked without issue. No lock ups were observed on the same machines.
Verification
Configuration
Labs
Machines in use
Boot hangs
nox2apic rcupdate.rcu_normal=1
3
~30+ per lab
0
Shared folder removed, otherwise unchanged
1
~30+
Several
Unchanged (control)
2
~30+
Several
All labs ran the same guest image and the same VirtualBox version, on the same
host hardware model, during the same assessment sessions.
Suggested area to investigate
The evidence points to expedited RCU grace period IPIs occasionally not being
delivered to, or not waking, a halted vCPU. Given that the target CPU is in hlt with IF set, candidate areas include:
IPI delivery to a vCPU in the halted activity state under the software APIC
emulation, particularly in x2APIC mode
Interaction between IPI delivery and the VMX-preemption-timer-driven wakeup
path (fUsePeriodicPreemptionTimers=false, cPreemptTimerShift=7)
Any window between a vCPU signalling halt and the emulation registering it as
interruptible
The intermittency and the correlation with many VMs starting simultaneously on
separate hosts suggest a timing-sensitive race rather than a systematic error.
Related reports
Ticket #22222 - "Linux guest kernel warning on boot". Same RCU warning,
same function, same (udev-worker) context, on Debian 6.11.4.
Forum topic 112589 - "Ubuntu 22.04 randomly fails to boot". Same expedited
stall signature with a climbing jiffies count, across VirtualBox 7.0.x, 7.1
and 7.1.2.
None of these appear to have established that the reported CPU is idle and
interruptible rather than stuck, which is what distinguishes a lost IPI from a
guest-side deadlock.
Secondary issue
VBoxManage modifyvm <vm> --x2apic off also disables the local APIC entirely. VBoxManage showvminfo subsequently reports:
APIC: disabled
X2APIC: disabled
and the guest fails to boot with 4 vCPUs. --apic on --x2apic off does not
restore the expected combination; APIC remains disabled. Tested on VirtualBox
7.2.14 r174565 on a Linux host. As noted above, this symptom has been observed on earlier versions of VirtualBox, too.
If disabling x2APIC while retaining the local APIC is intended to be supported,
this looks like a separate bug. It also blocks the most obvious host-side test
of the issue described above.
How can we reproduce this?
The bug report includes various details on the nature of the environment. To increase your chances of seeing this bug you would need to set up a lab of many machines. The report was based on a sample of 166 machines. That said, here is more detailed information:
Evidence attachment: VirtualBox Linux guest boot hang
All output below is verbatim as captured. Provenance is stated for each item,
because not every capture came from a guest in the hung state - please read the
"Captured from" line before using any of it.
1. Guest CPU state during the hang (primary evidence)
Captured from: a guest actively hung at boot, ICH9 chipset, guest kernel
6.8.0-139-generic, VirtualBox 7.2.14 r174565, Linux host. Console at the time
was repeating rcu_preempt detected expedited stalls on CPUs/tasks: { 3-...D }
with the jiffies count climbing (781474 jiffies at the last observation, roughly
13 minutes).
What this shows. CPU 3 is the CPU that RCU reports as blocking the expedited
grace period ({ 3-...D }, root: 0x8/). It is in exactly the same state as the
three CPUs RCU is content with:
A single-byte ret - the function epilogue reached after hlt returns in the
idle loop. Not a spin loop, not a pause, not a port access.
3. Repeated sampling: no progress over 15 seconds
Captured from: the same hung guest. Five iterations at 3-second intervals.
$ for i in 1 2 3 4 5; do
vboxmanage debugvm Linux_Mint_22.2 info cpumguest | grep -E '^rip'
vboxmanage debugvm Linux_Mint_22.2 info cpumguestinstr
echo ---; sleep 3
done
rip=ffffffffb245895b rsp=ffffffffb3803e18 rbp=ffffffffb3803e20 iopl=0 iopl=0 nv up ei pl zr na po nc
rip=ffffffffb245895b rsp=ffffd2ecc00b7e78 rbp=ffffd2ecc00b7e80 iopl=0 iopl=0 nv up ei pl zr na po nc
rip=ffffffffb245895b rsp=ffffd2ecc00bfe78 rbp=ffffd2ecc00bfe80 iopl=0 iopl=0 nv up ei pl zr na po nc
rip=ffffffffb245895b rsp=ffffd2ecc00c7e78 rbp=ffffd2ecc00c7e80 iopl=0 iopl=0 nv up ei pl zr na po nc
CPUM0: 0010:ffffffffb245895b c3 retn
CPUM1: 0010:ffffffffb245895b c3 retn
CPUM2: 0010:ffffffffb245895b c3 retn
CPUM3: 0010:ffffffffb245895b c3 retn
---
Iterations 2 through 5 were byte-for-byte identical to the above and are omitted
for brevity. No vCPU made any progress over the sampling period.
4. SysRq results during the hang
Captured from: the same hung guest, with kernel.sysrq=1 set in the image.
Scancodes injected from the host via VBoxManage controlvm ... keyboardputscancode.
Both lines below appeared on the guest console.
[ 593.006057] sysrq: Show Blocked State
[ 769.012472] sysrq: Show backtrace of all active CPUs
Show Blocked State printed its header and then listed no tasks, despite the
hung task detector having reported (sd-mkdcreds):492 and kworker/1:0:25 as
blocked moments earlier. This is consistent with those tasks waiting in synchronize_rcu_expedited, which is a killable wait and is not enumerated by
the blocked-state dump.
Show backtrace of all active CPUs printed its header and produced no
backtraces at all, suggesting the NMIs it broadcasts were also not answered.
Both handlers ran, so the guest kernel was alive and servicing keyboard
interrupts throughout.
5. RCU warning and call trace
Captured from: a guest that booted successfully, with the workaround
parameters nox2apic rcupdate.rcu_normal=1 already applied, guest kernel
6.8.0-139-generic.
This is an important caveat: the warning was captured on a healthy boot with the
workaround in place. It demonstrates that the warning fires independently of the
hang, and persists with the workaround applied. The W taint flag was present
on every hung boot observed, but the trace itself was never captured on a hung
machine because the console had scrolled past it and scrollback was unavailable.
What this shows. An APIC timer interrupt arrives while a (udev-worker) is
in __slab_free; the tick handler runs rcu_sched_clock_irq, and RCU's
consistency check fires. The call trace contains no VirtualBox modules - vboxguest(OE) and vmwgfx are loaded but are not in the code path.
A second occurrence of the same warning on a different boot of the same machine
fired at [ 13.541392] on CPU 1, PID 390.
This matches ticket #22222, which reports the same warning in the same function
from the same (udev-worker) context on a Debian 6.11.4 guest (at tree_plugin.h:744 - the line number differs only because of the kernel
version).
6. Confirmation the workaround is active
Captured from: a guest booted with nox2apic rcupdate.rcu_normal=1.
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-6.8.0-139-generic root=UUID=881c1b26-20c2-4ede-be5a-c5c89449d3b4 ro quiet nox2apic rcupdate.rcu_normal=1
$ dmesg | grep -i rcu
[ 0.085068] rcu: Preemptible hierarchical RCU implementation.
[ 0.085070] rcu: RCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=4.
[ 0.085071] No expedited grace period (rcu_normal).
[ 0.085071] Trampoline variant of Tasks RCU enabled.
[ 0.085072] Rude variant of Tasks RCU enabled.
[ 0.085072] Tracing variant of Tasks RCU enabled.
[ 0.085073] rcu: RCU calculated value of scheduler-enlistment delay is 100 jiffies.
[ 0.085074] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[ 0.087584] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[ 0.213075] rcu: Hierarchical SRCU implementation.
$ nproc
4
No expedited grace period (rcu_normal) confirms expedited grace periods are
disabled for the life of the boot, so the stall path cannot execute. All four
vCPUs remain online. No Switched to x2APIC message appears, confirming nox2apic took effect; on unmodified guests the host log shows APIC0: Switched mode to x2APIC.
7. VM configuration
Captured from: the affected VM, powered off. This is the configuration in
use when the hangs occur (chipset shown here is PIIX3; the hang also reproduces
with --chipset ich9).
0x01000089 = bits 0, 3, 7, 24: clocksource, clocksource2, PV_UNHALT, and the
stable-TSC bit. KVM_FEATURE_STEAL_TIME (bit 5) and PV_SCHED_YIELD (bit 13)
are not advertised.
The local APIC is emulated in software with no hardware assist: no posted
interrupts, no virtual APIC register access, no TSC deadline support.
Did you upload all of your necessary log files, screenshots, etc.?
Yes, I've uploaded all pertinent files to this issue.
Version
7.2.14
Host OS Type
Linux
Host OS name + version
Linux Mint 22.x Cinnamon
Host Architecture
x86
Guest OS Type
Linux
Guest Architecture
x86
Guest OS name + version
Linux Mint 22.x MATE
Component
Other
What happened?
On a fleet of 130+ identically configured lab machines, Linux guests intermittently
hang during boot. The guest console reports:
The jiffies count climbs indefinitely and the guest never recovers. Every task
that subsequently forks blocks behind the stalled grace period, so boot stops.
The significant finding is that the vCPU that RCU reports as blocking is not
stuck. Reading guest CPU state from the host shows it halted in the idle loop
with interrupts enabled, indistinguishable from the other vCPUs. It is idle and
fully interruptible; it has simply never received the expedited grace period IPI.
This appears to be a lost or undelivered inter-processor interrupt in VirtualBox's
software APIC emulation, not a guest kernel deadlock.
Booting the guest with
nox2apic rcupdate.rcu_normal=1eliminates the hangcompletely. This was verified across three labs of ~37 machines each under
production load, against control labs that continued to fail.
Environment
Host
HM: Using VT-x implementation 3.0,nested paging and unrestricted guest enabled,
UseNEMInstead = 0.No Hyper-V involvement - these are Linux hosts (see "Ruled out" below).
Guest
Frequency: intermittent. Occurs on a minority of boots, but reliably affects
several machines per lab session when 30+ machines boot at around the same time. The machines that are affected differ each time - they are not the same machines all the time.
Symptoms
Boot proceeds normally to the point where systemd is starting services, then:
The stall message repeats with a rising jiffies count (observed up to 781474
jiffies, roughly 13 minutes, before the machine was reset manually). It does not
recover.
Which CPU is named varies between boots (CPU 1 and CPU 3 both observed), as does
the accompanying
root:mask (0x2/,0x8/).Which systemd units fail varies between machines and boots -
polkit.service,systemd-logind.service,accounts-daemon.service,switcheroo-control.servicehave all been seen. These are not independentfailures: they are whichever services happened to be forking when the block
occurred. Blocked task names are frequently truncated systemd children caught
mid-exec.
Key diagnostic evidence
The reported CPU is idle, not stuck
With a guest in the hung state, from the host:
All four vCPUs, including CPU 3 which RCU reports as blocking, show:
Points to note:
0x8000 apart.
VBoxManage debugvm <vm> info cpumguestinstrdisassembles that address asc3 retn- the function epilogue reached afterhltreturns in the idle loop.eflags=00000246- bit 9 (IF) is set. Interrupts are enabled on the"blocking" CPU.
This state is indistinguishable from a healthy idle guest. The CPU is not
spinning on a lock, not in a driver, and not executing anything. It is halted
and available, waiting for an interrupt that never arrives.
SysRq confirms the kernel is alive
With
kernel.sysrq=1set:sysrq: Show Blocked Stateto theconsole and then listed no tasks - despite the hung task detector reporting
two blocked tasks moments earlier. This is consistent with the tasks waiting
in
synchronize_rcu_expedited, which is a killable wait not enumerated by theblocked-state dump.
sysrq: Show backtrace of all active CPUsand then produced no backtraces atall, suggesting the NMIs it sends were also not answered.
Both handlers executed, so the guest kernel is running and servicing keyboard
interrupts on at least one CPU.
Host side is healthy
top -H -p <VirtualBoxVM pid>during the hang shows all EMT threads inSstate at ~2% CPU. No thread is in
Dstate. The host is not blocked on I/O andthe VM process is not spinning.
Associated kernel warning
A
WARN_ONin RCU fires on affected guests, and also on some successful boots:The call trace contains no VirtualBox modules. It is an APIC timer interrupt
arriving while a udev-worker is in
__slab_free, and RCU's consistency checkfailing. This is the same warning reported in ticket #22222 (there at
tree_plugin.h:744on a 6.11 kernel - same function, same(udev-worker)process, same
G OEtaint).This warning appears on healthy boots too, so it is not by itself the hang - but
it indicates RCU is repeatedly finding itself in an unexpected state relative to
timer interrupt delivery.
Relevant VBox.log lines
The guest CPUID hypervisor leaf
40000001returns01000089- clocksource,clocksource2,
PV_UNHALTand the stable-TSC bit.KVM_FEATURE_STEAL_TIMEandPV_SCHED_YIELDare not advertised.The APIC is emulated entirely in software with no hardware assist (no posted
interrupts, no virtual APIC registers, no TSC deadline).
Ruled out
Each of the following was tested and does not affect the outcome:
vboxsf)vmwgfxabsent from call traceDstateUseNEMInstead=0systemd-coredumpcappedThe reporter notes the guest previously ran without incident on kernel 5.19.17,
suggesting changes in RCU's expedited grace period usage and/or tick handling
since then have made a pre-existing race reachable.
Workaround
Adding the following to the guest kernel command line eliminates the hang:
rcupdate.rcu_normal=1disables expedited grace periods entirely for the life ofthe boot. The guest confirms this at startup:
With expedited grace periods disabled, RCU waits passively for each CPU to pass
through a quiescent state via the tick rather than demanding acknowledgement by
IPI, so the undelivered IPI no longer blocks anything.
nox2apicforces the guest onto legacy xAPIC. It has not been independentlyverified as necessary - the two parameters were deployed together.
Note that
rcupdate.rcu_normal_after_boot=1alone is not sufficient, becausethe hang occurs during boot when expedited grace periods are still forced on.
NOTE: Prior to this work, it was observed that manually installing kernel 5.19.17-generic on the guest Linux OS worked without issue. No lock ups were observed on the same machines.
Verification
nox2apic rcupdate.rcu_normal=1All labs ran the same guest image and the same VirtualBox version, on the same
host hardware model, during the same assessment sessions.
Suggested area to investigate
The evidence points to expedited RCU grace period IPIs occasionally not being
delivered to, or not waking, a halted vCPU. Given that the target CPU is in
hltwithIFset, candidate areas include:emulation, particularly in x2APIC mode
path (
fUsePeriodicPreemptionTimers=false,cPreemptTimerShift=7)interruptible
The intermittency and the correlation with many VMs starting simultaneously on
separate hosts suggest a timing-sensitive race rather than a systematic error.
Related reports
same function, same
(udev-worker)context, on Debian 6.11.4.stall signature with a climbing jiffies count, across VirtualBox 7.0.x, 7.1
and 7.1.2.
rcu_preemptstalls at booton Debian 13 under VirtualBox 7.2.6.
None of these appear to have established that the reported CPU is idle and
interruptible rather than stuck, which is what distinguishes a lost IPI from a
guest-side deadlock.
Secondary issue
VBoxManage modifyvm <vm> --x2apic offalso disables the local APIC entirely.VBoxManage showvminfosubsequently reports:and the guest fails to boot with 4 vCPUs.
--apic on --x2apic offdoes notrestore the expected combination; APIC remains disabled. Tested on VirtualBox
7.2.14 r174565 on a Linux host. As noted above, this symptom has been observed on earlier versions of VirtualBox, too.
If disabling x2APIC while retaining the local APIC is intended to be supported,
this looks like a separate bug. It also blocks the most obvious host-side test
of the issue described above.
How can we reproduce this?
The bug report includes various details on the nature of the environment. To increase your chances of seeing this bug you would need to set up a lab of many machines. The report was based on a sample of 166 machines. That said, here is more detailed information:
Evidence attachment: VirtualBox Linux guest boot hang
All output below is verbatim as captured. Provenance is stated for each item,
because not every capture came from a guest in the hung state - please read the
"Captured from" line before using any of it.
1. Guest CPU state during the hang (primary evidence)
Captured from: a guest actively hung at boot, ICH9 chipset, guest kernel
6.8.0-139-generic, VirtualBox 7.2.14 r174565, Linux host. Console at the time
was repeating
rcu_preempt detected expedited stalls on CPUs/tasks: { 3-...D }with the jiffies count climbing (781474 jiffies at the last observation, roughly
13 minutes).
What this shows. CPU 3 is the CPU that RCU reports as blocking the expedited
grace period (
{ 3-...D },root: 0x8/). It is in exactly the same state as thethree CPUs RCU is content with:
...b7e78,...bfe78,...c7e78.rbx/r12, consistent with theidle task.
eflags=00000246- bit 9 (IF) set. Interrupts are enabled.The CPU is halted and interruptible, not stuck.
2. Instruction at the stalled RIP
Captured from: the same hung guest, same moment.
A single-byte
ret- the function epilogue reached afterhltreturns in theidle loop. Not a spin loop, not a
pause, not a port access.3. Repeated sampling: no progress over 15 seconds
Captured from: the same hung guest. Five iterations at 3-second intervals.
Iterations 2 through 5 were byte-for-byte identical to the above and are omitted
for brevity. No vCPU made any progress over the sampling period.
4. SysRq results during the hang
Captured from: the same hung guest, with
kernel.sysrq=1set in the image.Scancodes injected from the host via
VBoxManage controlvm ... keyboardputscancode.Both lines below appeared on the guest console.
Show Blocked State printed its header and then listed no tasks, despite the
hung task detector having reported
(sd-mkdcreds):492andkworker/1:0:25asblocked moments earlier. This is consistent with those tasks waiting in
synchronize_rcu_expedited, which is a killable wait and is not enumerated bythe blocked-state dump.
Show backtrace of all active CPUs printed its header and produced no
backtraces at all, suggesting the NMIs it broadcasts were also not answered.
Both handlers ran, so the guest kernel was alive and servicing keyboard
interrupts throughout.
5. RCU warning and call trace
Captured from: a guest that booted successfully, with the workaround
parameters
nox2apic rcupdate.rcu_normal=1already applied, guest kernel6.8.0-139-generic.
This is an important caveat: the warning was captured on a healthy boot with the
workaround in place. It demonstrates that the warning fires independently of the
hang, and persists with the workaround applied. The
Wtaint flag was presenton every hung boot observed, but the trace itself was never captured on a hung
machine because the console had scrolled past it and scrollback was unavailable.
What this shows. An APIC timer interrupt arrives while a
(udev-worker)isin
__slab_free; the tick handler runsrcu_sched_clock_irq, and RCU'sconsistency check fires. The call trace contains no VirtualBox modules -
vboxguest(OE)andvmwgfxare loaded but are not in the code path.A second occurrence of the same warning on a different boot of the same machine
fired at
[ 13.541392]on CPU 1, PID 390.This matches ticket #22222, which reports the same warning in the same function
from the same
(udev-worker)context on a Debian 6.11.4 guest (attree_plugin.h:744- the line number differs only because of the kernelversion).
6. Confirmation the workaround is active
Captured from: a guest booted with
nox2apic rcupdate.rcu_normal=1.No expedited grace period (rcu_normal)confirms expedited grace periods aredisabled for the life of the boot, so the stall path cannot execute. All four
vCPUs remain online. No
Switched to x2APICmessage appears, confirmingnox2apictook effect; on unmodified guests the host log showsAPIC0: Switched mode to x2APIC.7. VM configuration
Captured from: the affected VM, powered off. This is the configuration in
use when the hangs occur (chipset shown here is PIIX3; the hang also reproduces
with
--chipset ich9).The guest disk is immutable, so a fresh differencing image is created on every
start and discarded on shutdown.
8. Host-side APIC and paravirtualisation state
Captured from:
VBox.logof the affected VM. These lines are identical onhung and successful boots.
Guest hypervisor CPUID leaf:
0x01000089= bits 0, 3, 7, 24: clocksource, clocksource2,PV_UNHALT, and thestable-TSC bit.
KVM_FEATURE_STEAL_TIME(bit 5) andPV_SCHED_YIELD(bit 13)are not advertised.
The local APIC is emulated in software with no hardware assist: no posted
interrupts, no virtual APIC register access, no TSC deadline support.
Did you upload all of your necessary log files, screenshots, etc.?