It's all about PCI latency. That's not a piece of conventional wisdom, mind you, any more than it's something you hear people say. At least, I've not heard anybody say it before, but maybe that says more about the circles in which I travel than about the locution itself. I don't know. All such silly babbling aside, trust me: it's all about PCI latency. I recently solved more than a dozen issues I've had with my PC ever since its inception. What's more interesting still is that some of these issues have plagued me for years, across several different machines. I think I finally understand the cause, and I'm as pleased as I am surprised about it. Thus, I'm writing in the hope that others may benefit from my struggles.
The list of problems I've just solved is a long one, but they bear some similarities to each other. All of them have to do, in one way or another, with "stuttering", "hitching", pauses, and so forth. For years, I've had my system evince various and infrequent glitches when playing back MP3 files, QuickTime movies, etc. This is something you've probably all seen. You know how it goes: you're playing back a movie trailer, and the video or audio (or both) either repeats or comes to a stop for a brief instant. Maybe you're just playing MP3 files in the background, and your player stutters briefly when you launch a new application—this is the sort of thing I'm talking about. Prior to my recent troubles with my SB Live! sound card under Windows XP, which eventually drove me to upgrade to an Audigy 2 card, I never gave it much thought. I mean, lots of stuff is going on in the background in Windows, right? It just isn't reasonable to expect completely smooth playback... is it?
Frankly, it is. I just didn't know it. What finally provided the incentive to investigate further was the v1.3 patch for Battlefield 1942 (BF1942), a video game with which I've had a love/hate relationship since the day I bought it. The game as it shipped originally didn't work for beans with my SB Live! sound card. Even the v1.2 patch didn't help matters much. When I finally got tired of dealing with the problems, I upgraded to an Audigy 2 sound card. I hadn't upgraded the sound in my rig for several years, so I figured I was probably due anyway. Needless to say, I was grateful when that fixed all the problems with the sound in BF1942.
Unfortunately, I wasn't counting on my luck; i.e., lots of it, all bad. The developers released the v1.3 patch very shortly thereafter, which, naturally, screws Audigy owners (sigh). Seriously, lots of users with Audigy sound cards are reporting awful problems with the sound. For some it stutters or hitches; for others, certain sounds loop continuously without end; still others "enjoy" deafening waves of "white noise". Gee, that's some patch, huh? In my particular case, I had two serious problems with the v1.3 game: (1) I couldn't hear anything when it was right in front of me, and (2) the game hitched very frequently. I fixed the former problem by fussing around with my speaker settings, as I note elsewhere in my technical support tips for BF1942. I have finally fixed in excess of 90% of the instances of the latter problem by adjusting the PCI latency values for some of my system devices. Surprisingly, that has fixed a host of other niggling issues as well, which is why I'm writing this article.
The only remaining hitching problems I'm having with the game at the time of this writing are due to the way the game handles texture, sound, and network data. I know this because, for example, the game always hitches the first time I whip out a grenade, the first time I get really close to any given vehicle, the first time I get close to a given kind of tree, etc. This also happens the first time some sounds play. But once I've seen or heard the particular thing in question, it no longer hitches during in-game encounters with those things. Such symptoms typically indicate poor data-set management on the part of the developers. The game's sometimes-jerky network code is another developer failing, as I've got a fast, high-quality connection. In short, these things don't happen with any other game, and they didn't happen prior to the v1.3 patch, so the developers of BF1942 really need to clean up their engine. Please! The game is a lot of fun when it's working.
At any rate, what fixed the hitching problem was changing my PCI latency settings for my video, network, and sound devices. The BIOS for my motherboard, a Gigabyte GA-7VAXP, does not support any kind of PCI latency tweaking. Ok, that's not quite true. It does let me enable or disable a "PCI Delayed Transaction" option, an "AGP 3.0 Calibration" option, and so forth. But it doesn't let me set the default value for PCI latency as many other motherboards do; instead, the default value is hard-coded at 32—or so I'm told. In my estimation, that's a real mistake in light of what I've learned, though it isn't really a critical one. You see, regardless of what the default value is for PCI latency, your system devices are free to ignore it completely. Yes, that's right, folks: it doesn't matter how you configure PCI latency in the BIOS. Your system devices can set their own values anyway. Isn't that cute? No doubt computer-nerds far more familiar with the PCI specification are probably laughing at me, but I don't think it's very funny.
I discovered all of this after starting to experiment with a utility by the name of PowerStrip. As tweaking utilities go, I honestly didn't think much of PowerStrip until a few days ago. Sure, it allows you to overclock your video card, adjust your monitor timings and such, adjust PCI card settings, and perform a number of other tweaks. The reason I wasn't very impressed previously was because it provides only the most minimal features in any given area compared to other utilities. For example, I can use the Rage3D utility to tweak my ATI Radeon 9700 Pro video card in far more useful ways than PowerStrip supports. Similarly, I can use Rage3D, or several other utilities I've since found, to tweak my monitor's timing parameters and other settings. And while PowerStrip costs roughly $30 (US), Rage3D is free for the taking—though the author does ask for (and deserves in my view) donations. In short, PowerStrip is very much a general tool, which often means that more specialized utilities are preferable.
PowerStrip does one thing, however, that no other utility I've found does. To wit, it allows you to examine and override a number of parameters for the PCI communications bus as applied to each device in your system. The first time I ran PowerStrip, I discovered the likely source of my hitching problems: my video card's PCI latency was at 248, my network device's value was 128, and my poor Audigy 2 sound card was set at 32. In other words, the video card and network card could easily hog the PCI bus to the point whereat my sound card might not be able to keep up with the load. PowerStrip makes it a simple matter to set those values to 80, 32, and 64 respectively. I experimented around a bit, of course, but those values seem to work best for my system.
NB: | Because quite a few people have written me regarding how to use PowerStrip, I thought it was worth mentioning two things here. If you're having trouble tweaking the PCI latency values, don't worry, it's probably not your fault; the PowerStrip interface is utterly terrible in this regard. First, to be able to switch from one device to another, you need to look to the right of your video card's name. There are tiny scrollbar buttons there that allow you to select the device you want to tweak. Second, if you find that you can't actually change the latency values, you should look for a check box labelled "Read-only" and make sure it's unchecked. If you still can't find them, click here for a diagram that might help. |
I was happy when I found that almost all of my hitching problems with BF1942 had disappeared. I've been growing happier with this solution ever since, because of all the other problems it has fixed as well. For example, my ISP provides a free, one-year, radio-only subscription to the Rhapsody digital music service. I like listening to their classical music "stations" because they have zero commercials. I would gladly listen to the radio were there not so many obnoxious news updates, advertisements, and "talking heads" yammering away between tracks. Heck, I might even pay for it; ever since trying Rhapsody for the first time, I've thought seriously about signing up for their full package. It's a pretty neat service if you've got a good Internet connection.
All such praise aside, Rhapsody used to stutter from time to time. I had increased the network buffer size and all that kind of stuff, but it would still stutter in its playback when I launched certain applications or did certain other things with my system. Since adjusting the PCI latency values for my system devices, it hasn't stuttered once. I've even tested it by playing back QuickTime movies, copying files over the network, and letting Microsoft Visual C++ compile some of my code in the background. It doesn't stutter anymore, period. That's an amazing difference, as it used to stutter any time I opened a session of Windows Explorer. It doesn't do that anymore. That's a wonderful change. I can now listen to defect-free audio all day, it seems, without a single hitch, stutter, or pause.
Similarly, my email program no longer brings the whole system to a halt. Every once in a while when I launched my email client (viz., Eudora Pro v5.2), my whole system would simply freeze for a period of several seconds. I'm not sure precisely what the problem was, but I've always suspected the network because it always happened when the program is trying to connect to my ISP's email server. After making the adjustments with PowerStrip, my email program no longer freezes the whole system. Sure, the email client still sits there waiting to connect, but every other application continues to run smoothly. That's another minor but obvious change, and I find it as welcome as it is obvious.
To avoid redundancy, suffice it to say that I've seen all of my other hitching, stuttering, and pausing problems solved with QuickTime movies, Windows Media Player, MusicMatch JukeBox, all the web browsers that I use, and other applications as well. I've seen the occasional keyboard delays go away as well; i.e., I used to be able to type so fast that Windows sometimes lost my characters, but this doesn't seem to be an issue anymore. I've also seen improvement in a long-running keyboard problem. On occasion, the control keys on my keyboard seem to get stuck in the depressed position, though only logically not physically; i.e., the actual keys are not stuck, but the operating system thinks they're held down. I haven't had that problem occur since I made the changes with PowerStrip, and that's very unusual, as it happened previously quite often with Microsoft Word and Macromedia Dreamweaver.
I've seen almost a dozen other such problems go away as well since making the changes. The result of my changing the PCI latency values has been to give me a much smoother system to use. Though all the issues were individually quite small, solving them all in one fell swoop has suddenly made my daily usage of the computer night-and-day different. Nothing hitches anymore—well, save for some poorly implemented portions of the BF1942 game engine. Almost everything on the system runs as smoothly as it should. And all of this is definitely related to the changes I've made with PowerStrip. If I simply change the values back to their original settings, all of my problems come back to plague me.
Do you find all of this as amazing as I do, dear reader? To be clear: I'm not surprised that the PCI latency settings have such effects on the system as a whole. I have a background in engineering, so I have some knowledge of such things. There are two things, however, that I find very surprising: (1) that BIOS settings can be so freely ignored by individual devices, and (2) that manufacturers are providing such awful defaults with their hardware. I'm sure ATI has their card configure itself to a latency value of 248 so that they can avoid all kinds of technical support calls from persons whose machines can't keep up with the card at a more reasonable setting. But that utterly screws other users, and it does so in a way that isn't simple to diagnose or fix. How many users, after all, are intimately familiar with the PCI specification? How many users are computer-literate enough to go poking around in their BIOS or use PowerStrip properly? From my dealings with the larger community, I think the answer is "not many".
In retrospect, it angers me that when I've tried to work through such stuttering, hitching, and pausing problems in the past with various technical support persons, they've blamed interrupt sharing, my operating system, my drivers, the way the device is configured, my other software, and pretty much everything except their own device (and certainly not its PCI latency settings). Sure, I've had technicians tell me to try adjusting the PCI latency in the system BIOS, but that's utterly bloody useless; it doesn't matter what that's set to if the devices in your system configure themselves otherwise. The system BIOS on my wife's machine lets me tweak the PCI latency setting, but I've found exactly the same thing with her machine; i.e., it doesn't matter to what I set PCI latency in the BIOS, some of the cards in her machine configure themselves far differently anyway.
So, I've just slaughtered a host of annoying system bugs with the application of one simple utility. As you might well expect, I've already purchased my copy of PowerStrip, and that was $30 well spent. If only I had known about it sooner. If you've got any such problems with your system, I suggest you try it. It just might save you hours of time. Be sure to read all the tips and help stuff, however, for using bad PCI latency values can hang your machine pretty easily.
02/20/2003