aka “Performance gaming on a low-end Macbook Pro laptop”
This post (which admittedly has nothing to do directly with being more productive on a Mac) was initially meant to be a lot more thorough and longer and cover step-by-step all the essentials on how to optimize old Macbook Pro with ATI X1600 graphics to run games well. Instead I decided just to focus on how to optimize it to run well one of the most demanding first player shooter multiplayer games right now, Battlefield: Bad Company 2 (BFBC2 or BC2). You can then, however you find appropriate, apply these methods on other games as well, even though I have to admit that the time to upgrade the “gaming rig” has now finally come. Besides, there’s been said a lot online on how to optimize performance of Bad Company 2, so let’s just see how to get it to be playable in our case. We’re talking only fairly decent 20-30 FPS here, low resolution of 1024×768, low settings, all while retaining good visual quality and what’s also of utmost importance: keeping the game responsive and snappy.
So “our” machine is the first-generation Macbook Pro with specs:
Macbook Pro 15″, machine model: MacBookPro 1,1 (62 months old)
CPU: Intel Core Duo 2.0 GHz (T2500 CPU)
RAM: 2 GB DDR2 667 MHz
Graphics: ATI Mobility Radeon X1600, 256 MB
OS: Windows XP SP2 via Bootcamp (version 3.2)
Game: Bad Company 2 and Bad Company 2 Vietnam (fully updated)
Definitely a vintage machine by today’s standards. Yet it could run first-person shooters very well so far. Call of Duty 4 and Modern Warfare 2 for instance both ran at around 40-70 FPS (tweaks applied of course) which is overall extremely satisfactory. In BC2, however, you will get varying levels of performance – generally all Vietnam maps will run next to spectacular without any drops in frame rate, while the regular maps run generally well, but experience FPS drops (to something below 20 FPS) in situations where there happen to be lots of trees (not the case with Vietnam though) or dust/snow/explosions on screen, like Valparaiso, Laguna Presa or Nelson bay. With the following enhancements applied you will get smooth performance in maps like Harvest day, Oasis, Isla Inocentes, Heavy Metal, Laguna Alta, Arica Harbor, Atacama desert and as previously mentioned, Vietnam maps (I btw recommend you get this expansion pack if you haven’t already because the difference in performance is substantial).
So here’s the brief summary on how to tweak BFBC2 performance for X1600 on MBP and an intro to what will be explained in a bit more detail further.
1. Check if the game is actually using both CPU cores (trivial but important)
2. Kill or pause unnecessary processes and tame the necessary ones, especially Punkbuster
3. Goes almost without saying but still – get the most suitable drivers for the X1600 GPU (in my case the latest and modded drivers from Catalyst 10.2 suite) and DirectX
4. Overclock the GPU, then overclock it a little more (we’ll see how to apply the extra GPU overclock to the game)
5. Optimize game settings (basically all low, except textures high, makes the game still look good)
6. Apply settings and other GPU tweaks using ATI Tray Tools (settings that work) and also Catalyst Control Center
7. Undervolt the CPU with RightMark CPU, max out the fans and lower the internal temps
8. Tighten RAM timings with Memset 4.1 (probably a very minor effect, but hey)
9. Lower DPC latency by updating other drivers (sound, wi-fi) and uninstalling unneeded devices, set timer with Time Resolution.
1. Force game to use max CPU
This first tweak is not a tweak really, it is a more of a workaround around the glitch of BFBC2Game.exe not using both CPU cores, at least on the very machine in question. To fix that, just launch the game in windowed mode or alt-enter to get from full screen to windowed mode and run Task Manager. There you can (will probably) see that the game is not using both cores at once, but switches from using one core to using the other. Just right click on the process BFBC2Game.exe and select “Set affinity”. Even though probably both CPUs (CPU 0 and CPU 1) are already selected (ticked out), just make sure they really are and click OK. This way the game will immediately start using both cores, and you will see the change in the usage monitor graph.
Sounds like a cheap trick, happens to be the most important one. Before I found out about THAT particular “method”, my in-game CPU usage was 60% with almost unplayable FPS. Now the CPU runs at 90-100%, the way it should anyway. I have to apply this “tweak” every time I launch a game.
2. Kill unnecessary processes and tame unruly processes, especially Punkbuster
Ok, now that we got the BFBC2 game running at its maximum, we have to assure it actually GETS the maximum possible processing power, so we have to look into other processes that are running on the system. At this point I have to mention that I’m using this WinXP volume strictly for gaming, so there are absolutely no unnecessary programs running in the background and potentially hogging the system. The system is clean, yet I still kill all the unnecessary processes via Task Manager (or rather kill them with a batch file). Examples are CCC.exe, MOM.exe, jusched.exe etc; all the stuff that does not need to be there while you are shooting folks in game. That is the easy part.
However, there are processes that you DO need for gaming, and therefore can’t kill, and they will hog up your CPU, if they are not tamed. One of them is Punkbuster. It will at random times use up 30-50% of your CPU, and of course you will see a FPS drop when that starts happening.
The trick is to get Punkbuster to use only the desired/acceptable % of CPU (and this is somewhere between 2% and 5%) while still assuring you don’t get kicked out of the game. We need two tools for that: Threadmaster with Threadmaster GUI and Process Explorer.
Install Threadmaster (even though it says it’s for Windows 2000 and Windows Server 2003) and Threadmaster GUI. Add the PnkBstrB.exe to blacklist and assign 3% CPU limit to it. Set 10 seconds sample time. Add BFBC2Game.exe to exceptions. You can add some other processes to blacklist as well – I also added “explorer.exe” to blacklist and assigned it 1% CPU. Save settings. Done.
To monitor if the limits are well in effect (while gaming of course), use Process Explorer. Open up processes in separate windows for BFBC2Game.exe and PnkBstrB.exe and minimize them. This way you won’t lose monitoring data once you exit the game and processes close. Since you’re doing these tweaks anyway, you’ll figure it out for yourself. To conclude: after a heavy session of gaming, PnkBstrB.exe should have an almost flat graph with only occasional spikes (peaking at 1-3 %). Despite that, larger spikes will probably occur in the time frame of the 10 seconds sample time. After that the unruly app will be tamed to the previously set limits. If you look at the process BCBF2Game.exe, it should have a graph with heavy usage around 95%, and that’s exactly what we are looking for here. If that is the case, well done.
The last suggestion concerning getting rid of unnecessary processes, is that you use Game Booster. It will put on hold some processes you’re probably not aware of. Just use it, even if benefits from using it are most probably minuscule.
3. Get latest graphic card drivers and latest DirectX
I’m using the latest Catalyst 10.2 legacy driver for X1600 (driver version 8.695.000, dated 10th feb 2010), downloaded from ATI, modded with Mobility modder. It does seem to give much better performance in Vietnam maps than the outdated Apple’s X1600 Boot camp driver, even though the old driver seems to load maps a bit faster. How to modify a 10.2 driver with Mobility Modder, is explained on the previous link.
I’m having latest DirectX 9.0c installed (files ending in *43.dll).
4. Overclock the GPU and use the trick to make the game use a higher clock
I’m overclocking the ATI Mobility X1600 in the Macbook Pro using ATI Tray Tools (ATT). I will not go into the process and details of overclocking, because it is well explained elsewhere. The point here is another: how to apply a higher GPU overclock so that BC2 game still remains stable. It happens that at higher clocks the game will freeze when it tries to load a map, and you’ll need to hard reset the laptop. The trick is to load the map at a lower clock and switch to a higher clock only when you are already in the game. That’s why you need to create at least two overclock profiles (say with lower and higher clocks) and assign hotkeys to trigger them. I am using a lower 445/522 (core/memory MHz) and a higher 465/522 clock and the latter is what the game still accepts without crashing. Even though by testing in ATT I can get to maximum 495/531 without artifacting, I cannot use this clock in the game because it freezes after a little while. However, as it’s a rule when overclocking, my clocks may not work for you (even if it’s the same machine) or, on the other hand, you can go even higher, so just do your own thorough testing.
And a little sub-tip: when you are switching clock speed in BFBC2, press ESC beforehand to get to the scoreboard screen, and only then do the switch. Otherwise if you try to switch mid-game, the game may freeze. And when a game on a map is over, switch to a lower clock before the next map starts loading.
5. Game settings
Edit the settings in settings.ini (in “/My Documents/BFBC2/” directory) like this, save the file and make it read-only.
Basically all settings except textures are set on low. You could, however, set soldiers and vehicles to medium or high without a performance drop. And, if you are really bothered by how water surfaces look, switch it to medium.
We are using RenderAheadLimit=0 here, which tells the game to use graphic driver settings, and we will set that driver value to 0 (instead of the default 3) in the next step with ATI Tray Tools.
6. ATI Tray Tools settings and tweaks (and to a very minor extent settings in Catalyst Control Center)
Antialiasing: Application-controlled (meaning no AA), no adaptive AA.
Anisotropic filtering: 2x, performance, no high AF /// we override the Application settings which tell the game not to use any AF – for some reason the performance with no AF, application controlled, is much worse than our setting.
Flip queue size: 0 /// Yes, set this to zero. It means the CPU will not render ahead any frames for the GPU. It just happens to give best results under the circumstances – increased responsiveness and frame speed even on graphically more demanding maps such as Laguna Presa, Oasis, Port Valdez etc.
Optimizations: Anisotropic filtering optimizations on.
Catalyst A.I.: disabled /// tested and having it set to low (standard) or advanced seems to produce additional input lag without cranking out any additional FPS. I am aware that the general recommendation is to set it to Advanced, but it’s not what works in my case.
Texture preference: High Performance /// seems to play a bit nicer than High Quality, not much of a difference, really.
Mipmap: set to Performance.
Other ATT settings (see pictures below):
Catalyst Control Center settings:
Disable Powerplay in CCC. After that you can exit CCC and kill CCC.exe and MOM.exe processes (as mentioned before).
7. Lowering the internal temperature and monitor it
Use RightMark CPU to undervolt the CPU and use Macfan to have the fans run at 6000 rpm when gaming. Monitor the temps using CPUID HWMonitor. My temps hit max 80C (CPU) and 77C (GPU – diode), which is supposedly acceptable.
My CPU voltages (stable, could go as low as 1.05V at 12x)
8. Try tightening RAM timings with Memset 4.1
It could supposedly give a very minor FPS boost, so I’m just using it. It makes me feel better at least. Download Memset here.
Default settings (left) and tweaked settings (right):
9. Lower DPC latency
Improve system responsiveness by lowering latencies. Measure with DPC Latency Checker (using V1.3.0)
You can lower latency by uninstalling the devices (in Device Manager) you don’t need for gaming – in my case those are: trackpad, iSight camera, ethernet, DVD drive and some others.
The next thing you can do is to update the drivers – I have updated wireless and sound drivers.
And another thing is to keep timer resolution to the minimum. Use Timer Resolution for that.
If you are connected via ethernet cable, then disable the wireless card. And vice versa. Wifi does seem to generate latency spikes though so go with ethernet when you can.
It’s definitely time for a hardware upgrade but you can (hopefully) have some more fun with your old machine, at least for a little while longer.