Situatie
On the surface, a bottleneck is an imbalance or limitation of hardware. For example if you have a really strong graphics card but not a strong processor, then the processor could be spending too much time working on game logic to get around sending render commands to the GPU. A tale tale sign is you’re running an application and it’s not performing as fast as it could be.
Though “as fast as it could be” is kind of hard to objectively say so. If you’re playing a game, for instance, and you want to make sure the video card is working as fast as it can, you can check benchmarks of that video card against the game you’re playing from review sites. Usually they run on the top-end hardware, lowering the potential of a bottleneck.
Bottleneck issues usually show themselves in mainly two ways
- The average performance isn’t as good as it should be
- The frame rate isn’t consistent most of the time
- Tools of the trade to figure out bottlenecks
GPU-z (https://www.techpowerup.com/gpuz/): This is useful for obtaining information about what’s going on in the GPU including clock speed, GPU load, and for some GPUs a performance cap reason. GPU-z also allows you to log data.
Task Manager: You can check out CPU load, system RAM usage, and tweak how many threads the application can use to further test. As of Windows 10 Fall Creator’s Update (1709), Task Manager includes a GPU usage section that can work as a substitute for GPU-z, although it’s less informative.
Performance Monitor (https://technet.microsoft.com/en-us/library/cc749249(v=ws.11).aspx): This is a tool built-in Windows that you can use to log data. I usually use this to log CPU usage since you can’t do this in Task Manager
FRAPS (http://www.fraps.com/): While it’s primary use is to monitor frame rate performance, it can also log frame times which can be useful for determining where performance drops.
- The kinds of bottlenecking
Since bottlenecks are usually the result of some issue with hardware, let’s go over the various root causes. If you suspect you’re having a bottleneck issue, consider the application you’re running or the hardware setup you have to determine the root cause.
- Maximum CPU loading
Symptom: All of the processor’s logical cores (or “threads”) are maxed out at 100%.
How to verify: Reducing the application’s processor affinity causes performance to tank linearly. i.e., If the application is maxing out 4 cores, disabling 1 reduces performance by about 25%.
How to fix: Upgrade the processor to something with more cores. While overclocking can help, it will not offer a lot of wiggle room.
Description: This is caused by the application needing so much of the processor’s time that it cannot send render commands to the GPU fast enough. For the most part, games will typically only process logic every so often on a fixed timer and logic often goes before graphics. So if the processor spends too much time processing the game logic, it doesn’t have enough time generating render commands. An example of this can be seen back in the days of 8-bit consoles. When too much action is going on the screen, the game slows down as the CPU needs more cycles to process logic before it can get to sending rendering commands.
Reliance on single core performance
Symptom: Either a few logical cores have high usage or the entire processor appears busy, but appears to flat line at a certain percentage.
How to verify: Reducing the application’s processor affinity does not cause performance to tank unless you really reduce the affinity. e.g., if the total processor load on say an 8 thread processor is only 60%, disabling one core does not affect performance at all.
How to fix: Increase the single core performance by either changing the processor with a higher IPC or increase the clock speed of the current processor
Description: This is caused by applications that cannot issue enough threads of work on average to saturate the processor. As a result, the processor can easily finish up the work but has to wait for the application to issue more threads. This can be caused by many things, usually due to over-reliance on synchronous software design.
Accessing storage
Symptom: Performance hiccups or outright drops for a few moments when moving around in the game’s environment. This is normally a problem in open-world games
How to verify: Go to different areas of the game, but do not backtrack (those areas are often left in RAM, so they load “instantly”). If you have a hard drive, you can hear it working while you play the game.
How to fix: This is most likely going to be an issue with the game being on slower storage media like hard drives. The easiest solution is to upgrade the storage to an SSD. If that’s not feasible, then defragging and having the defragger consolidate data should help. Windows’ built-in defragmenter should consolidate data.
Description: This is caused by the application needing something, but it hasn’t loaded it yet so it has to go to storage to retrieve it.
VRAM/RAM loading
Symptom: Performance starts off fine, but at some point it starts to stutter.
How to verify: Check if the VRAM/RAM usage is close to 100%
How to fix: For VRAM, lower resolution based settings (texture, shadow, screen) or turn off MSAA. For system RAM, get more RAM or close applications that you’re not using.
Description: Applications aren’t aware of how much actual RAM there is in the system, only the OS. As a result, when the application starts requesting more RAM and no more physical RAM is available, the OS starts evicting data from RAM onto storage. This takes a very long time in computer time and normally the application can’t do anything else while this is happening, causing hiccups.
Leave A Comment?