Jump to content

Resolving Underperforming GPU Issues & Microstuttering

ℹ️ Please read this post before creating a thread on GPU Performance Issues, as it will help you get faster, better, stronger help from the community. (Assuming the steps below don't empower you to fix it yourself.)

 

02/07/2024 📰 Nvidia GPU and affecting web browser scrolling? Check out this driver: https://nvidia.custhelp.com/app/answers/detail/a_id/5519/~/geforce-hotfix-driver-version-551.46

 

ASSUMPTIONS MADE IN THIS GUIDE:

 

That your issue  isn't a KNOWN ISSUE. To check, search the AMD, Nvidia and Intel Knowledge bases for the word "stutter" and see if they list any known issues that describe your issue.

  1. The PC boots and runs with some modicum of stability
  2. The GPU(s) display to your monitor without issues (i.e., this is not a guide for blank screen issues during boot!)
  3. If it's issues with games, ideally it's not game-specific
    (You're welcome to try this guide, but it's less-likely to work if the issues only happen in a specific game)
  4. The operating system is Windows 10 or Windows 11


HOUSE KEEPING:

🛑 Before asking for help (do not reply here), do all of these (house keeping) things first:

Spoiler

💡Try each step, in order, and if the issues persist, continue with the next step. The steps are arranged by difficulty so that you can try the easiest things first.

ℹ️ That being said, if you have a riser cable, there's a decent chance that it's causing the issue even if it worked fine in a previous system or with a different GPU. You might just want to start by removing it to rule it out. (or you can wait until the end of this guide.)

  1. Check for Windows Updates and install them
  2. Follow this guide to update all device drivers and UEFI/BIOS on your computer: 
  3. If this only occurs in games, test a game with Easy Anti-Cheat (EAC) disabled. If the issue goes away, disable USB power saving by doing the following:
    Edit power plan >> Change advanced power settings >> USB selective suspend settings >> Disabled
    You can also try disabling any other suspend/power saving options in those settings also

  4. Turn off all monitoring software such as HWInfo64, MSI Afterburner, etc. (Source: NVIDIA Knowledge Base Diagnostic Tools Cause Stuttering) Even though the link is Nvidia-specific, it doesn't hurt to test if you have an AMD or Intel GPU.

  5. Delete the shader cache (this may temporarily increase stuttering/freezing as shaders are compiled)

    Spoiler

    Clear all the contents of these folders (don't delete the actual folders & some folders may not exist. That's okay.)

    💡You can copy and paste each line into the address bar of Windows File Explorer to jump directly to the folder. Then use Ctrl + A to delete the files.
    Microsoft Direct X:

    %LOCALAPPDATA%\D3DSCache

    AMD:

    %LOCALAPPDATA%\AMD\DxCache

    NVIDIA:

    %LOCALAPPDATA%\NVIDIA\GLCache
    %LOCALAPPDATA%\NVIDIA\DXCache
    %APPDATA%\NVIDIA\ComputeCache
    %USERPROFILE%\AppData\LocalLow\NVIDIA\PerDriverVersion\DXCache
    %USERPROFILE%\AppData\LocalLow\NVIDIA\PerDriverVersion\GLCache

    Open Disk Cleanup and select the checkbox for DirectX Shader Cache. (If the size is 0 bytes, nothing to do here.) Click OK to run Disk Cleanup.
    ℹ️ If this issue is a GAME-SPECIFIC issue, use your favorite search engine to search for "delete insert_game_name Shader Cache". Follow those directions to delete that game's shader cache.

     

  6. Check your UEFI settings for a setting named something like: iGD multl-monitor mode. Verify it's disabled.
    ℹ️ If this is enabled, it can ignore GPU settings changed in the next step as seen here.
  7.  Open the Run box (Windows key + R) and copy, paste, and run the following command:
    ms-settings:display-advancedgraphics

    Verify that Windows is using the correct GPU (and/or) Windows is set to use Performance/High Performance settings for the applications you are experiencing issues with.
    If the application you are using is not listed, click Add Desktop App and add it (remember to set it to Performance/High Performance)

  8. Search the Start menu for "Choose a power plan"
    Experiment with both the Balanced and High-Performance plan to see if it resolves the issue

  9. Grab the motherboard manual from the website for your motherboard and verify the GPU is connected to the preferred PCIE slot for your motherboard
    ℹ️ Refer to step 2 if you're trying to identify your motherboard make & model
  10. If supported, look in your motherboard manual and/or UEFI to enable Resizable BAR and/or Above 4G Decoding (different manufactures call them different things)
    Again, your motherboard/CPU/GPU combination may not support it
  11. If you're on an AMD system get the latest chipset drivers from AMD (click on the DOWNLOAD WINDOWS DRIVERS button underneath Windows 10/11 Drivers Auto Detect and Install)
  12. Check your SATA controller settings in the UEFI. Look for the words RAID (on Intel platforms it may be labeled RST or Rapid Storage Technology) or AHCI in the settings (rest of directions in Spoiler box)
    Spoiler

    DO NOT CHANGE THEM yet!

    1. Boot back into Windows
    2. Search the Start Menu for "Change advanced startup options" and open the result
    3. Click the Restart Now button beside advanced startup
    4. Click Startup Settings
    5. Click Restart and be ready to enter the UEFI!
    6. Enter the UEFI before the computer starts, and switch RAID to AHCI
    7. Save the changes to the UEFI
    8. You should then be brought to a screen asking what mode you want to boot in
    9. Choose #4 Enable Safe Mode
    10. Once you've logged in to Safe mode, you can restart the computer
    11. Windows should now be using AHCI
  13. Enable or Disable write-caching on the drive where your game is installed.
    Open Device Manager
    Right-click on the appropriate disk drive under Disk Drives and click Properties
    Click the Policies tab
    Tick the checkbox for Enable or Disable Write caching on the device
    You'll need to experiment to see if either affects performance
    ⚠️ Ideally, you want a battery-backup if you have this enabled on a desktop
    Some users report turning this off improved their performance
    🛑 Don't be tempted by the check box beside Turn off Windows write-cache buffer flushing on the device setting. It doesn't do what it sounds like.
  14. Try enabling XMP (Intel) or DOCP (AMD) in your UEFI
    ℹ️  Some AMD motherboards also call this setting XMP
    ℹ️  If enabling XMP or DOCP cause system instability, simply turn it back off
  15. Are you using a riser cable with your GPU? If so, remove the riser cable and test with the GPU directly in the motherboard PCIE slot.
  16. Set PCIE speed to 3.0 or 4.0 instead of Auto in the UEFI (This is not a root cause fix, but may indicate an underlying issue, especially if 3.0 works fine, but 4.0 does not.)
  17. Unplug all USB devices (including mouse, keyboard, monitor USB extensions, USB hubs, nano usb wireless receivers etc.)
    Use a different keyboard and mouse to boot the PC and see if the issue is resolved. If it is, swap one device at a time to verify which device is causing it. Replace that device.
  18. If your issue is not resolved, take a break and grab a drink and a snack. That was a lot of work! Continue to the next section when you're ready.

 

🙋‍♀️ ASKING FOR HELP 🙋‍♂️
🔬 COLLECT DATA FOR TROUBLESHOOTING FIRST 🧪

Spoiler

For us to help you quickly, we'll need some data!

  1. Run the PowerShell Script below by copying and pasting into a PowerShell Terminal. You may need to press Enter at the end. A file with your computer info will be saved to your Downloads folder and titled: LTTForumsComputerInfo.txt
    Spoiler
    $UserPath = $env:USERPROFILE
    # Make sure we don't jack up formatting
    $PSDefaultParameterValues['out-file:width'] = 360
    $CurrentTimeUTC = Get-Date ([datetime]::UtcNow) -UFormat %H%M
    $CurrentDateUTC = Get-Date ([datetime]::UtcNow) -UFormat %D
    $ReportBanner = "################### Report run " +
    $CurrentTimeUTC + " " + $CurrentDateUTC +
     " UTC ###################"
    # Collect some hardware info
    $UEFIBanner = "`n################### Firmware/BIOS Information ###################"
    $UEFIInfo = (Get-CimInstance Win32_BIOS | Format-List -Property SMBIOSBIOSVersion,Manufacturer,Name,Version| Out-String).Trim()
    $ProcessorBanner = "`n################### Processor(s) ###################"
    $Processor = (Get-CimInstance Cim_Processor | Format-List | Out-String).Trim()
    $MotherboardBanner = "`n################### Motherboard ###################"
    # Specify Properties to avoid including Serial Numbers and save space
    $Motherboard = (Get-CimInstance -ClassName Win32_baseboard | Format-List -Property Manufacturer,Model,Name,SKU,Product | Out-String).Trim()
    $RAMBanner = "`n################### Memory Information ###################"
    $RAMInfo = (Get-CimInstance -ClassName win32_PhysicalMemory | Format-Table Manufacturer,Banklabel,
    ConfiguredClockSpeed,Devicelocator,@{Label="Capacity (GB)"; Expression={($_.Capacity)/1GB};Align="center"} -Autosize | Out-String).Trim()
    $GPUBanner = "`n################### Connected GPU(s) ###################"
    $GPUInfo = (Get-CimInstance -ClassName win32_VideoController | Format-List -Property Name,Status,DeviceID,CurrentBitsPerPixel,
    CurrentHorizontalResolution,CurrentRefreshRate,CurrentScanMode,CurrentVerticalResolution,MaxRefreshRate,MinRefreshRate,
    VideoProcessor,AdapterCompatibility,DriverDate,DriverVersion,VideoModeDescription | Out-String).Trim()
    $MonitorBanner = "`n################### Connected Displays ###################"
    $MonitorInfo = (Get-CimInstance win32_desktopmonitor | Format-Table Name,DeviceID,MonitorManufacturer,DisplayType -Autosize | Out-String).Trim()
    
    # Get DirectX Applications and their respective GPU settings
    # Helps troubleshooting multi-GPU systems with iGPUs
    $DXGPUBanner = "`n################### Apps with GPU Prefrences Assigned ###################"
    $RegKeyPath = "HKCU:\SOFTWARE\Microsoft\DirectX\UserGpuPreferences"
    $AppsGPUSettings = ((Get-ItemProperty -LiteralPath $RegKeyPath).psobject.Properties |
    Where Name -NotIn PSChildItem, PSPath, PSProvider, PSDrive, PSParentPath | Where Name -Match "\.exe$" |
    Select Name, Value | Out-String).Trim()
    # Sanitizes to remove usernames, but keep driver letter where apps are installed
    ForEach ($App in $AppsGPUSettings)
    {
        $App.Name = (Split-Path $App.Name -Qualifier) + "  " + (Split-Path $App.Name -leaf)
        $App.Value
    }
    
    # Check for Plug & Play devices with issues
    $PnPBanner = "`n################### Devices That May Need Attention ###################"
    $PnPDeviceIssues = (Get-CimInstance -Class Win32_PnPEntity |
    Where-Object {$_.Status -ne "OK"} |
    Format-Table $result -Autosize | Out-String).Trim()
    
    # Gather info on connected PCIE devices
    $pciBanner = "`n################### PCIE Devices ###################"
    $pciStats = (Get-CimInstance Win32_Bus -Filter 'DeviceID like "PCI%"' |
    Get-CimAssociatedInstance -ResultClassName Win32_PnPEntity | Where-Object {$_.DeviceID -Match 'PCI*'} |
    foreach {
        $properties = (Invoke-CimMethod -MethodName GetDeviceProperties -InputObject $_).DeviceProperties
        # Request Connection Properties from Cim
        [pscustomobject][ordered]@{
          Name = $_.Name
          CurrentLinkWidth   = ($properties | Where-Object {$_.KeyName -eq 'DEVPKEY_PciDevice_CurrentLinkWidth'}).Data
          CurrentLinkSpeed   = ($properties | Where-Object {$_.KeyName -eq 'DEVPKEY_PciDevice_CurrentLinkSpeed'}).Data
          MaxLinkWidth       = ($properties | Where-Object {$_.KeyName -eq 'DEVPKEY_PciDevice_MaxLinkWidth'}).Data
          MaxLinkSpeed       = ($properties | Where-Object {$_.KeyName -eq 'DEVPKEY_PciDevice_MaxLinkSpeed'}).Data
          ExpressSpecVersion = ($properties | Where-Object {$_.KeyName -eq 'DEVPKEY_PciDevice_ExpressSpecVersion'}).Data
            } |
        # Remove unecessary devices
        Where MaxLinkSpeed
      } | Sort -Property Name | Format-Table -Autosize | Out-String).Trim()
    
    # Check Event Viewer for Critical Issues in the Past 7 Days
    $EventViewerBanner = "`n################### Errors Pulled from Event Viewer ###################"
    $EventViewerLogs = (Get-WinEvent -FilterHashtable @{LogName='System'; Level=1,2,3; StartTime=(Get-Date).AddDays(-7)} |
    Where-Object {$_.ProviderName -eq 'Microsoft-Windows-WHEA-Logger' -or $_.LevelDisplayName -eq 'Critical' -or $_.Id -eq 1001} |
    Format-List | Out-String).Trim()
    
    # Get Currently Applied Power Plan
    $AppliedPowerPlanBanner = "`n################### Currently Applied Power Plan ###################"
    $AppliedPowerPlan = (PowerCfg.exe /GetActiveScheme).ToString()
    $AppliedPowerPlan = ( $AppliedPowerPlan.Substring(0,13) + $AppliedPowerPlan.Substring(57) | Out-String).Trim()
    Write-Output $ReportBanner,$MotherboardBanner,$Motherboard,$UEFIBanner,$UEFIInfo,$ProcessorBanner,$Processor,$RAMBanner,$RAMInfo,$GPUBanner,$GPUInfo,
    $MonitorBanner,$MonitorInfo,$DXGPUBanner,$AppsGPUSettings,$PnPBanner,$PnPDeviceIssues,$pciBanner,$pciStats,
    $EventViewerBanner,$EventViewerLogs,$AppliedPowerPlanBanner,$AppliedPowerPlan,"---END OF REPORT---" |
    Out-File -FilePath $UserPath\Downloads\LTTForumsComputerInfo.txt
    # Ensure copying and pasting doesn't miss the last command
    $null

     

  2. If you have Steam, download download 3D Mark. If you do not, download Unigine Superposition
  3. Run Firestrike or Superposition and save screenshots of the results (Windows Key + Shift + S) to your computer. We will use them later.
    💡 If possible, run the benchmarks on each setting and save results for each
  4. Download the Nvidia FrameView App ℹ️ Yes, it works on AMD cards
  5. Set the save location for FrameView to somewhere simple, like your Downloads folder
  6. If you're on a laptop, make sure you can press the benchmark hotkey in FrameView (you may need to change it to F10)
  7. With FrameView running, open one of the applications you've experienced issues in
    (If it's a game, start a game and begin playing)
  8. Press the benchmark hotkey to start recording in the background
  9. After ⌛ 30 seconds or so, press the benchmark hotkey again to stop recording data
    ⚠️ FrameView records substantial data, let it run for 30 seconds or a minute at most, that's all we need
  10. Close FrameView and go to the benchmark folder location
  11. Open the csv and make sure you have some data in it

 

✏️ MAKING YOUR NEW TOPIC/POST ✏️

ℹ️  If you want fast, expedient help from the volunteers, make a new topic in the Troubleshooting forum (not here in the Guides)
ℹ️
 Already have a post in Troubleshooting? Don't make a new topic! Just edit the original post and provide the information below:

Spoiler
  1. List out all the troubleshooting you've already completed (in a list not a paragraph). This post format is an example you could follow.
    ℹ️  You don't need to list out your computer components because attaching the PowerShell script output will provide that information
  2. Explain what the issue is.  |  Be specific by mentioning the exact games or applications you're experience issues with.  |  Don't write an essay.
    🎮 🕹️ Tell us (or take screenshots 😀) of what settings you are using in the applications/games you're experiencing issues with
    ✅  Good Example: I'm playing Apex Legends in DX12 using 1440p resolution in-game, with Texture Streaming Budget set to Insane and all settings set to High
    ❌  Bad Example:  I'm playing Apex Legends with a 1080p monitor.

    Tell us why you think it is an issue and give us history if you've made recent hardware changes, and tell us what those changes were.
    ✅ Good Example: "Apex Legends feels smooth on the menu screen, but when I get into a game, the mouse stutters and sometimes the screen freezes for a half-second."
    ❌ Bad Example:  "When I play games the FPS is low." OR "I should be getting more FPS."
    ✅ Good Example: "In Fortnite, CS:GO and Apex Legends my FPS are always below 60. But in Superposition 1080P Extreme, I score 30000."
    ❌  Bad Example:  "Games look bad and they look great on my friend's PC."
    ✅ Good Example:  "I recently upgraded my GPU from a GTX 1050 to an AMD 6700XT . I checked my game settings and they are the same, but FPS hasn't increased at all."
  3. 📎 Attach all the things! 📦
    In addition to a little blurb explaining what you've tried etc. your post should have the following attached:
    1. Attach LTTForumsComputerInfo.txt from your Downloads folder into your original post
    2. Benchmark screenshots (Firestrike or Unigine)
    3. Write a line like: Benchmark Results
    4.       Insert a Spoiler Box
            Paste all the benchmark screenshots you saved during the Collecting Data steps inside the Spoiler Box
    5. Game Settings screenshots
            If you don't want to have to write out what settings your games are on, take screenshots of the graphics settings
            Write a line of text like: Game Settings
            Insert a Spoiler Box
            Paste all the screenshots inside the Spoiler Box
    6. Nvida FrameView CSV hyperlink to File
            Upload the csv file to a file sharing site such as MediaFire, Mega etc.
      🎗️ Remember to insert the hyperlink to the FrameView data in your original post!

🛑🛑🫸 Replying to this post to get help❓ We see you! 👁️ Start a new topic please! 🛑🛑

 

📝 If you have questions about the guide itself, found a mistake, have recommendations, etc. reply below and let me know!

Edited by problemsolver
Last updated 17 Feb 2024: Added Nvidia Micro stuttering Hotfix driver

There is approximately a 117% chance I edited my post.

Please refresh before you reply.

Did a post solve your issue?  Please mark it as the solution!

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×