Pewarta Proxy

📋 Server Request & Proxy Logs

Loading active proxy settings...
Developed by Khairul Adha (adhexa.id)
Mengambil log server...

⚙️ Pengaturan Proxy Target

Skip to content

Whole-VM wedge recurred on 2.2.3: blocking open() still on the vCPU thread #2659

Open

Description

@owahltinez

Follow-up to #2593, which was closed as fixed in v2.2.2. Same failure on 2.2.3 — the blocking open() is still on the vCPU thread.

OrbStack 2.2.3 (2020300) c83556b0 / macOS 26.5.2 (25F84) / M4, 16 GiB / guest kernel 7.0.14-orbstack-00380-ga7e0a2dc9535, 10 vCPUs.

Wedged 18:52:29–19:37:11 local on 2026-08-19, ~45 min. docker and orb status hang, vmgr at ~790% CPU, 37 hang samples. Host side, vcpu7, 689 of 689 samples:

689 Thread_4415934: vcpu7
+     ... 9 frames in OrbStack Helper ...
+                       689 open  (in libsystem_kernel.dylib) + 64
+                         689 __open  (in libsystem_kernel.dylib) + 8

Guest side, all 10 stall reports on CPU 7 in one grace period, counters frozen from first to last:

[644184.816960] rcu:  7-...0: (16 ticks this GP) idle=0834/1/0x4000000000000000 softirq=439232/439234 fqs=10032
[644184.817007] rcu:  (detected by 8, t=90007 jiffies, g=1593677, q=55228 ncpus=10)
[646705.470882] rcu:  (detected by 8, t=2610649 jiffies, g=1593677, q=71448 ncpus=10)

The sampler caught the stuck CPU's guest stack this time, which #2593 was missing:

virtio_fs_enqueue_req+2008
virtio_fs_send_req+95
__fuse_simple_request+547
fuse_file_open+279
fuse_do_open+31
fuse_dir_open+75
vfs_open+279
path_openat+1051
__arm64_sys_openat+287

fuse_dir_open, so the host open() is on a directory. My FIFO guess in #2593 was wrong.

Seccomp escalates one stuck CPU into a full spin: container starts JIT a filter, which reaches __text_poke → kick_all_cpus_sync and waits for every CPU to ack. CPU 7 never does, so each start parks another vCPU in smp_call_function_many_cond — ~240 of 334 guest stack dumps sit there. That's the 790% versus ~200% in #2593, and it means the VM degrades progressively under restart policies rather than losing one CPU.

Separately, the disk warning misdiagnoses this. The health check fails 27 times with Post "http://vcontrol/disk/report_stats": context deadline exceeded, and OrbStack put up a dialog asking whether my disk was full. It wasn't — 45 GiB free on the host volume, 41 GiB on the OrbStack volume. That timeout is a symptom of the wedged vCPU, so the dialog sends you looking at storage. I dismissed it and the VM recovered within seconds; previous incidents stayed wedged for hours untouched, so that path may be worth checking.

Trigger unchanged: a throwaway container joined the bridge at 18:51:09 and was destroyed moments later, first stall detection 80 s after. Checked after recovery — no nested mounts under the shared trees, no dataless directories, no leftover FIFOs or sockets, no symlink into the OrbStack NFS mount at ~/OrbStack.

Redacted orb report: https://gist.githubusercontent.com/owahltinez/e4fd6f49b65afc75f1b907d2646f78c6/raw/orbstack-diagreport-redacted.zip. Dropped netstat_rn.txt and scutil_dns.txt, replaced my username and container names, collapsed pre-hang krpc: dref failed paths. Kernel logs, stalls, both sample captures and the .orbprof files unmodified.

Activity

  1. danrush777 commented on Sep 1, 2026

    @danrush777

    Can confirm this on a second, independent setup — five freezes in six days, same signature.

    Setup: Mac mini, macOS 26.6.2, OrbStack 2.2.3, guest kernel 7.0.14-orbstack-00380, 5 containers, heavy bind-mount usage.

    Signature (sampled during a freeze): One vCPU host thread stuck in open() (662/662 samples) while the others idle or spin. Guest NMI backtrace on the corresponding CPU shows find in fuse_dir_open → virtio_fs_send_req on /mnt/mac paths. Every subsequent docker exec then piles up in do_seccomp → bpf_int_jit_compile → __text_poke → kick_all_cpus_sync → smp_call_function_many_cond, so 6-7 of 8 vCPUs end up spinning (~580-690% CPU on the OrbStack Helper). docker ps and orbctl status block indefinitely.

    Incidents: Aug 26 (17 h), Aug 30 (5 h), Aug 31 03:00 (3.5 h), Aug 31 15:14 (50 min, self-resolved — matches the ~45 min self-recovery reported above), Sep 1 03:01 (5+ h). Frequency increased over the week. All but the self-resolving one required orbctl stop/start.

    Triggers observed (not deterministic): a 341 MB database export written through a bind mount, and recursive find runs over large mounted trees (incl. node_modules). The same operations complete fine on other days, so it looks like a race rather than a deterministic bug — consistent with #2471/#2593 resurfacing.

    Since the reporter is on macOS 26.5.2 and we are on 26.6.2, this does not look like a macOS-version regression.

    Happy to provide vmgr logs, spindumps, or run a debug build if that helps.

  2. nick-inkeep commented on Oct 4, 2026

    @nick-inkeep

    Same wedge on macOS 27.0 (26A428), Apple M5 Max, OrbStack 2.2.3 (2020300, c83556b0), kernel 7.0.14-orbstack-00380-ga7e0a2dc9535, an 18-vCPU / 16 GiB VM, Docker 29.4.0.

    It began after about 5h20m of VM uptime and lasted two hours, until a restart:

    • RCU stall warnings repeated every ~280 s, all 28 on grace period g=622501.
    • Every vCPU sampling wave captured 17 of the 18 CPUs and never CPU 13.

    A host sample at the end shows vcpu13 in open() for all 164 samples:

    164 Thread_27690345: vcpu13
    open  (in libsystem_kernel.dylib) + 64
    __open  (in libsystem_kernel.dylib) + 8
    

    The seccomp JIT path described above was stuck too. In addition, BPF program freeing was stuck in the same cross-CPU sync on another CPU, in all 28 waves:

    kick_all_cpus_sync+71
    __text_poke+251
    aarch64_insn_set+75
    bpf_arch_text_invalidate+31
    bpf_prog_pack_free+131
    bpf_jit_free+59
    bpf_prog_free_deferred+171
    

    orbctl stop forced the VM down after its graceful-stop timeout, and a fresh start recovered. The path passed to open() wasn't captured, and I don't have a deterministic repro.

  3. nick-inkeep commented on Oct 6, 2026

    @nick-inkeep

    A likely trigger for this wedge, and a workaround that has held for 24 h so far (OrbStack 2.2.3, macOS 27.0).

    Three of four wedges here on Oct 4–5 began within minutes of a container bind-mounting a path on an external APFS volume (USB4 SSD under /Volumes). In the clearest one, docker events shows a container created with such a bind, then an exec running chown -R over it. The first RCU stall followed about 70 s later, the exec never returned, and the screen was locked at the time.

    Inferred, not proven: an open() of a removable-volume path waits on a macOS privacy (TCC) decision that never arrives, so the vCPU thread blocks there (vcpu13 in open() above). On the same Mac, a launchd-started process reading that volume also blocks in __open (908/908 samples).

    After granting OrbStack Full Disk Access and restarting it, the same pattern completes in about a second: bind-mount a 300-file folder from that volume, then cat, chown -R and touch over it. The VM has since run 24 h with no RCU stall. Bind mounts of that volume were otherwise avoided during those 24 h, so treat Full Disk Access as a workaround, not a confirmed fix.

  4. dwaipayanbanerjee commented on Oct 10, 2026

    @dwaipayanbanerjee

    Independent reproduction and request for a supported fix/debug build on OrbStack 2.2.3 (2020300, c83556b0), guest 7.0.14-orbstack-00380-ga7e0a2dc9535, Docker 29.4.0, macOS 27.0.1, arm64, 8 vCPUs.

    Historical VM-wide stalls show one missing guest CPU while other CPUs wait in __text_poke -> kick_all_cpus_sync -> smp_call_function_many_cond. A host sample puts the corresponding vCPU in getattrlistbulk; a later guest stack is virtio_fs_enqueue_req -> virtio_fs_send_req -> __fuse_simple_request -> fuse_readdir -> getdents64. Older task backtraces identify NZBGet on this directory-read path across different CPUs.

    A bounded privileged replay on the same helper identified an external APFS directory with 5,617 entries. The scan took 7.83 seconds and issued 80 successive getattrlistbulk calls totaling 7.62 seconds. These generated 1,586 small APFS metadata reads totaling 7.56 seconds. No individual metadata read exceeded 36 ms; the longest bulk call was 0.79 seconds. Kernel samples show APFS B-tree/object reads and buf_biowait on the vCPU host thread. Identical sampled stacks therefore do not establish one continuously blocked syscall.

    An ordinary concurrent container exec took 7.18 seconds versus a 0.041-second baseline, while all 30 Docker pings succeeded below 3 ms. The short replay lacks guest kernel stacks and did not reproduce the historical minutes-long outage. Moving active metadata to Linux volumes avoids the workload but leaves the underlying execution behavior unchanged.

    Disk sleep was already disabled, Full Disk Access was granted before the incidents, and examined device counters showed no transport timeout/reset/retry evidence. We have no basis for changing those settings or disabling seccomp.

    Is there a supported release/debug build that moves slow host filesystem work off vCPU execution, or another supported correction for this failure class? For the minutes-long case, what targeted capture would distinguish a single blocked syscall from uninterrupted processing of successive directory calls? We can test a candidate against the same workload and verify guest CPU progress and concurrent task start while retaining normal security settings.

    No raw diagnostics are attached; they contain private paths and would require separate review before sharing.

  5. jameslai-sparkofy commented on Oct 14, 2026

    @jameslai-sparkofy

    Another reproduction on 2.2.3, plus a TCC data point that matches the Full Disk Access workaround above.

    Setup: Mac mini M4 Pro, 64 GiB, macOS 26.6.2, OrbStack 2.2.3, guest kernel 7.0.14-orbstack-00380-ga7e0a2dc9535, Docker 29.4.0, 12 vCPU / 32 GiB VM, ~160 containers. The OrbStack data image (data_dir) and the bind mounts of 45 containers live on an external APFS SSD under /Volumes.

    Wedges: 2026-10-07 (twice, on 2.1.3, the do_seccomp → bpf_int_jit_compile → __text_poke → kick_all_cpus_sync stack from #2471), then on 2.2.3 on 2026-10-12 ~04:00 and 2026-10-13 00:32 UTC (~12–18 min, sampling stacks due to VM hang). Host-side vmgr sample during the 10-13 wedge: 8 of 12 vCPU threads were in open (libsystem_kernel open+64 → __open+8, every sample). During the manual stop/start right after, the helper also sat ~10 min in open() of data.img.raw on the same external volume.

    TCC state at the time: kTCCServiceSystemPolicyRemovableVolumes = allowed for dev.kdrag0n.MacVirt, but kTCCServiceSystemPolicyAllFiles (Full Disk Access) = denied (auth_value 0). That fits the theory that an open() on a removable-volume path is waiting on a TCC decision on the vCPU thread. We are about to grant Full Disk Access and restart; I'll report back if it recurs.

    +1 to moving blocking host filesystem calls off the vCPU thread. A single slow open() should not be able to wedge the whole VM through the seccomp IPI.

  6. TyceHerrman commented on Oct 30, 2026

    @TyceHerrman

    Potentially related: #2659 describes whole-VM hangs with host filesystem operations blocking vCPU threads.

    The symptoms are different but cross-linking in case the connection is useful for investigation

  7. TyceHerrman commented on Oct 30, 2026

    @TyceHerrman

    Potentially related incident on OrbStack 2.2.5, macOS 27.2.

    The VM became unresponsive during a NixOS development workload. A guest command timed out after 480 seconds, independent machine-info/status requests hung, and the existing SSH listener accepted a connection but sent no greeting. The helper remained alive.

    Preserved logs show:

    • RCU CPU stalls and rcu_sched starvation.
    • Timer-wakeup failures and repeated warnings at hrtimer_forward.
    • Repeated sampling stacks due to VM hang messages.
    • scon interrupted in bridge multicast timer processing, with another CPU waiting in hvf_qlock_wait → __pv_queued_spin_lock_slowpath → br_multicast_port_group_expired.
    • Cross-CPU waits under khugepaged → tlb_remove_table_sync_one → smp_call_function_many_cond.
      may not have been same cause as this issue. the host sample doesn't show a vCPU blocked in open() or getattrlistbulk, and the captured guest stacks don’t show the seccomp/BPF JIT path described here. The host sample is sparse though.

    I preserved the VM logs and existing Helper sample. and could send the raw diagnostics in private channel after redacting private paths and identifiers

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions