[Windows][Desktop 26.810.4967.0] Opening or switching conversations can trigger a persistent 350-800 MiB/s read loop and system-wide stutter
What version of the Codex App are you using (From “About Codex” dialog)?
26.810.4967.0 (x64 MSIX)
What subscription do you have?
Unknown / not relevant to this local desktop performance issue
What platform is your computer?
Microsoft Windows NT 10.0.26200.0 x64 (Windows 11 Home, 25H2)
What issue are you seeing?
Opening or switching to a local conversation in the Codex Windows desktop app can immediately cause system-wide UI and mouse stutter and start a persistent high-rate read loop in the app's main ChatGPT.exe process.
The first reproduction followed opening a very long local conversation (approximately 25 MiB local session transcript). A later independent reproduction showed the same read-loop signature without a clearly identifiable long-conversation trigger. Long history may increase the likelihood, but it does not appear to be required; conversation navigation or an associated state refresh/hydration path is the broader trigger surface.
Once triggered, the read loop continues after the active task finishes and after switching to a different conversation. Fully quitting and restarting Codex clears it.
Read-only performance samples:
- Normal state immediately after restart (8.12-second sample): main ChatGPT.exe read rate 0.03 MiB/s; CPU 0.22%.
- First triggered state (10.37-second sample): main ChatGPT.exe logical read rate 695.82 MiB/s; CPU 7.51% of total host CPU.
- First triggered physical-disk sample: 356.8 MiB/s average read, 438.3 MiB/s maximum; queue 0.50 average, 0.85 maximum.
- Later reproduction (12.44-second sample): main ChatGPT.exe logical read rate 685.07 MiB/s; CPU 7.98%.
- Later physical-disk sample: 417.47 MiB/s average read, 693.93 MiB/s maximum; queue 0.40 average, 2.00 maximum.
- Immediate 6.01-second whole-system follow-up: the main ChatGPT.exe process read 792.61 MiB/s at 7.93% host CPU. The next-highest process read only 2.71 MiB/s, and the codex.exe backend read 1.26 MiB/s.
- About 16.9-17.3 GB of RAM remained available during the later reproduction.
- DWM, GPU/renderer processes, Defender, indexing, and the codex.exe backend were not saturated.
No transcript content, local path, account data, or logs are attached.
What steps can reproduce the bug?
- Fully quit Codex and start it again.
- Confirm that Codex and the rest of Windows are smooth.
- Open or switch between existing local conversations. A very long conversation triggered the first reproduction, but a later reproduction was not tied to one clearly specific long conversation.
- Observe immediate stutter across the desktop, not only inside Codex.
- Switch to another conversation or wait for the active task to finish.
- Observe that the high-rate read activity and stutter continue.
- Fully quit and restart Codex; the stutter disappears.
- Continue opening or switching conversations; the issue can retrigger, but the exact triggering conversation is not deterministic.
Reproducibility: observed repeatedly. Restarting clears the issue, but avoiding one particular conversation is not a reliable prevention method.
What is the expected behavior?
Opening or switching conversations should use bounded or lazy loading and should not continuously reread local session data or degrade system-wide responsiveness. Navigating away from a conversation or completing its task should cancel or stop associated hydration, replay, or refresh work.
Additional information
Only reliable workaround observed: fully quit and restart Codex. Continuing in a fresh, focused conversation may delay recurrence, but it does not guarantee prevention.
Related issues:
- openai/codex#38506 reports a broader post-update regression with high memory, high disk activity, and system-wide mouse lag. This report may share a root cause, but adds a repeatable main-process logical read loop, ample available memory, and restart/retrigger A/B evidence.
- openai/codex#33230 reports transient freezes when opening history conversations after local history stores become large.
- openai/codex#33074 reports system-wide mouse stutter during startup and task switching without a measured persistent read loop.
- openai/codex#32154 reports persisted-history replay and retained MCP stacks during navigation. In this reproduction, the dominant I/O was in the Windows main ChatGPT.exe process, and the loop persisted after navigation and task completion.
No session ID, thread ID or title, transcript content, local file path, account name or email, project name, screenshot, or log is included. Additional sanitized performance counters can be provided if needed.
6 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Additional Windows desktop data point on the same build.
Environment:
26.810.4967.0x64 MSIX10.0.22631.0x642560x1600 @ 165Hz)Observed behavior:
ChatGPT.exeoff the NVIDIA GPU, but the issue still recurred. During the bad state,nvidia-smidid not listChatGPT.exe; the NVIDIA GPU was idle/low-power.Sanitized 30-second monitor samples after the temporary cache reset:
Process attribution in the bad state:
ChatGPT.exeprocess, with no--type=...argument, consumed most of the CPU: about20.83s,24.30s, and24.88sCPU time per 30-second window in consecutive alert samples.--type=gpu-processand--type=rendererchildren were secondary.Cache/workaround notes:
GPUCache,ShaderCache,Code Cache, Service Worker cache, etc.) restored smoothness temporarily, but the stutter returned after more use.chrome_native_host_cache_reconcile_failed/ native-host retry-loop signature mentioned in #38510, so this looks separate from that issue.Difference from the original report here: I did not capture the 350-700 MiB/s read loop during this run. The dominant signal in this capture was instead a persistent main-process CPU loop combined with DWM/UI composition load. The user-visible symptom, build, long-task/session trigger, and restart workaround match this issue closely.
Update: reproduced on 26.810.6296.0 and isolated to the runtime hashing loop
I can now reproduce the same persistent read loop on Windows desktop 26.810.6296.0 and narrow the I/O source considerably.
ChatGPT.exeprocess (no--type=...argument). Thecodex.exebackend and renderer/GPU children are not the source of the high read rate.codex.exeand%USERPROFILE%\.codex\plugins\.plugin-appserver\codex.exe(about 281.5 MiB each), plus both copies ofcodex-code-mode-host.exe(about 56.6 MiB each). During the same samples I did not observe active reads of session JSONL files, workspace files, or the small Codex SQLite databases.chrome-plugin-app-server-runtimefile-equivalence check hashes each full file usingcreateHash("sha256").update(await fs.promises.readFile(path)).digest("hex"). Thecodex.exepair alone therefore reads about 563 MiB per validation; including the two code-mode-host copies brings the observed minimum to about 676 MiB per pass, before other helpers/resources. This matches the hotspot independently reported in #38547.Controlled reversible A/B tests on the one persistent hot thread in the main process:
This strongly indicates that the main event/hash-control thread is continuously driving the runtime comparison. Restarting the app clears the active loop, but opening/navigating the app can trigger it again. The newer-build symptoms are also consistent with #38713.
Suggested product-side fixes:
No transcript content, account details, local usernames, session/task identifiers, raw logs, screenshots, or machine-specific absolute paths are included in this update.
Additional recurrence: main-process read loop reproduced with zero node_repl workers
Another Windows 11 recurrence on Desktop
26.810.6296.0separates the main-process loop from the retained-worker issue:node_repl.execount was 0 and its config block was not active at the start of the capture.ChatGPT.exesustained 143% of one logical core and 825,102,238 bytes/sec logical read I/O (about 787 MiB/s).chrome,browser, andcomputer-useplugins and fully restarting Codex, the new top-level process measured 0 MiB/s reads and 0% CPU in the same formatted performance counters.This confirms that the main runtime-validation/read loop can independently cause whole-system stutter even when no
node_replworkers are present. The restart clears the active loop; disabling those three plugins is being used as a mitigation while monitoring for recurrence.No session content, account details, usernames, local paths, or raw logs are attached.
https://github.com/openai/codex/issues/38716#issuecomment-5302760473
Additional independent Windows reproduction on the same Codex Desktop build, with a cache-resident variation of the persistent main-process read loop.
Environment / scope:
26.810.4967.0x64 Store build10.0.26200Read-only live capture while the system-wide stutter was active (59.5 s, 120 samples at 0.5 s cadence):
ChatGPT.exeprocess (no--type=...) sustained 1,104.76 MB/s logical reads for the full capture.ChatGPT.exeprocess generated 218,418 page faults/sec, all soft in this process (0 hard faults), about 42% of the machine-wide fault load. The next busiest process was ~727 faults/sec.Useful negatives from the same capture:
codex.exebackend was essentially idle (~0.01% system CPU, ~0.02 MB/s reads).Chrome_WidgetWin_1overlay window did exist, but its GPU/process activity was negligible, so this capture did not support the separate avatar-overlay mechanism as the cause.A/B after fully exiting Codex Desktop:
ChatGPT.exe,codex.exe,codex-code-mode-host.exe, ornode_replprocess remained.This strongly supports the same bug class reported here: the top-level desktop
ChatGPT.exeenters a persistent local-data reread / memory-churn state, while the agent backend, GPU path, physical disk, DPCs and hardware remain quiet. In this reproduction, the reread set appears to have been almost entirely resident in the Windows file cache, which explains the extremely high logical read rate with almost no physical disk activity.I did not capture per-file handle/ETW attribution before exiting, so I am not claiming the exact file source on this machine. The signature is consistent with the plugin-runtime hashing/validation loop isolated in the later update on this issue, but that specific code path remains an inference for this reproduction rather than a direct measurement.