A while back, I lamented some graphics issues I experienced in OS X Lion. I didn’t have any hard evidence to support my claim, but my EVGA NVIDIA GTS 250 (512mb) card choked in OS X Lion after purring along seamlessly in Snow Leopard. I don’t require ungodly amounts of graphics processing horsepower, as reflected by my mid-range graphics card, but I play a few games. Not only were my KOTOR frame rates unacceptably low, but simple transition animations within OS X lagged badly.
Following the introduction of the OpenCL framework to OS X, and even more pointedly, the retirement of the PowerPC architecture, gone are the days of XBench providing reliable graphics-inclusive benchmarking for your hackintosh. Geekbench is a great tool for measuring CPU and RAM performance, but it falls short of providing discrete graphics benchmarking scores. Enter Cinebench, a cross-platform benchmarking utility that also happens to be free.
A reliable benchmark should compare graphics performance in OS X Lion to that of the same card in Windows, a far-away, glass-windowed land in which NVIDIA provides updated graphics drivers on a continuous basis. Before running the tests, let’s take a look at what Windows 7 says about my graphics card:
My machine is admittedly old, but she still gets a 5.9 (out of a total 7.9) Windows Experience Index:
Let’s get to the meat: here are the results of running a GPU-only Cinebench test on my EVGA NVIDIA GTS 250 (512mb) card in Windows 7 Professional SP1 (64-bit): 33.78 fps
What did the same test, run on the same hardware, produce in OS X?
The Cinebench test run in OS X Lion 10.7.3 produced a whopping 8.02 fps, compared to 33.78 fps in Windows 7 Professional SP1. This means that the card was performing 421% better in Windows than in OS X– all the hard evidence I needed to back up my theory that my card was sputtering in Mac OS. Note: You’ll notice that I removed the #6-ranked benchmark from this screenshot; it contains the result of my final test (you can find it below).
When I first noticed the performance decrease, I had read that some users who had selected a MacPro4,1 or MacPro5,1 model number in SMBIOS.plist were experiencing similar graphics issues. Some hackintoshers even created custom entries in the AppleGraphicsPowerManagement.kext internal plist file because the power management stepping doesn’t work OOB for NVIDIA cards.
Below is the SMBIOS.plist file I was stashing in /Extra; you will notice that because my machine most resembled an iMac, I was using the iMac11,3 identifier:
<!--?xml version="1.0" encoding="UTF-8"?--> Copyright SMBios by 7ender @ InMac.org Created with Champlist.app SMbiosvendor Apple Inc. SMbiosversion IM112.88Z.0057.B00.1005031455 SMboardproduct Mac-F2238BAE SMfamily iMac SMproductname iMac11,3 SMserial XA94601LDWZ
By my understanding, OS X dynamically chooses which set of graphics d rivers to load at boot time based on the model of Mac specified in SMBIOS.plist, rather than analyzing the graphics processing hardware itself. This is a bit of a programmatic shortcut, but it’s one that Apple can afford to take; Mac models and their corresponding GPUs are hard-coded and, theoretically, shouldn’t change following production of the computer.
The exception, of course, is the Mac Pro– users have long been able to upgrade the graphics card in the built-to-order Mac Pro, which means that OS X must boot more dynamically with regards to loading graphics drivers as long as SMBIOS.plist indicates that the machine is a Mac Pro. As such, rather than deleting or modifying AppleGraphicsPowerManagement.kext to reflect my graphics card’s unique stepping, I wondered if simply modifying SMBIOS.plist to reflect a Mac Pro model rather than an iMac would force OS X to load a more dynamic set of graphics drivers at boot time.
My modified SMBIOS.plist follows below; note that the SMSerial value must also change to accommodate the modified SMProductName value:
<!--?xml version="1.0" encoding="UTF-8"?--> Copyright SMBios by 7ender @ InMac.org Created with Champlist.app SMbiosvendor Apple Inc. SMbiosversion MP31.88Z.006C.B05.0802291410 SMboardproduct Mac-F42C88C8 SMfamily Mac Pro SMproductname MacPro3,1 SMserial G8819IY0XYK
I restarted, then ran Cinebench once more:
It’s not quite the 33.78 fps result that I was able to get in Windows, but the improvement from 8.02fps to 26.29fps indicates that I’m headed in the right direction here.
TL;DR: Modifying my SMBIOS.plist to reflect a Mac Pro (3,1) model rather than an iMac (11,3) improved the performance of my EVGA NVIDIA GTS 250 (512mb) graphics card by nearly 328%.
Note: I tried using the MacPro4,1 and MacPro5,1 models as well in order to test if I experienced the same performance drop-offs indicated in the aforementioned TonyMac86 post, but Lion refused to boot with either and I didn’t have the time or energy to figure out why.
The card still performs 22% worse in OS X than it does in Windows; I will need to investigate whether or not I can squeeze some more performance out of her by manually modifying the thresholds in AppleGraphicsPowerManagement.kext. Until then, though, I’m just happy that Lion’s GUI is running smoothly, and I can once more focus on becoming a Jedi. Now, if you encounter a similar systems malfunction in OS X Lion, don’t worry– you know a few maneuvers.