Most of you reading this will likely have some idea of what “micro stutter” is. If not, you may have experienced it.
Forums everywhere seem to be full of everything from micro stutter horror stories to flat out denials of its very existence. I wasn’t sure what to think until I recently picked up a second GTX 260 to compliment my first. All seemed well initially – Crysis and 3Dmark Vantage both soaked up the extra GPU power without a second thought. But over time I began to notice a problem. It wasn’t really evident in Crysis or the like, running at 25 – 30 fps, but when I fired up titles that the cards could readily smash, like Mirrors Edge and Fallout 3, I began to notice weird “hitching” or “hiccupping”. A classic case of micro stutter.
If you haven’t been lurking on forums like above and haven’t a clue what I’m talking about allow me to explain. Micro stutter is an instance where the instantaneous framerate (the speed at which a frame is displayed vs. the previous frame) drops sharply and suddenly. In my case I observed it at roughly 2 second intervals and a quick FRAPs bench confirmed my observations. Although Crysis was running around 35 fps over the whole run, the instantaneous framerate was dropping to 15 – 20 fps or less at regular intervals. This rapid slowing of the framerate with a rapid recovery makes it seem as though the game is being momentarily paused every few seconds, which was more than enough to irritate the heck out of me.
Now there isn’t really a complete agreement on what causes micro stutter, but there are a few theories out there. The first is that the SLI or Crossfire connector bus is being saturated, forcing the data from the second card to travel over the higher latency PCI-e connection. Not all that far fetched, considering the sheer amount of data being tossed around between the cards. So I decided to do a little test. Crysis, minimum settings, 800 x 600 res, shouldn’t saturate the connector bus. But alas, the micro stutter was still present. I switch off SLI, no stutter.
The general idea of the bandwidth limitation theory above was that the “master” card was dropping particular frames (due to them arriving too slowly), causing an occasional frame to be displayed for too long, thereby filling in for the missing frames. Since no one seems to be able to agree on the root cause of this problem (and the bandwidth limitation theory is disputed), I won’t dive any deeper into this item.
Other than that another theory is that the frame timing is at fault. This theory says simply that rather than displaying your 40 frames evenly over the whole second, your system is displaying 35 frames in the first half and 5 in the second, which is still technically 40 fps. Unfortunately that is nothing like what I observed – in fact, I might classify that as “macro stutter”.
I think I’ll leave the theorizing at that and get into what I tried to fix the problem:
Adjusting max frames to render ahead: no effect
Vsync on vs. off: no effect
Triple buffering on vs. off: no effect
All the items that you think might have an effect do nothing. I also played around with AA and a few other things without any luck.
So I’ve decided to give up on fixing the problem myself for the time being and leave the second card on folding duty. But I’m not giving up on the problem in a greater sense, rather I have a favour to ask.
If you have a multi-gpu rig (or a single-gpu rig for that matter) and think you might be suffering from micro stutter, I have a little homework assignment for you:
1. Download the free version of FRAPS (http://www.fraps.com/download.php).
2. Install and launch the app.
3. Under the FPS tab, under “save detailed benchmark statistics” make sure only the Frametimes option is checked.
4. Leave fraps running and fire up a game, make sure you lower your settings to get as high a framerate as possible (makes the stutter easier to identify).
5. Start playing, at any time hit “F11”, do some stuff in the game for about a minute and hit “F11” again. Fraps will save your frametime results to its installed folder.
6. Open the results in your spreadsheet app of choice.
7. To make analysis really easy create an (n – (n-1)) delta equation (to find the difference between the current time and the last). If you’re using Excel look up the R1C1 reference style.
8. Place your delta equation in each cell in the column to the right of the frametime column. There should be an option in Excel to do a “formula paste” over the whole column.
9. Look at your results. Check for oddities. In my case the delta hovered around 30, then at several points it went 30, 40, 90, 30. That is the stutter right there. Going from 33 fps to 11 and back in a split second.
10. If you like, disable your multi-gpu arrangement (make sure to disable SLI/Crossfire altogether and not just for a particular app) Rerun the test. You should notice that the oddities are conspicuously absent when you perform the spreadsheet procedure.
With all that done post your results using the Disqus system or on the companion forum thread HERE.
I want to gather data on exactly what type of rig you run, so let’s use the following format:
Storage config (hard disks, SSD’s, etc.)
Other expansion cards (RAID, sound, etc.)
Graphics Driver version
Do you notice micro stutter subjectively?
So with all that said I’ll start things off with my rig:
Windows Vista Business x64
Intel e2180 @ 3.2 Ghz
6 gigs OCZ Platinum DDR2 @ 1 Ghz
XFX 680i LT
300 gig RAID-0 boot (one Seagate, one WD), 500 gig Seagate for storage
Sound Blaster Audigy 2 Value
2x GTX 260 216-core (one EVGA, one BFG)
Nvidia 185.65 beta
Do you notice micro stutter subjectively? Yes
My Micro Stutter test results in graph form (the y-axis is the frametime in ms, and the x-axis is the frame number):
Notice that both configs experience hitching in a way, but look at the delta between the normal and the peak of the stutter. The largest without SLI is around a 25 ms delta, with a relatively smooth lead up. The largest with SLI was about 70 ms with almost no lead up. Note that both tests used the same game with the same settings (minimum) on the same level in the same area with an almost identical test time, the only real difference was the SLI status.
Hopefully with this system in place we may be able to find a root cause, or at the very least pressure Nvidia/AMD to work on a fix. I also wanted to mention that if you can neither subjectively or objectively identify micro stutter and you run multiple GPUs, I really want you to submit the info above – it might help the rest of us figure out what the problem is with our setups.
So tell your friends, forum-mates, and whomever else you can think of with multi-gpu rigs to try the above test. I would love to see their results.