GPU not at 100%: how to tell a CPU bottleneck from something else

Low GPU usage has at least eight explanations and only one of them is a CPU limit — here is the order to rule them out, starting with a free experiment that settles it in two minutes.

Your overlay says the graphics card is at 60% and the frame rate is lower than you expected. Somebody tells you it is a CPU bottleneck, and you start reading about processors.

Maybe. But "GPU below 100%" has at least eight explanations, most cost nothing to check, and a real CPU limit is only one of them. This page rules them out one at a time.

First, what that percentage actually is

GPU usage is the share of time the GPU had work in flight — not how hard it worked. A card idling through a trivial workload can read 100% because something was always queued, and a card doing everything asked of it can read 60% because the queue kept running dry. A first clue and nothing more: on its own it cannot tell you what the GPU was waiting for.

The experiment that settles it in two minutes

Do this before anything else, because it is free and decisive.

  1. Note your frame rate in a repeatable scene.
  2. Drop the resolution substantially — not one step, a big step.
  3. Measure the same scene again.

If the frame rate barely moves, the GPU was not your limit. You removed most of its work and got nothing back, so something else was setting the pace.

If the frame rate rises roughly in proportion, you were GPU-limited after all and the usage figure was misleading you.

That is the whole diagnosis, and it needs no tools. Everything below identifies what that is.

The cheap explanations, in order

1. You are at a cap

If the number you land on is exactly your refresh rate, your in-game frame limit, a driver-side limit or a latency feature's automatic cap, nothing is bottlenecked — the GPU is idle because you told it to stop. A false alarm, and ten seconds to rule out.

2. The card is being held back, not left idle

A GPU that is not boosting is not the same as a GPU that has no work. Under load the driver itself will name why it is holding clocks down: thermal protection, a power limit set below stock, an application that asked it to slow down, or a PCIe power connector missing or not seated. The last is a card that refuses to boost until it is plugged in properly — a cable problem, not a setting. The stutter scan asks the driver this under a short load and reports the reasons it named.

3. The game was restricted to part of the processor

Invisible unless you go looking. A narrowed affinity mask or a default CPU set on the game process means everything the game does has to fit on those processors while the rest of the machine sits idle. Sources include an old optimizer script, a start /affinity shortcut copied from a forum, or a process tool configured once and forgotten.

How you tell: Task Manager → Details, right-click the game, Set affinity. If it is not every processor, that is your answer — widen it there, or remove the rule in whatever tool wrote it.

4. The game is running on the wrong graphics card

On a laptop, or a desktop with integrated graphics enabled, a game can end up rendering on the weaker adapter. The discrete card then reports low usage honestly: it is not doing anything. Which GPU a game runs on covers removing a per-game preference.

5. The PCIe link is narrower than it should be

Worth checking once, and worth keeping in perspective. Half the lanes at the same generation can be the board's own design — an M.2 drive fed from the processor's lanes splits the graphics slot — and halving the link does not halve the frame rate; how much it costs on your card has not been measured here. The case worth acting on is a link that trained lower than both ends support: a riser, a marginal contact, a lane that did not come up. Reseat the card.

6. The GPU is waiting for data, not for the CPU

A frame that is not assembled yet leaves the GPU idle, and the reason may be a slow asset read, a shader being compiled, or pages coming back from disk. In a usage graph this looks identical to a CPU limit and is a different problem — see sudden FPS drops in games.

7. Something else has the core the render thread needs

Total CPU usage is the wrong number here. One fully saturated core on an eight-core machine reads as a modest total, and a background task holding that core queues ahead of the render thread.

What a real CPU limit looks like

When the list above is exhausted, the remaining case is genuine and has a recognisable shape:

A capture also records how much of the run was spent blocked inside the presentation call — that is GPU and queue pressure, and the higher it is, the less any change in average FPS says about anything on the CPU side. Reading the benchmark covers the rest.

What to do about a real CPU limit

The honest answer is that this is mostly not a software problem, and pages that pretend otherwise are how people end up with registry lists.

What will not help

Disabling simultaneous multithreading or efficiency cores: the numbers behind that advice come from sources that published no method, so you would trade known multi-core capacity for an unverified gain. Kernel memory-management values and timer-resolution overrides: refused outright here, unmeasured everywhere. Memory cleaners: on a machine that is not short of memory, freeing more changes nothing measurable.

Related

Playing CS2? Which launch options still do anything, and where the frames really are in the video menu: How to fix CS2 stutter and low FPS: a measured checklist

w0a changes no Windows setting until you ask it to, and before a tweak writes a new value it saves the old one. Get notified

Did this page help?

What was missing, or what did not work? We read every one of these.

If this page did not solve it, write to us — say which article you read, and we will fix the article.