9950X3D / 7950X3D 9900X3D / 7900X3D 7800X3D / 9800X3D NVIDIA RTX VR & Flatscreen Windows 11

Stutter-free iRacing
on Ryzen X3D

Six steps. About 30 minutes plus a reboot. Every fix was measured on a real rig, and every one is reversible.

Pick your chip and how you race — the page adjusts to show exactly what applies to you.
Same layout, so pick the button shown: 5800X3D · 5700X3D · 7700X3D · 9850X3D → 9800X3D / 7800X3D · 5500X3D · 7500X3D → 7600X3D / 5600X3D · 7945HX3D · 9955HX3D (laptop) → 9950X3D / 7950X3D.
Start the steps ↓ ⬇ Download the kit
Bonus: iRacing Tuner Mini — if you just want the baseline fixes and not the full troubleshooting flow, use output/Small-Tuning-Menu.ps1 or output/Start-Small-Tuning-Menu.bat. It keeps the initial CPU check, then offers Optimize My PC, the before/after race routine, Defender Exclusions, and Guide Extras.

Curious how it works? The idea · Deep detail? Reference · Problems? Troubleshooting

Your progress
0/0
30 seconds of background

The idea

Your 9950X3D2 has V-Cache on both dies, so there's no “good” and “bad” half — the cores are equivalent. Pinning still helps, but for a different reason: keeping the sim on one die avoids the latency cost of reaching across to the other die's cache. Everything below applies; just read “V-Cache die” as “the die you picked”.

Your CPU has two halves: a V-Cache die (games love it) and a frequency die. Stutters happen when Windows lets background work — GPU interrupts, antivirus scans, update tasks — fight the sim for the V-Cache die. The fix: put the sim there, move everything else off, and stop Windows from interrupting. That's all six steps do.

Your whole CPU is one V-Cache die — nothing to pin, which makes this simpler for you. Your stutters come from Windows letting background work — GPU interrupts, antivirus scans, update tasks, a Windows 11 timer quirk — pile onto the cores the sim is using. The fix: stop Windows from interrupting. The steps below skip the core-pinning parts automatically for your chip.

The full story — the dies, and four rules this guide lives by
CPUV-Cache die (sim goes here)Frequency die (everything else)
9950X3D / 7950X3Dlogical cores 0–15logical cores 16–31
9900X3D / 7900X3Dlogical cores 0–11logical cores 12–23
9950X3D2 (both dies cached)logical cores 0–15logical cores 16–31 — also cached

Your chip is a single die — every core shares the V-Cache, so Rules 1 and 2 below don't apply to you (nothing to pin, no die to keep clear). Rules 3 and 4, and every automatic fix, still do.

Rule 1 — EasyAntiCheat blocks hard CPU affinity. Pinning iRacing the forceful way gets reverted seconds after launch. We use CPU Sets (a scheduler hint EAC can't block). The affinity mask still reading 0xFFFFFFFF afterward is normal, not a failure.

Rule 2 — All cores unparked, NOT the Balanced plan. Single-CCD guides recommend Balanced; on a dual-CCD chip with VR, Balanced's core parking strands the VR compositor on a parked die and starves the GPU (measured: ~55% GPU util → 11%, unplayable). Single-CCD chips are the opposite — keep Balanced.

Rule 3 — The Windows 11 focus/timer trap. Windows only honors a game's 1 ms timer while it owns window focus — and the VR compositor steals focus constantly, dropping the timer to 15.6 ms mid-race. Signature: stutters that stop the moment you click the sim window. Step 3 fixes it permanently.

Rule 4 — Measure, don't guess. Change one thing, log a race, compare. The kit's tools do the logging for you.

Adapted for dual-CCD from the single-CCD guide by rcsracing93 — see what flips and why.

Do it

The six steps

In order. Boxes remember themselves, so you can leave and come back — there's a reboot in the middle anyway.

Step 1 · 2 min
Download the kit & unzip it somewhere permanent

Download the .zip and unzip to a folder you'll keep — e.g. C:\iRacingTuning\. Not Downloads, not the desktop clutter — things reference this folder later.

Step 2 · 10 min
Step 2 · 2 min
Process Lasso — the only app setup
Power plan — nothing to install

One free app does the two fixes no script can: Process Lasso (the free version does everything needed).

  • Install it from bitsum.com.
  • Power plan: Main menu → Power → activate Bitsum Highest Performance. (Keeps every core awake.)
  • Launch iRacing and enter any race (a test or AI session is fine) so iRacingSim64DX11.exe shows up in Process Lasso's list. Then you can exit.
  • Pin the sim: right-click iRacingSim64DX11.exeCPU Sets (⚠ not CPU Affinity) → Always → tick cores 0–15.
    Don't skip “Always” — it's the submenu that makes the setting persist. Without it the pin is lost the moment you close the sim, and you'd never be told. Shortcut: the dialog has a Cache button that ticks the V-Cache cores for you. On this chip both dies are cache, so the Cache button selects all 32 — tick 0–15 by hand.
  • Protect it: right-click it again → ProBalance → exclude.
Why CPU Sets and not Affinity? And what about my wheel/overlay apps?

EasyAntiCheat rejects hard affinity — the sim reverts to all cores seconds after launch. CPU Sets are a scheduler hint EAC can't block, and they work just as well.

Optional extras in Process Lasso: put background apps (VR runtime, SimHub, overlays, wheel software, browsers) on the frequency die (cores 16–31), and give iRacing High CPU/I/O/memory priority. Nice-to-haves, not required.

If you use ParkControl (same developer): set Parking = Off and untick “Dynamic Boost” — it flips the power plan mid-race and caused our worst hard freezes.

Your chip has one die, so every core already has the V-Cache — there's nothing to pin and no app to install. This step is basically "leave your power plan alone."
  • Keep your normal Balanced power plan. Single-CCD X3D runs best on it (it keeps AMD's V-Cache core preference working). Do not force an all-cores-unparked plan — that's a dual-CCD-only fix and does nothing good here.
  • That's it. Skip straight to Step 3.
Optional: Process Lasso for ProBalance (not required)

If you already run Process Lasso, one nice-to-have: right-click iRacingSim64DX11.exeProBalance → exclude, so it's never throttled. No CPU Sets, no power-plan change. If you don't have it, don't bother installing it just for this.

Step 3 · 3 min
Run the optimizer — one double-click

In the kit folder, double-click Apply-Baseline.bat. It confirms your CPU, shows a short advisory, then applies every script fix that suits your chip in one window with one admin prompt. Nothing to type.

⚡ Apply-Baseline.bat

The fast path — everything in one go.

🖱️ Start-Tuning-Menu.bat

Prefer one step at a time, with each explained? The guided menu does the same fixes plus troubleshooting tools and undos.

What the five fixes actually change
  1. Defender exclusions — stops Windows Defender scanning every iRacing texture read mid-race (a constant micro-stutter source). Defender stays fully active everywhere else.
  2. USB Selective Suspend + Game Bar off — stops wheel/VR USB power-cycling and removes Game Bar/DVR hooks.
  3. Diagnostic log on — enables the Task Scheduler log so the troubleshooting tools can name culprits later. Changes nothing else.
  4. Timer fix — registry key so Windows honors the 1 ms timer even when the sim loses window focus. Kills the “stutters until I click” problem (Rule 3).
  5. GPU interrupts off the sim's core — NVIDIA's interrupts default to CPU 0, exactly where the sim's main thread runs. This steers them to core 16, well clear of CPU 0. (That core is on the frequency die.)(Picked automatically for your chip — a valid core, never one that doesn't exist.)

Every fix has an undo: Start-Tuning-Menu.bat → Advanced. Registry, power, and Defender changes only — no drivers, no overclocking.

Rather run the scripts by hand?

Each fix is a readable .ps1 in scripts\ (browse them, and see scripts\README.txt). Run one with:

powershell -ExecutionPolicy Bypass -File "path\to\script.ps1"

Setting-changers need an elevated PowerShell (Start → type PowerShell → right-click → Run as administrator). Or run Create-Launchers.ps1 once to get double-click shortcuts that self-elevate. Core numbers are detected automatically from your CPU and checked against the processors Windows reports — there is nothing to edit, however you run the scripts.

Step 4 · 1 reboot
Reboot

The GPU-interrupt and timer fixes only take effect after a restart. Do it now — the boxes will still be ticked when you're back.

Step 5 · one race
Prove it worked
  • Quick check: Start-Tuning-Menu.bat → Troubleshoot → Preflight-Check. Green READY = every fix is live.
  • Real proof: run FullTrace (menu → Troubleshoot, or press T at the end of Apply-Baseline). Race ~10 minutes, press Ctrl+C, open the CSV from your Desktop.
  • Who’s faulting: the Hard faults (Admin) button beside Run does the same trace with a kernel fault capture attached, so the CSV names the process and file behind every fault. Needs the Windows Performance Toolkit installed.

What good looks like: tot_dpc and tot_int in the low single digits, gpu_util steady with no collapses, and your power plan unchanged from the first row to the last. The live console keeps every line grey when all of that holds.

hardfaults_s is not the sim. That column counts hard page faults for the whole machine, and a big number there is the single most misleading thing in this CSV. A kernel trace of a real 25-minute session recorded 4,712 hard faults: 1,729 were NTFS metadata, 829 were the Microsoft Store updating apps, 251 Edge Update, 245 Windows Search, 201 the touch keyboard — and 14 were iRacing. Not one texture, not one .dat. So a spike means Windows is busy, not that your storage is too slow; chasing it as sim I/O costs days and fixes nothing. To find out who is really faulting, use Hard faults (Admin) and read the new sim_hardfaults_s, top_fault_proc and top_fault_file columns.
About skipped seconds. Earlier versions of this guide said any gap in the timestamp column — a jump like 12:04:40 → 12:04:42 — was a system-wide stall. Measurement showed that is too strong: the tracer’s own sampling can occasionally overrun its one-second budget on a perfectly healthy machine, and v3.2.0 makes that much rarer. Treat a gap as a lead, not a verdict. It’s a real stall when the rows either side of it back it up — raised tot_dpc/tot_int, a hardfaults_s spike, or gpu_util falling off a cliff. A bare 2-second gap with clean counters on both sides is the logger, not your PC.
Reading the rest of the CSV (for the curious)
  • power_plan — should stay on your unparked plan the whole session (a mid-race flip = ParkControl Dynamic Boost, see Step 2).
  • ccd0_cpu vs ccd1_cpu — CCD0 busier = the sim is on the V-Cache die where it belongs.
  • cpu0_int low, freqcore_int higher — GPU interrupts moved off the sim's core.
  • gpu_util — steady, no collapses to single digits.
  • hardfaults_ssystem-wide, not the sim (see the callout above). Bursts during loading are normal. The console goes amber on a single spike over 500/sec and red only after three consecutive seconds above it — a lone spike is ordinary file I/O and never deserved an alert.
  • sim_hardfaults_s, top_fault_proc, top_fault_file — only present after a Hard faults (Admin) run. The first is iRacing's own faults for that second; the other two name whoever faulted most and what they read. This is the column to trust, and it is usually a lot smaller than hardfaults_s beside it.
  • tot_dpc / tot_int — whole-system DPC and interrupt time. Low single digits is healthy; this is what corroborates a suspected stall.
  • gpu_volt_mv — GPU core voltage in millivolts. The number you actually want when testing an undervolt — clocks alone can’t tell you whether a curve is doing anything.
  • gpu_power_w with gpu_gclk — read them together. More MHz at the same watts is what a good undervolt buys you.
  • volt_limit / power_limit / temp_limit — which limiter is holding the card back, shown live as VOLT/PWR/TEMP. Power or temperature limited turns the line yellow.
  • fan_pct / fan_rpm — a lazy fan curve shows up here first, as a slow temperature climb and a sagging clock.
  • pcie_bus_pct — PCIe bus load. Sustained near 100% alongside low vram_used_mb means assets are streaming over the bus instead of sitting in VRAM.
  • Voltage, fan RPM, memory temperature, framerate and the limiter flags come from MSI Afterburner’s shared memory — start Afterburner first or they stay blank.
Step 6 · when you're smooth
The graphics pass — last on purpose

Do this only after Step 5 looks clean — that way, if a new stutter appears, you know exactly what caused it.

iRacing settings (edit with the sim fully closed)

iRacing rewrites these files on exit, so close the sim first. Files are in Documents\iRacing.

🥽 Your renderer file depends on your headset runtime: rendererDX11OpenXR.ini for most modern headsets, rendererDX11Oculus.ini for the Oculus/Meta runtime, rendererDX11OpenVR.ini for SteamVR. Not sure? Sort the folder by date modified after a VR session — the one iRacing just touched is yours.

FileSetWhy
rendererDX11.inirendererDX11OpenXR.ini (or your runtime's — see above)LoadTexturesWhenDriving=0Preload textures instead of streaming off disk mid-lap ⚠ breaks Trading Paints — see the note below
rendererDX11.inirendererDX11OpenXR.ini (same file)CacheSwap3HighResCars=0No mid-race texture swapping ⚠ same
rendererDX11.inirendererDX11OpenXR.ini (same file)CrowdDetail=0Fewer draw calls, near-zero visual impact. Lives in the renderer ini (also exposed under Graphics options in-sim)
app.inispoolingEnabled=0Stops continuous replay-to-disk writes

⚠ Use Trading Paints? Read this before setting those first two.

Trading Paints doesn't pre-load anything. It fetches each opponent's livery while you're in the session and asks iRacing to reload that car's texture. Those two settings tell iRacing not to load textures while you're driving — so any paint that arrives after you roll out never gets applied, and that car stays white for the whole session.

You get to pick one:

  • Custom liveries matter more — set LoadTexturesWhenDriving=1 and CacheSwap3HighResCars=1. You give back a little of the mid-lap streaming benefit. Everything else in this guide still applies, and it's a small part of the total gain.
  • Smoothness matters more — leave them at 0 and accept white cars, or race with Trading Paints Downloader closed so you're not waiting on downloads at all.

Trading Paints documents this themselves: if cars stay white and never reload, LoadTexturesWhenDriving is the setting they tell you to change. It's a real trade-off, not a bug in either tool.

NVIDIA Control Panel (per-app: iRacingSim64DX11.exe)
SettingValue
Low Latency ModeOn — not Ultra (Ultra caused present-queue stalls)
Power ManagementPrefer Maximum Performance
Vertical SyncOff
Threaded OptimizationOn
Shader Cache SizeUnlimited
Anisotropic FilteringYour call. 16x is reported to cause issues, so the safe default is Application-controlled — but on my rig forcing 16x gives a noticeably sharper image in VR. Look at the graffiti on the tarmac at the Nürburgring: once with application-controlled, once with 16x forced. Try both and keep what looks better to you.

Also disable the GeForce/NVIDIA App in-game overlay — DirectX hooks and DPC load for no benefit. Same goes for RTSS / MSI Afterburner: notorious stutter sources, close them unless you truly need them.

VR: clarity without hiccups
  • Supersampling beats MSAA. MSAA only smooths polygon edges; resolution anti-aliases everything (fences, distant lines, shimmer). Keep MSAA at 4x (8x often crashes iRacing in VR) and spend GPU headroom on resolution.
  • Set resolution in ONE place — the headset runtime's panel or the sim, never both (they multiply).
  • Quad-views / foveated rendering (e.g. Pimax Advanced Quad-View) is a big free win — sharp center, cheap periphery. The runtime's panel is authoritative; tune center resolution for crispness, peripheral for savings.
  • Sharpening amplifies shimmer — turn it down and let resolution do the work.
  • Keep ~15% GPU headroom (peaks under ~85%). A missed VR frame means reprojection judder, which looks worse than slightly lower settings.
Every race from now on: the menu's Each-Race routine quiets Windows Update/Search (and optionally Defender) before you drive and restores everything after. Optional, but it removes the last periodic stall source. (Pre-Race-Quiet / Post-Race-Restore — don't skip the restore.) v3.3.0 disables 39 scheduled tasks and 11 services. A reader's trace first caught nine extra tasks firing mid-session, including two that run usoclient.exe; an xperf HARD_FAULTS trace then found the Microsoft Store's app auto-update was the largest single non-kernel source of hard faults in a real session. Run Check-Quiet-Status after quieting — it now fails a machine unless every task is off, and names any that aren't.
If it's still not perfect

Troubleshooting — name the culprit, don't guess

Match your symptom. Every tool below is in Start-Tuning-Menu.bat → Troubleshoot.

Stutters that stop when I click the sim window

The focus/timer trap. Run Watch-TimerResolution: if the timer jumps from ~1 ms to ~15.6 ms when the sim loses focus, the timer fix isn't active — re-run it from the menu (Advanced) and reboot.

A stutter every few minutes, like clockwork

Scheduled-task cadence (Windows Update scans fire every ~5–7 min). Run FullTrace during a race, then Scan-Stutter-Events — it finds each candidate in your trace and lists which task fired at that moment. The Each-Race routine silences the usual offenders.

Check the candidates before chasing them. A gap with a hardfaults_s spike or raised tot_dpc beside it is worth pursuing; one with clean counters either side and no scheduled task nearby is most likely the tracer’s own sampling, not a stutter. Repeated pagefault spikes under green flag, with free RAM steady, point at something touching disk mid-race rather than at memory pressure.

Lots of plain white cars since I followed this guide

Step 6 is the cause, specifically LoadTexturesWhenDriving=0 and CacheSwap3HighResCars=0.

Trading Paints downloads each opponent's livery during the session and asks iRacing to reload that car. Those settings stop iRacing loading textures while you drive, so anything that arrives late stays white — which is why you see more white cars rather than all of them. Paints that landed before the session finished loading are fine.

Fix: close the sim completely, then in Documents\iRacing set both back to 1:

LoadTexturesWhenDriving=1
CacheSwap3HighResCars=1

🥽 In VR that's your runtime's renderer file — rendererDX11OpenXR.ini, rendererDX11Oculus.ini or rendererDX11OpenVR.ini. Sort by date modified after a session; the one iRacing just touched is yours.

The file is rendererDX11.ini.

iRacing rewrites these on exit, so it must be closed while you edit.

Nothing in the script kit affects Trading Paints — the pre-race quieting doesn't touch it, and Defender exclusions only ever add permissions. If white cars persist with both settings at 1, it's a Trading Paints issue rather than anything here: check the Downloader is actually running, and that your firewall and antivirus allow it.

Windows Update turns itself back on mid-race

You ran the Each-Race routine, and part way through a session the update services come back — usually about ten minutes in, with a stutter as they do. Stopping a service isn't enough on its own: Windows Update Medic exists specifically to detect a tampered update stack and repair it.

Find out what did it. From an elevated PowerShell:

scripts\Trace-QuietReverts.ps1

It reads the Windows event logs that record a service being re-enabled — including Service Control Manager event 7040, the definitive record — and lays them out as a timeline. Run it elevated or the Medic tasks are invisible and will look absent when they aren't.

Two possible answers:

  • Windows Update Medic, protected. On some builds its registry key is owned by TrustedInstaller and refuses to be disabled even as SYSTEM. Since v3.3.0 the fix is built in: Pre-Race-Quiet takes ownership of that one key, disables the service, and hands ownership straight back in the same run. The original permissions are saved before anything changes, and Post-Race-Restore verifies they came back. Pass -NoUnlock to skip it.
  • Group Policy or an MDM/Intune profile. Common on a work or managed machine. Nothing here will help; those settings get re-applied regardless. Check with gpresult /h gp.html.
Random hitches, no pattern

Usually a driver's DPC latency. Run LatencyMon (free) while racing — it names the driver behind the spike. nvlddmkm.sys on CPU 0 means the GPU-interrupt fix reverted (an MSI-mode quirk) — re-run it from the menu and reboot. Also close RTSS/Afterburner while diagnosing.

Still stuck? Set-NIC-USB-IRQ-Affinity (menu → Advanced) steers network + USB interrupts off CPU 0 too — the same trick as the GPU fix, worth trying when something remains.

FullTrace's per-core columns are empty

Your Windows performance counters are corrupt (surprisingly common). Menu → Advanced → Repair-PerfCounters, reboot, re-trace.

Something feels wrong — undo everything

Menu → Advanced has an undo for every fix (GPU IRQ, NIC/USB, timer, guide extras). Power plan and Process Lasso changes are reverted in their own apps. Post-Race-Restore turns Update/Search/Defender back on. Reboot after undoing IRQ or timer changes.

For the tech-minded

Reference

Every script in the kit — what it touches

Diagnostics (read-only): FullTrace (1 Hz CSV, 39 columns: per-CCD load, CPU0 vs frequency-core interrupt/DPC, GPU util/power/clocks/throttle plus core voltage, fan, VRAM, PCIe load, P-state and the active limiter flags, sim & VR CPU, pagefaults, free RAM, power plan — colour-coded live, and timestamp gaps flagged for corroboration rather than taken as proof of a stall). Afterburner-sourced sensors need MSI Afterburner running; anything unavailable stays blank. Then Preflight-Check, Scan-Stutter-Events, Watch-TimerResolution.

Fixes (each reversible): Enable-GlobalTimerResolution (GlobalTimerResolutionRequests=1 under HKLM\...\Session Manager\kernel), Set-GPU-IRQ-Affinity (DevicePolicy=4 + AssignmentSetOverride on the display adapter — NVIDIA, AMD or Intel), Set-NIC-USB-IRQ-Affinity (same, PCI NICs + USB hosts, spread over cores 17–19), Add-Defender-Exclusions, Apply-Guide-Extras (USB suspend, Game Bar/DVR), Pre-Race-Quiet / Post-Race-Restore (Update/Search tasks + services, optional Defender realtime — needs Tamper Protection off), Repair-PerfCounters (lodctr /R both arches + WMIADAP), Enable-DiagnosticLogs.

HAGS (Hardware-Accelerated GPU Scheduling) is deliberately not scripted — it's a genuine toss-up on newer cards. Test both ways.

Full inventory with admin flags: scripts\README.txt · browse the source.

Why this differs from single-CCD X3D guides

Adapted from rcsracing93's excellent single-CCD guide. Most of it transfers; two things flip on dual-CCD:

  1. Power plan. Single-CCD: Balanced (keeps V-Cache firmware prioritization active). Dual-CCD + VR: Balanced's core parking starves the compositor — use all-cores-unparked instead.
  2. CCD pinning matters. Single-CCD has nothing to pin — every core has V-Cache. On dual-CCD, getting the sim onto the cache die and everything else off it is half the battle.

This guide supports single-CCD chips too — pick 7800X3D / 9800X3D at the top and it hides the pinning steps, keeps you on Balanced, and still applies the timer, GPU-interrupt, Defender and background fixes.

Glossary
  • CCD — one of the CPU's two core clusters; one has stacked V-Cache, the other clocks higher.
  • CPU Set — a soft “please run here” scheduler hint. Used because EAC blocks hard affinity.
  • DPC / interrupt — kernel-level work the CPU does for hardware. Piled onto the sim's core, it becomes micro-stutter.
  • Timer resolution — how finely Windows slices time. Games want ~1 ms; Windows 11 falls back to 15.6 ms when the game loses focus.
  • Hard pagefault — the PC stopping to read from disk. Fine while loading, not while racing.
  • HAGS — Hardware-Accelerated GPU Scheduling. Toss-up; test both ways.