Performance Troubleshooting Guide

iRacing Stutter Fix
for AMD Ryzen X3D + NVIDIA

A complete guide to diagnosing and eliminating frame time spikes in iRacing on systems running AMD Ryzen 7000/9000 X3D processors with NVIDIA discrete GPUs on triple-screen or single-screen setups.

AMD Ryzen X3D (7800X3D / 9800X3D) NVIDIA RTX GPU Windows 11 iRacing DX11 Triple Screen / Single Screen

iRacing stutters on this platform fall into two distinct types. Identifying which type you have determines the correct fix. Use CapFrameX (free) to capture frame time data and analyze the spike anatomy.

Type A
GPU Scene Complexity Spike
Frame −1 GPU active28–35ms
Spike frame FT25–32ms
Spike frame CPU~3ms (fine)
Spike frame GPU~4ms (fine)
Ripple frames4–5 frames elevated
TriggerComplex corners, grandstands
Type B
CPU Sim Thread Preemption
Frame −1 GPU active~4ms (normal)
Spike frame FT15–27ms
Spike frame CPU15–27ms
Spike frame GPU~3ms (fine)
Ripple frames1 frame, clean recovery
TriggerAny corner, no pattern
Key insight: iRacing's sim thread is hardcoded to CPU 0. Any kernel interrupt (DPC) that also runs on CPU 0 will preempt the sim thread and cause a Type B stutter. NVIDIA GPU drivers generate high-frequency DPCs — by default on CPU 0.
Tools needed: CapFrameX for frame time capture, LatencyMon (free, resplendence.com) for kernel interrupt diagnosis. Run both simultaneously during a session to correlate stutters with DPC events.

These settings reduce GPU draw call load at complex corners, eliminating Type A spikes. Configure via iRSidekick Profiles or iRacing's own Options menu.

Monitor / Display Tab

SettingValueNotes
Refresh RateMatch monitor max HzSet to your monitor's maximum (144, 165, 240Hz). Running below max causes present timing mismatches with the frame cap.
NVidia ReflexOffReflex On+Boost manipulates the present queue and can cause stall patterns. Test Off first.
NVidia SMPEnabledKeep enabled for multi-monitor setups.

Graphics Tab

SettingValueNotes
Frame Rate LimitMatch Hz − 1e.g. 164fps for 165Hz, 239fps for 240Hz. Leave ~30% GPU headroom.
MSAA Samples2xDropping from 4x to 2x significantly reduces GPU load at corners with complex geometry.
CrowdsOffGrandstand crowd geometry is a major draw call source at busy corners.
Shadow Maps & Cloud ShadowsOffBiggest single GPU spike contributor at complex scenes.
Dynamic ObjectsOff
Static Shadow Count2Default 3. Reduce to 2 if GPU spikes persist.
Max Prerendered Frames1Reduces render queue depth, improves input latency.

Extras Tab

SettingValueNotes
Video mem swap high-res carsUncheckedAllows dynamic car texture streaming which causes GPU bursts when cars enter view. Uncheck to preload everything.
Load paint textures while drivingCheckedKeep enabled.

Location: Documents\iRacing\app.ini — back up before editing. iRSidekick does not manage these keys so they survive profile switches.

Add or edit under the [Graphics] section:

carPreloadAll=1 ; Preload all car textures at session start trackTexturePreload=1 ; Preload track assets at session start streamingTextureSize=256 ; Reduce burst size for any streaming loads

Under the [Audio] section:

numSoundStreams=12 ; Cap audio streams (default -1 = unlimited)
Session load time will increase slightly with preloading enabled. This is expected — assets load once at session start rather than mid-lap.

Download latest driver from nvidia.com/drivers. Always use the most current Game Ready Driver.
Run Custom Install. Uncheck: PhysX System Software, GeForce Experience, NVIDIA App, HD Audio. Only check: Display Driver. GFE adds DirectX hooks and unnecessary DPC interrupts.
If GeForce Experience is already installed, uninstall it via Windows Settings → Apps.

NVIDIA Control Panel — iRacing Program Settings

Manage 3D Settings → Program Settings → Add iRacingSim64DX11.exe

SettingValueNotes
Power Management ModePrefer Maximum PerformancePrevents GPU clock stepping during session.
Low Latency ModeUltraReduces render queue depth.
Threaded OptimizationOnDistributes NVIDIA driver work across cores rather than concentrating on CPU 0.
Texture Filtering QualityHigh Performance
Vertical SyncOffiRacing handles its own frame pacing.
Shader Cache SizeUnlimitedPrevents shader recompilation mid-session.

This is the most impactful fix for Type B CPU stalls. By default, NVIDIA's kernel driver nvlddmkm.sys services all GPU interrupts on CPU 0. Since iRacing's sim thread is also hardcoded to CPU 0, these DPC interrupts directly preempt the sim thread causing stutters. Moving NVIDIA interrupts to CPU 2 eliminates the competition entirely.

Registry edit. Run as Administrator. Requires reboot to take effect.

Step 1 — Find your GPU Device ID

wmic path Win32_PnPEntity where "Name like '%NVIDIA%'" get DeviceID,Name

Note the full DeviceID for your GPU — it looks like:

PCI\VEN_10DE&DEV_XXXX&SUBSYS_XXXXXXXX&REV_XX\X&XXXXXXXX&X&XXXX

Step 2 — Apply Interrupt Affinity

Replace YOUR_DEVICE_ID with the full DeviceID from Step 1:

reg add "HKLM\System\CurrentControlSet\Enum\PCI\YOUR_DEVICE_ID\Device Parameters\Interrupt Management\Affinity Policy" /v DevicePolicy /t REG_DWORD /d 4 /f reg add "HKLM\System\CurrentControlSet\Enum\PCI\YOUR_DEVICE_ID\Device Parameters\Interrupt Management\Affinity Policy" /v AssignmentSetOverride /t REG_BINARY /d 04 /f

The value 04 is a bitmask — binary 00000100 = CPU 2. Reboot after applying.

Expected result: CPU 0 DPC load drops ~75%. CPU 2 handles NVIDIA DPCs. Type B stutter magnitude reduces from 17–27ms to under 13ms or eliminated entirely.

To Revert

reg delete "HKLM\System\CurrentControlSet\Enum\PCI\YOUR_DEVICE_ID\Device Parameters\Interrupt Management\Affinity Policy" /f

The 7800X3D and 9800X3D require the AMD Ryzen Balanced power plan so firmware can dynamically prioritize V-Cache cores. Bitsum Highest Performance and Windows High Performance both disable this behavior.

Despite AMD chipset drivers being installed, this plan is often missing. Check with powercfg /list — if absent, create it manually.
Duplicate the Balanced plan — note the new GUID:
powercfg /duplicatescheme 381b4222-f694-41f0-9685-ff5bb260df2e
Name and configure it — replace <GUID> with your output:
powercfg /changename <GUID> "AMD Ryzen Balanced" powercfg /setacvalueindex <GUID> 54533251-82be-4824-96c1-47b60b740d00 893dee8e-2bef-41e0-89c6-b55d0929964c 5 powercfg /setacvalueindex <GUID> 54533251-82be-4824-96c1-47b60b740d00 bc5038f7-23e0-4960-96da-33abaf5935ec 100 powercfg /setacvalueindex <GUID> 54533251-82be-4824-96c1-47b60b740d00 7f2f5cfa-f10c-4823-b5e1-e93ae85f46b5 1 powercfg /setactive <GUID>

Important: iRacing uses EasyAntiCheat which blocks external CPU affinity changes. Do not set CPU affinity for iRacingSim64DX11.exe — it will fail. The NVIDIA interrupt affinity registry fix (Section 05) is the correct approach.

iRacingSim64DX11.exe — Right-click → Always

SettingValueNotes
CPU PriorityHighNot Realtime.
I/O PriorityHigh
Exclude from ProBalanceYesCritical — ProBalance must not throttle the sim process mid-session.

Support Processes & Overlays

ProcessSettingValue
iRacingLocalServer64 / Service64CPU & I/O PriorityHigh
CapFrameX, iOverlayExclude from ProBalanceYes
Discord.exeCPU Priority / AffinityBelow Normal / Odd cores only

Options → Power → Active Power Profile → AMD Ryzen Balanced


LatencyMon (free at resplendence.com) identifies which kernel drivers cause DPC stalls. Run during a session to verify fixes.

Launch iRacing and get on track through problem corners.
Alt-Tab, run LatencyMon as Administrator. Click Play. Run at least 5 minutes.
Check Drivers tab sorted by highest DPC execution time.
Check Per CPU data. If CPU 0 handles over 90% of ISR/DPC work, apply Section 05.
FindingMeaningAction
nvlddmkm.sys highest DPCNVIDIA driver DPC too longApply Section 05. Update driver.
CPU 0 handling all ISRsInterrupt affinity not setApply Section 05 registry fix.
tiworker.exe pagefaultsWindows Update runningStop wuauserv before sessions.
msmpeng.exe pagefaultsDefender scanning iRacingAdd Defender exclusions.
Healthy baseline: NVIDIA worst DPC under 900µs. DPC count over 1000µs = 0. Hard pagefaults under 500 total. CPU 2 handling elevated DPC load is expected and correct after applying the registry fix.

Stopping background Windows services before sessions reduced hard pagefaults by 97% in testing. Run as Administrator before each session.

:: Stop before racing sc stop wuauserv & sc stop UsoSvc & sc stop WSearch & sc stop SysMain sc stop Spooler & sc stop WlanSvc & sc stop XblAuthManager sc stop BthAvctpSvc & sc stop BTAGService & sc stop bthserv powercfg /setactive YOUR-AMD-RYZEN-BALANCED-GUID
:: Restore after racing sc start wuauserv & sc start UsoSvc & sc start WSearch & sc start SysMain sc start Spooler & sc start WlanSvc & sc start XblAuthManager sc start bthserv & sc start BthAvctpSvc & sc start BTAGService

Windows Defender Exclusions

Add-MpPreference -ExclusionPath "C:\Program Files (x86)\iRacing" Add-MpPreference -ExclusionPath "$env:USERPROFILE\Documents\iRacing"

All captures at 164fps cap, triple 2560×1440, AMD Ryzen 7 7800X3D, RTX 4090. Spike threshold: over 12.2ms (2× the 6.1ms target frame time).

ConfigurationAvgStDevP99P99.9WorstSpikes
Baseline — No fixes applied
GPU burst stutter (Type A)6.100.336.927.4127.62ms1/120s
Complex track, no fixes6.100.437.077.6532.10ms2/68s
After graphics settings tuning (Type A fixes)
MSAA 2x, crowds off, mem swap off6.100.357.077.638.43ms0/120s
After driver update + correct Hz + Reflex off
New driver, correct refresh rate, Reflex off6.080.326.937.3617.14ms1/300s
After NVIDIA interrupt affinity + Process Lasso + services stopped
Full fix applied — session 16.080.336.987.49ms8.80ms0/300s
Full fix applied — session 26.080.357.027.6210.84ms0/300s
Full fix applied — session 36.080.407.157.768.95ms0/300s
Full fix applied — session 46.080.547.658.4710.61ms0/300s

Windows & Drivers
  • Run all Windows Updates before installing anything else
  • Install AMD chipset drivers — verify AMD Ryzen Balanced appears in powercfg /list
  • Install NVIDIA display driver only (custom install, uncheck GFE, PhysX, NVIDIA App)
  • Disable WiFi adapter in Device Manager if on wired ethernet
  • Add Windows Defender exclusions for iRacing install and Documents\iRacing
Power & Performance
  • Create AMD Ryzen Balanced power plan (Section 06) — note the GUID
  • Install Process Lasso — 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 GPU Device ID via wmic command (Section 05)
  • Apply interrupt affinity registry fix (Section 05)
  • Reboot and verify with LatencyMon — CPU 2 should show elevated DPC activity
iRacing Configuration
  • Apply graphics settings from Section 02
  • Edit app.ini — add texture preload and sound stream keys (Section 03)
  • Frame cap = monitor Hz − 1. Confirm C-States disabled in BIOS. EXPO/XMP enabled for RAM.
Pre-Session Routine
  • Run pre-launch script as Administrator (stops background services)
  • Confirm Process Lasso running in system tray
  • Wait at least one full lap before starting CapFrameX captures