00Start Here — Diagnostic Decision TreeFIRST STEP
Before changing any settings, capture your frame times with CapFrameX and identify which type of stutter you have. The fixes are different and applying the wrong one wastes time.
Do you have stutters in iRacing?
→Yes, it feels like a brief freeze or hitch → Install CapFrameX and capture a session first (Section 01)
→Not sure if it's a stutter or normal corner-specific slowdown → Check if it happens at the same corner every lap. If yes, capture it. If random, go to Section 01.
In your CapFrameX capture, look at the spike frame. What do you see?
→Frame BEFORE the spike has GPU active time 20ms+, spike frame CPU is low (~3ms) → Type A — GPU scene complexity. Go to Section 02.
→Spike frame CPU is 15–30ms, GPU is fine (~3–4ms), no preceding frame anomaly → Type B — CPU sim thread preemption. Go to Sections 03, 04, 05.
→Both CPU and GPU are fine on the spike frame (~3–5ms each), no preceding anomaly → Present queue stall — likely NVIDIA DPC or overlay interference. Go to Sections 03D and 05.
→Hard pagefaults over 10,000 in LatencyMon → Background services running. Go to Section 04.
LatencyMon — where are your interrupts going?
→CPU 0 DPC total is over 15s per 5 minutes, all other CPUs near zero → NVIDIA interrupt affinity problem. Go to Section 05.
→Top pagefaulting process is tiworker.exe or wuauserv → Windows Update running during session. Go to Section 04.
→Top pagefaulting process is rtss.exe or capframex.exe → RivaTuner Statistics Server interference. Go to Section 03D.
→Top pagefaulting process is msmpeng.exe → Windows Defender scanning iRacing. Go to Section 04.
ℹMost systems have multiple problems simultaneously. Fix them in order: graphics settings first (quickest), then services, then NVIDIA interrupt affinity (most complex). The interrupt affinity fix alone won't help if you're also running Windows Update mid-session.
01Setting Up Your Diagnostic ToolsDIAGNOSIS
CapFrameX — Frame Time Capture
Download free from capframex.com. This captures precise frame times for every frame and lets you identify spike patterns in the data.
Configure capture settings — in CapFrameX settings, set capture duration to 300 seconds (5 minutes). This gives enough data to catch intermittent spikes.
Disable the RTSS overlay — in CapFrameX → Options → Overlay, uncheck "Show overlay." RivaTuner Statistics Server (which powers the overlay) adds 50,000+ hard pagefaults per session and can cause its own stutters. The JSON capture works fine without the overlay.
Uninstall RTSS and MSI Afterburner if present — even with the overlay disabled, RTSS hooks into DirectX and causes background interference. Settings → Apps → uninstall both. CapFrameX capture works without them.
In iRacing, complete at least one full lap before starting capture — the first 30–60 seconds of a session include initialization noise. Start your capture after the first corner sequence to get clean data.
After the session, open the JSON capture in CapFrameX to view frame times. Look for frames over 12ms (at a 164fps cap, target is 6.1ms — anything over 2× target is a spike you'd feel).
LatencyMon — Kernel Interrupt Analysis
Download free from resplendence.com/latencymon. This identifies which Windows kernel drivers are causing DPC interrupt stalls.
Run LatencyMon as Administrator while iRacing is running. Alt-Tab out of iRacing, start LatencyMon, click Play.
Drive for at least 5 minutes through your problem corners with LatencyMon running in the background. Less than 2 minutes gives unreliable results.
Check the Drivers tab sorted by "Highest DPC execution time" — the top entry is your primary offender. On NVIDIA systems this is usually nvlddmkm.sys or dxgkrnl.sys.
Check Per CPU data — if CPU 0 shows 10× more DPC work than all other cores combined, you have an interrupt affinity problem (
Section 05).
Check hard pagefaults — over 5,000 total per session is elevated. Over 20,000 indicates a background service running. Check which process is listed as the top pagefaulter.
Reading LatencyMon results
| Finding | Meaning | Action |
| nvlddmkm.sys highest DPC | NVIDIA kernel driver DPC too long | Section 05 — interrupt affinity |
| dxgkrnl.sys highest DPC | DirectX kernel — often follows NVIDIA fix or overlay hooks | Section 03D — remove RTSS/overlays |
| CPU 0 dominates ISR/DPC | All interrupts on iRacing's core | Section 05 — interrupt affinity |
| tiworker.exe pagefaults | Windows Update running mid-session | Section 04 — disable services |
| msmpeng.exe pagefaults | Defender scanning iRacing files | Section 04 — add exclusions |
| rtss.exe pagefaults | RivaTuner Statistics Server | Section 03D — uninstall RTSS |
| iracingui.exe pagefaults | iRacing UI browser open during session | Close the iRacing launcher during racing |
02Fix A — GPU Scene Complexity SpikesTYPE A
These spikes happen at visually complex corners — grandstands, catch fencing, pit entry, bridges. The GPU gets handed more draw calls than it can complete in one frame, causing the following frame to stall waiting for it to finish.
How to identify Type A
GPU Burst Pattern
Frame −1 GPU active28–35ms
Spike frame FT25–32ms
Spike frame CPU~3ms ✓ fine
Spike frame GPU~4ms ✓ fine
Ripple4–5 elevated frames
PatternSame corner every lap
What causes it
Root Causes
High MSAA samples4x default
Crowds enabledmany draw calls
Car texture streamingGPU burst on entry
Shadow maps onexpensive at corners
Refresh rate mismatchpresent timing off
iRSidekick / iRacing Graphics Settings
| Setting | Value | Reason |
| Refresh Rate | Monitor maximum Hz | Running below max (e.g. 120Hz on a 240Hz monitor) causes present timing mismatches with your frame cap. Set to actual monitor max. |
| NVidia Reflex | Off | Reflex On+Boost manipulates the present queue and caused stall patterns in testing. Start with Off. |
| Frame Rate Limit | Monitor Hz − 1 | 164fps for 165Hz, 239fps for 240Hz. Leave ~30% GPU headroom so burst corners don't max out the card. |
| MSAA Samples | 2x | Dropping from 4x to 2x significantly reduces GPU draw call load at complex geometry. Biggest single graphics fix. |
| Crowds | Off | Grandstand crowd geometry is a major draw call source. Off has near-zero visual impact at racing speeds. |
| Shadow Maps & Cloud Shadows | Off (unchecked) | Biggest GPU spike contributor at complex scenes. Turn off first when chasing Type A. |
| Dynamic Objects | Off | |
| Static Shadow Count | 2 | Default is 3. Drop to 2 if spikes persist after other changes. |
| Max Prerendered Frames | 1 | Reduces render queue depth and input latency. |
| Video mem swap high-res cars | Unchecked | Found in Extras tab. This allows dynamic car texture streaming which causes GPU bursts when cars enter view. Uncheck to preload everything at session start. |
app.ini Texture Preloading
Location: Documents\iRacing\app.ini — back up before editing. iRSidekick does not manage these keys so they persist through profile changes.
Add or edit under the [Graphics] section:
app.ini — [Graphics] sectionCopy
carPreloadAll=1 ; Preload all car textures at session start
trackTexturePreload=1 ; Preload track assets at session start
streamingTextureSize=256 ; Reduce burst size for any remaining streaming
Under the [Audio] section:
numSoundStreams=12 ; Cap audio threads (default -1 = unlimited)
ℹSession load time will increase with preloading enabled. This is correct — assets load once at session start rather than mid-lap. Wait for the full loading screen before going on track.
03Fix B — CPU Sim Thread PreemptionTYPE B
iRacing's sim thread is hardcoded to run on CPU 0. When any kernel interrupt (DPC) also fires on CPU 0, it preempts the sim thread and causes a stutter. The GPU is completely idle during these events — it's purely a CPU scheduling problem.
How to identify Type B
CPU Preemption Pattern
Frame −1 GPU active~4ms ✓ normal
Spike frame FT15–27ms
Spike frame CPU15–27ms
Spike frame GPU~3ms ✓ fine
Ripple1 frame, clean recovery
PatternRandom corners, no pattern
Root causes
What preempts CPU 0
NVIDIA DPC interruptsdefault on CPU 0
Windows Updaterestarts mid-session
RTSS / GFE hooksDirectX interference
Defender scanningmid-session pagefaults
Background servicesWSearch, SysMain etc
NVIDIA Driver — Install Correctly
Download latest Game Ready Driver from nvidia.com/drivers. Significant present queue management improvements have been made in recent driver releases. Old drivers can cause present stalls.
Run Custom Install — uncheck everything except Display Driver. Specifically uncheck: GeForce Experience, PhysX System Software, NVIDIA App, HD Audio (unless using HDMI audio output). Each of these adds background processes and DirectX hooks.
NVIDIA Control Panel — Program Settings
Manage 3D Settings → Program Settings → Add iRacingSim64DX11.exe
| Setting | Value | Notes |
| Power Management Mode | Prefer Maximum Performance | Prevents GPU clock stepping during session. |
| Low Latency Mode | On | Reduces render queue depth. Use On, not Ultra — Ultra caused present queue stall patterns in testing. |
| Threaded Optimization | On | Distributes NVIDIA driver work across multiple cores rather than concentrating on CPU 0. |
| Texture Filtering Quality | High Performance | Reduces texture filtering overhead. |
| Vertical Sync | Off | iRacing handles its own frame pacing via the in-game cap. |
| Shader Cache Size | Unlimited | Prevents shader recompilation mid-session. |
Remove GeForce Experience and RTSS
⚠RivaTuner Statistics Server (RTSS) was found to cause 50,000+ hard pagefaults per session and peak NVIDIA DPC times of 2,900µs+. It hooks into the DirectX present chain. If you have MSI Afterburner or any overlay tool that uses RTSS, uninstall both. CapFrameX JSON capture works without RTSS — disable the overlay in CapFrameX settings (Options → Overlay → uncheck Show overlay).
⚠GeForce Experience runs nvcontainer.exe as a background process that hooks into DirectX and generates unnecessary DPC interrupts. If you use it only for driver downloads, uninstall it — download drivers directly from nvidia.com instead.
Uninstall via Windows Settings → Apps:
- RivaTuner Statistics Server
- MSI Afterburner (installs RTSS as a dependency)
- NVIDIA GeForce Experience
04Fix C — Background Services & PagefaultsHIGH IMPACT
Windows background services — particularly Windows Update — restart themselves mid-session even after being stopped. The fix is to disable them (not just stop them) before racing, then re-enable after.
⚠Stopping services with sc stop is not enough — wuauserv, UsoSvc, and WSearch restart automatically. Use sc config start= disabled to prevent this.
Services to Disable Before Racing
Run as Administrator in Command Prompt — before racingCopy
:: DISABLE these so they cannot restart mid-session
sc config wuauserv start= disabled
sc stop wuauserv
sc config UsoSvc start= disabled
sc stop UsoSvc
sc config WSearch start= disabled
sc stop WSearch
:: STOP these (they stay stopped without disabling)
sc stop SysMain
sc stop Spooler
sc stop WlanSvc
sc stop BthAvctpSvc
sc stop BTAGService
sc stop bthserv
sc stop XblAuthManager
Re-enable After Your Session
Run as Administrator — after racingCopy
:: Re-enable disabled services
sc config wuauserv start= auto
sc start wuauserv
sc config UsoSvc start= auto
sc start UsoSvc
sc config WSearch start= delayed-auto
sc start WSearch
:: Restart stopped services
sc start SysMain
sc start Spooler
sc start WlanSvc
sc start bthserv
sc start BthAvctpSvc
sc start BTAGService
sc start XblAuthManager
Windows Defender Exclusions
Run in admin PowerShell — prevents Defender from scanning iRacing files during sessions:
Run in Administrator PowerShellCopy
Add-MpPreference -ExclusionPath "C:\Program Files (x86)\iRacing"
Add-MpPreference -ExclusionPath "$env:USERPROFILE\Documents\iRacing"
✓Expected result: Hard pagefaults drop from 70,000+ per session to under 2,000. LatencyMon should no longer show tiworker.exe or msmpeng.exe as top pagefaulters.
05Fix D — NVIDIA Interrupt AffinityCOMPLEX — TYPE B
By default, NVIDIA's kernel driver (nvlddmkm.sys) services all GPU interrupts on CPU 0 — the same core iRacing's sim thread is hardcoded to. Moving NVIDIA interrupts to a different core eliminates this competition.
✓Windows 11 — fully resolved. Earlier versions of this guide noted a "persistence workaround." The actual root cause has since been identified: Windows 11 uses MSI (Message Signaled Interrupts) mode for modern NVIDIA GPUs, which causes it to ignore affinity policy entirely. Disabling MSI mode (MSISupported=0) per device instance fixes this. The pre-launch script applies both MSI disable and affinity on every session — driver updates reset MSI mode, so re-applying is necessary but reliable.
🔧Device-specific values ahead. The GPU device instance identifiers in this section are unique to each computer. You must find your own values — do not copy the example values from this guide or the example bat file.
ℹShortcut: rather than running the commands below by hand, download find_my_values.bat and run it — it prints your VEN/DEV path, all device instances, NVIDIA driver version, and AMD power-plan GUID in one go (read-only). The manual steps below are kept so you can see what it reads.
Step 1 — Find Your GPU Device Instances
Run in Administrator Command Prompt:
Step 1a — get your GPU's VEN/DEV path and instance IDsCopy
wmic path Win32_PnPEntity where "Name like '%NVIDIA%'" get DeviceID,Name
Look for your GPU model. The DeviceID output has two parts — split at the last backslash:
Example — your values will be different. Format:
PCI\VEN_10DE&DEV_XXXX&SUBSYS_XXXXXXXX&REV_XX\4&XXXXXXXX&0&XXXX
↑ VEN/DEV path (same for all instances) ↑ instance suffix (different each line)
To list all instances at once, use the VEN/DEV path you found above:
Step 1b — list all instances under your VEN/DEV pathCopy
reg query "HKLM\System\CurrentControlSet\Enum\PCI\YOUR_VEN_DEV_PATH"
Each line returned is a device instance. You may see 2–5 instances. Note: after a driver update, a new instance may appear (e.g. just "4" with no suffix). Apply the fix to every instance you find.
Step 2 — Disable MSI Mode + Apply Affinity (all instances)
For each instance, run all four commands. Replace YOUR_VEN_DEV_PATH and YOUR_INSTANCE with your values:
Registry fix — run for EACH instanceCopy
:: Step 2a — disable MSI mode (required on Win11 — without this, affinity is ignored)
reg add "HKLM\System\CurrentControlSet\Enum\PCI\YOUR_VEN_DEV_PATH\YOUR_INSTANCE\Device Parameters\Interrupt Management\MessageSignaledInterruptProperties" /v MSISupported /t REG_DWORD /d 0 /f
:: Step 2b — set interrupt affinity to CPU 7
reg add "HKLM\System\CurrentControlSet\Enum\PCI\YOUR_VEN_DEV_PATH\YOUR_INSTANCE\Device Parameters\Interrupt Management\Affinity Policy" /v DevicePolicy /t REG_DWORD /d 4 /f
reg add "HKLM\System\CurrentControlSet\Enum\PCI\YOUR_VEN_DEV_PATH\YOUR_INSTANCE\Device Parameters\Interrupt Management\Affinity Policy" /v AssignmentSetOverride /t REG_BINARY /d 8000000000000000 /f
reg add "HKLM\System\CurrentControlSet\Enum\PCI\YOUR_VEN_DEV_PATH\YOUR_INSTANCE\Device Parameters\Interrupt Management\Affinity Policy" /v DevicePriority /t REG_DWORD /d 3 /f
Key values explained:
- MSISupported = 0 — disables Message Signaled Interrupts mode. Without this on Windows 11, the affinity policy is silently ignored and GPU interrupts stay on CPU 0.
- DevicePolicy = 4 — IrqPolicySpecifiedProcessors (use the core we specify)
- AssignmentSetOverride = 8000000000000000 (REG_BINARY, little-endian) — byte 0 = 0x80 = bit 7 = logical CPU 7. Avoids CPU 0 where iRacing's sim thread runs.
- DevicePriority = 3 — High interrupt priority
⚠Driver updates reset MSI mode. Every NVIDIA driver install rewrites the device instance registry entries, including MSISupported — resetting it to 1 (enabled). This causes affinity to stop working silently. The pre-launch script re-applies both MSI disable and affinity before every session, so you won't notice this in practice. But if you ever see stutters return after a driver update, this is why.
Reboot after applying. Verify with LatencyMon — CPU 7 should now show elevated DPC activity, and CPU 0 should drop significantly.
Step 3 — GoInterruptPolicy (visual alternative)
Download from github.com/spddl/GoInterruptPolicy. Run as Administrator. Search "nvidia" to filter.
Find all NVIDIA GeForce RTX entries. There will be multiple instances — apply settings to all of them.
For each entry: uncheck MSI (this is the MSISupported=0 step). Then set Device Priority → High, Device Policy → IrqPolicySpecifiedProcessors, check CPU 7 only.
Also apply the registry fix (Step 2) — GoInterruptPolicy only sets the currently active instance. The registry fix covers all instances and persists to the next reboot before the bat re-applies.
Automate with Pre-Launch Script
The pre-launch script (Section 08) applies MSI disable and affinity to all instances before every session. This handles reboot rotation and driver update resets automatically — you don't need to think about it.
Verify It's Working
Run LatencyMon during iRacing. In Per CPU Data:
- Working: CPU 7 shows elevated DPC total, CPU 0 drops significantly from its previous dominant value
- Not working: CPU 0 still dominant (40s+ DPC), CPU 7 near zero — MSI mode is likely still enabled
To Revert
Revert MSI mode to defaultCopy
reg add "HKLM\System\CurrentControlSet\Enum\PCI\YOUR_VEN_DEV_PATH\YOUR_INSTANCE\Device Parameters\Interrupt Management\MessageSignaledInterruptProperties" /v MSISupported /t REG_DWORD /d 1 /f
reg delete "HKLM\System\CurrentControlSet\Enum\PCI\YOUR_VEN_DEV_PATH\YOUR_INSTANCE\Device Parameters\Interrupt Management\Affinity Policy" /f
06Fix E — AMD Ryzen Balanced Power PlanX3D SPECIFIC
The 7800X3D and 9800X3D use 3D V-Cache technology that requires the CPU firmware to dynamically prioritize specific cores for gaming workloads. The AMD Ryzen Balanced power plan enables this. Bitsum Highest Performance and Windows High Performance both disable AMD's core prioritization.
⚠Despite AMD chipset drivers being installed, the Ryzen Balanced power plan is frequently missing from Windows. Check with powercfg /list in cmd. If it doesn't appear, create it manually below.
Check if AMD Ryzen Balanced existsCopy
powercfg /list
If "AMD Ryzen Balanced" doesn't appear in the list, create it manually:
Create AMD Ryzen Balanced — run as AdministratorCopy
:: Step 1 — duplicate the Balanced plan, note the GUID it outputs
powercfg /duplicatescheme 381b4222-f694-41f0-9685-ff5bb260df2e
:: Step 2 — configure it (replace YOUR-GUID with the output from Step 1)
powercfg /changename YOUR-GUID "AMD Ryzen Balanced"
powercfg /setacvalueindex YOUR-GUID 54533251-82be-4824-96c1-47b60b740d00 893dee8e-2bef-41e0-89c6-b55d0929964c 5
powercfg /setacvalueindex YOUR-GUID 54533251-82be-4824-96c1-47b60b740d00 bc5038f7-23e0-4960-96da-33abaf5935ec 100
powercfg /setacvalueindex YOUR-GUID 54533251-82be-4824-96c1-47b60b740d00 7f2f5cfa-f10c-4823-b5e1-e93ae85f46b5 1
:: Step 3 — activate it (replace YOUR-GUID)
powercfg /setactive YOUR-GUID
:: Step 4 — save your GUID — you'll need it for the pre-launch script
powercfg /list
🔧The GUID generated will be unique to your system. Save it — you'll need it in the pre-launch script (Section 08) and if you ever reimage.
07Fix F — Process Lasso ConfigurationTYPE B
⚠Do NOT set CPU affinity for iRacingSim64DX11.exe. iRacing uses EasyAntiCheat which blocks all external CPU affinity changes. Process Lasso, Task Manager, PowerShell, and scheduled tasks all fail silently or with "Access denied." iRacing's sim thread is hardcoded to CPU 0 internally — this cannot be changed externally.
What Process Lasso CAN do for iRacing
| Process | Setting | Value | Notes |
| iRacingSim64DX11.exe | CPU Priority | High | Not Realtime — causes instability. |
| iRacingSim64DX11.exe | I/O Priority | High | |
| iRacingSim64DX11.exe | Exclude from ProBalance | Yes ✓ | Critical — ProBalance must not throttle the sim process. |
| iRacingLocalServer64.exe | CPU Priority + I/O | High | No affinity needed. |
| iRacingService64.exe | CPU Priority + I/O | High | No affinity needed. |
| CapFrameX.exe | Exclude from ProBalance | Yes ✓ | Prevents capture tool from being throttled. |
| iOverlay.exe (or similar) | Exclude from ProBalance | Yes ✓ | |
| Discord.exe | CPU Priority | Below Normal | Keep Discord from competing with iRacing. |
| Discord.exe | CPU Affinity | Odd cores only (1,3,5,7...) | Physically isolate Discord from iRacing's cores. Discord doesn't use EAC so affinity works. |
| Discord.exe | I/O Priority | Below Normal | |
Power Profile in Process Lasso
Options → Power → Active Power Profile → AMD Ryzen Balanced (the plan created in Section 06)
08Pre-Launch Automation ScriptAUTOMATION
This script applies every per-session change in one shot — disabling MSI mode and pinning GPU interrupts to CPU 7 on all instances, stopping background services, suspending Defender, setting the power plan, and more. You configure it once, then run it before each session.
Setup — do this once
Download both scripts from the
downloads section —
pre_iracing_launch.bat (the template) and
find_my_values.bat — into the
same folder.
Run find_my_values.bat as Administrator. It reads your system (changing nothing) and writes my_values.bat next to itself, filled in with your power-plan GUID, NVIDIA VEN/DEV path, device instances, and driver version.
That's it —
pre_iracing_launch.bat auto-loads
my_values.bat on every run, so there's nothing to copy or paste. If a value shows up as
YOUR-… it couldn't be detected; find it manually via
Section 05 (NVIDIA values) or
Section 06 (power-plan GUID), then edit
my_values.bat directly, keeping the same quoting.
pre_iracing_launch.bat — the CONFIG block (fallback only, used if my_values.bat is missing)Copy
:: ============================ CONFIG ============================
:: 1) AMD Ryzen Balanced power plan GUID (find: powercfg /list)
set "POWER_GUID=YOUR-AMD-RYZEN-BALANCED-GUID"
:: 2) NVIDIA GPU VEN/DEV path -- the part AFTER ...\Enum\PCI\
set "NV_VENDEV=YOUR-GPU-VEN-DEV-PATH"
:: 3) NVIDIA device instances -- one "quoted" entry each, space-separated
set NV_INSTANCES="YOUR_INSTANCE_1" "YOUR_INSTANCE_2"
:: 4) Expected NVIDIA driver version string
set "NV_DRIVER=YOUR-DRIVER-VERSION"
:: ===============================================================
⚠If editing by hand: keep the exact quoting shown above. The NVIDIA values contain literal & characters (e.g. VEN_10DE&DEV_2782&...), and cmd.exe only treats & as literal text when it's wrapped in real double quotes exactly like this — single quotes, missing quotes, or a value split across two lines will make cmd read each & as a command separator and fail with "is not recognized as an internal or external command". my_values.bat is generated with the correct quoting automatically, which is why it's the recommended path.
ℹThe monitor refresh-rate check below needs no configuration — it reads your GPU's reported max Hz for the active mode itself, every run, and compares your current Hz against it (5Hz tolerance, since drivers sometimes report 1-2 Hz under a panel's rated rate even at true max — e.g. a 165Hz monitor reporting 164Hz).
Every session
Run pre_iracing_launch.bat as Administrator before you launch iRacing.
Run post_iracing_session.bat as Administrator when you're done racing — it restores the services and Defender (see below).
Post-Session Restore Script
Save as post_iracing_session.bat — run as Administrator after racing to restore all services:
post_iracing_session.batCopy
@echo off
net session >nul 2>&1
if %errorlevel% neq 0 (echo Run as Administrator & pause & exit /b 1)
sc config wuauserv start= auto & sc start wuauserv
sc config UsoSvc start= auto & sc start UsoSvc
sc config WSearch start= delayed-auto & sc start WSearch
sc start SysMain & sc start Spooler & sc start WlanSvc
sc start bthserv & sc start BthAvctpSvc & sc start BTAGService
sc start XblAuthManager
sc query bzserv >nul 2>&1 && sc start bzserv
reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\GameDVR" /v AppCaptureEnabled /t REG_DWORD /d 1 /f >nul 2>&1
echo All services restored.
pause
09Results — Before & After DataDATA
All captures: 164fps cap, triple 2560×1440 240Hz, AMD Ryzen 7 7800X3D, RTX 4090. Spike threshold: >12.2ms (2× the 6.1ms target frame time at 164fps).
| Configuration | Avg | StDev | P99 | P99.9 | Worst | Spikes/5min |
| Baseline — No fixes applied |
| GPU burst stutter (Type A) | 6.10 | 0.33 | 6.92 | 7.41 | 27.62ms | 1 |
| Complex track, no fixes | 6.10 | 0.43 | 7.07 | 7.65 | 32.10ms | 2 |
| After graphics settings (Fix A) |
| MSAA 2x, crowds off, mem swap off | 6.10 | 0.35 | 7.07 | 7.63 | 8.43ms | 0 |
| After driver update + 240Hz + Reflex off |
| New driver, correct refresh rate | 6.08 | 0.32 | 6.93 | 7.36 | 17.14ms | 1 |
| After NVIDIA affinity + Process Lasso + services disabled |
| Full fix applied — session 1 | 6.08 | 0.33 | 6.98 | 7.59 | 8.80ms | 0 |
| Full fix applied — session 2 | 6.08 | 0.35 | 7.02 | 7.62 | 10.84ms | 0 |
| Full fix applied — session 3 | 6.08 | 0.40 | 7.15 | 7.76 | 8.95ms | 0 |
| Regression — RTSS discovered running |
| RTSS active (CapFrameX overlay) | 6.08 | 0.51 | 7.62 | 8.39 | 27.12ms | 3 |
| After RTSS uninstalled |
| RTSS removed, iOverlay only | 6.08 | 0.54 | 7.62 | 8.52 | 10.71ms | 0 |
10Hardware Compatibility NotesHARDWARE
Ryzen 7 7800X3D
V-Cache: Single CCD, all 8 cores share the cache
Best power plan: AMD Ryzen Balanced
CPU affinity for iRacing: Blocked by EAC
Interrupt affinity target: CPU 7 (AssignmentSetOverride = 0x80)
Tested: ✓ This guide is based on 7800X3D testing
Ryzen 9 9800X3D
V-Cache: Single CCD, same topology as 7800X3D
Best power plan: AMD Ryzen Balanced (same)
CPU affinity for iRacing: Blocked by EAC (same)
Interrupt affinity target: CPU 7 recommended (same logic applies)
Tested: Not directly tested — same architecture, fixes should apply
Windows 11
MSI interrupt affinity: Unreliable — Windows overrides settings for MSI-mode devices
Workaround: Apply registry fix to all device instances via pre-launch script before every session
Note: The affinity fix works on some Win11 systems consistently, others inconsistently. Run LatencyMon to verify.
Windows 10
MSI interrupt affinity: More reliable than Windows 11
GoInterruptPolicy: More likely to persist across reboots
Service names: Same as Windows 11
Note: If on Windows 10 and the affinity fix persists, you may not need the pre-launch script for the NVIDIA section.
Other NVIDIA GPU Notes
The interrupt affinity approach should work for any NVIDIA GPU, but the number of device instances in the registry varies. Some systems show only one instance, others show two or three. Run the wmic command in Section 05 to find yours. The AssignmentSetOverride bitmask value (8000000000000000 = CPU 7, i.e. 0x80) is a confirmed starting point — use AutoGpuAffinity (github.com/valleyofdoom/AutoGpuAffinity) to benchmark and find the optimal core for your specific system.
Single Screen vs Triple Screen
The GPU load differences between single and triple screen are significant. All settings in this guide are tuned for triple 2560×1440. Single screen users may be able to run higher settings (MSAA 4x, crowds on) without triggering Type A GPU burst spikes. The CPU-side fixes (services, interrupt affinity, power plan) apply equally to both setups.
11Fresh Build ChecklistREFERENCE
Windows & Drivers
- Run all Windows Updates completely before installing anything else
- Install AMD chipset drivers from amd.com/support — verify AMD Ryzen Balanced appears in
powercfg /list
- Install NVIDIA display driver only — custom install, uncheck GFE, PhysX, NVIDIA App
- Uninstall RivaTuner Statistics Server and MSI Afterburner if present
- Disable WiFi adapter in Device Manager if on wired ethernet
- Add Windows Defender exclusions for iRacing (Section 04)
Power & Performance
- Create AMD Ryzen Balanced power plan (Section 06) — save the GUID
- Install Process Lasso — enable start with Windows — set AMD Ryzen Balanced as power profile
- Configure Process Lasso per Section 07 — exclude iRacing sim from ProBalance
NVIDIA Interrupt Affinity
- Find all GPU device instances (Section 05 wmic command)
- Apply interrupt affinity registry fix to all instances (Section 05)
- Reboot and verify with LatencyMon — CPU 7 should show elevated DPC activity, CPU 0 should drop
- Update pre-launch script with your device instance IDs
NVIDIA Control Panel
- Add iRacingSim64DX11.exe to Program Settings with values from Section 03
- Confirm all monitors set to maximum Hz
iRacing Configuration
- Apply iRSidekick graphics settings from Section 02
- Edit app.ini — add texture preload and sound stream keys (Section 02)
- Frame cap = monitor Hz − 1. C-States disabled in BIOS. EXPO/XMP enabled for RAM.
Pre-Session Routine
- Update pre-launch script with your GUID and device IDs
- Run pre-launch script as Administrator before every session
- Confirm Process Lasso running in system tray
- Wait at least one full lap before starting CapFrameX capture
- Run post-session script after racing to restore services
12Revert ReferenceSAFETY NET
NVIDIA Interrupt Affinity (Registry)
→ Applied: DevicePolicy=4, AssignmentSetOverride=8000000000000000 (CPU 7), DevicePriority=3 on all instances
← Revert: delete the Affinity Policy key for each instance and reboot
reg delete "HKLM\System\CurrentControlSet\Enum\PCI\YOUR_DEVICE_ID\Device Parameters\Interrupt Management\Affinity Policy" /f
Power Plan
→ Applied: AMD Ryzen Balanced
← Revert: switch in Control Panel → Power Options or via powercfg /setactive with original GUID
MSAA Setting
→ Applied: 2x in iRSidekick Graphics tab
← Revert: Graphics tab → MSAA Samples → 4x
Note: visual quality improvement at cost of GPU load at complex corners.
Video mem swap high-res cars
→ Applied: Unchecked in iRSidekick Extras tab
← Revert: Extras tab → check "Video mem swap high-res cars"
Only revert if VRAM pressure becomes an issue with large grids.
Windows Defender Exclusions
→ Applied: iRacing folders excluded from real-time scanning
← Revert in admin PowerShell:
Remove-MpPreference -ExclusionPath "C:\Program Files (x86)\iRacing"
Remove-MpPreference -ExclusionPath "$env:USERPROFILE\Documents\iRacing"
Refresh Rate
→ Applied: Monitor maximum Hz in iRSidekick and Windows
← Revert: Monitor/Display tab in iRSidekick
No reason to revert — running at max Hz is always correct.
NVIDIA Control Panel — Low Latency Mode
→ Applied: On
← Revert: NVIDIA Control Panel → Manage 3D Settings → iRacingSim64DX11.exe → Low Latency Mode → Off