eGPU with OS X 10.9, NVIDA GPU, PE4L & TB adapter

A while ago I made an external GPU setup described here. Now I have replaced my Lenovo T430s laptop with a MacBook pro 13 retina (late 2013 model) and worked on getting the card to work under both Windows 7, Windows 8.1 and OS X. This post describes how to get the card working in OS X 10.9 (Maverick)

The setup used a Bplus PE4L, Sonnet Echo ExpressCard Pro Thunderbolt adapter and a NVIDIA GTX 760 graphics card. If you have a Thunderbolt enabled device I now recommend the AKiTiO Thunder2 as described in my post here.

Setup

  • Should already be installed, else use recovery to reinstall
  • Boot into OS X
  • Open the terminal
  • Edit the following Info.plist files using the “sudo nano {path/filename}” command
    1. /System/Library/Extensions/NVDAStartup.kext/Contents/Info.plist
    2. /System/Library/Extensions/IONDRVSupport.kext/Info.plist
    3. /System/Library/Extensions/AppleHDA.kext/Contents/PlugIns/AppleHDAController.kext/Contents/Info.plist
  • In each of the above files find each section starting with

     <key>CFBundleIdentifier</key>
    

    and add

     <key>IOPCITunnelCompatible</key>
     <true/>
    

    just before the corresponding closing </dict> of the section. Example of the modified /IONDRVSupport.kext/Info.plist is shown here. The CFBundleIdentifier section can be seen on line 45, 62 and 79 and their corresponding IOPCITunnelCompatible entries at 57-58, 74-75 and 91-92.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>BuildMachineOSBuild</key>
  <string>13A3014</string>
  <key>CFBundleDevelopmentRegion</key>
  <string>English</string>
  <key>CFBundleExecutable</key>
  <string>IONDRVSupport</string>
  <key>CFBundleGetInfoString</key>
  <string>2.4, Copyright Apple Computer, Inc. 2000-2012</string>
  <key>CFBundleIdentifier</key>
  <string>com.apple.iokit.IONDRVSupport</string>
  <key>CFBundleInfoDictionaryVersion</key>
  <string>6.0</string>
  <key>CFBundleName</key>
  <string>I/O Kit NDRV Support</string>
  <key>CFBundlePackageType</key>
  <string>KEXT</string>
  <key>CFBundleShortVersionString</key>
  <string>2.4</string>
  <key>CFBundleSignature</key>
  <string>????</string>
  <key>CFBundleVersion</key>
  <string>2.4</string>
  <key>DTCompiler</key>
  <string>com.apple.compilers.llvm.clang.1_0</string>
  <key>DTPlatformBuild</key>
  <string>5A11344p</string>
  <key>DTPlatformVersion</key>
  <string>GM</string>
  <key>DTSDKBuild</key>
  <string>13A3014</string>
  <key>DTSDKName</key>
  <string></string>
  <key>DTXcode</key>
  <string>0500</string>
  <key>DTXcodeBuild</key>
  <string>5A11344p</string>
  <key>IOKitPersonalities</key>
  <dict>
    <key>1</key>
    <dict>
      <key>CFBundleIdentifier</key>
      <string>com.apple.iokit.IONDRVSupport</string>
      <key>IOClass</key>
      <string>IONDRVFramebuffer</string>
      <key>IOMatchCategory</key>
      <string>IOFramebuffer</string>
      <key>IONameMatch</key>
      <string>display</string>
      <key>IOProbeScore</key>
      <integer>20000</integer>
      <key>IOProviderClass</key>
      <string>IOPCIDevice</string>
      <key>IOPCITunnelCompatible</key>
      <true/>
    </dict>
    <key>2</key>
    <dict>
      <key>CFBundleIdentifier</key>
      <string>com.apple.iokit.IONDRVSupport</string>
      <key>IOClass</key>
      <string>IONDRVFramebuffer</string>
      <key>IOMatchCategory</key>
      <string>IOFramebuffer</string>
      <key>IONameMatch</key>
      <string>display</string>
      <key>IOProbeScore</key>
      <integer>20000</integer>
      <key>IOProviderClass</key>
      <string>IOPlatformDevice</string>
      <key>IOPCITunnelCompatible</key>
      <true/>
    </dict>
    <key>3</key>
    <dict>
      <key>CFBundleIdentifier</key>
      <string>com.apple.iokit.IONDRVSupport</string>
      <key>IOClass</key>
      <string>IONDRVFramebuffer</string>
      <key>IOMatchCategory</key>
      <string>IOFramebuffer</string>
      <key>IOPCIClassMatch</key>
      <string>0x03000000&amp;0xff000000</string>
      <key>IOProbeScore</key>
      <integer>0</integer>
      <key>IOProviderClass</key>
      <string>IOPCIDevice</string>
      <key>IOPCITunnelCompatible</key>
      <true/>
    </dict>
  </dict>
  <key>OSBundleCompatibleVersion</key>
  <string>1.0.0b1</string>
  <key>OSBundleLibraries</key>
  <dict>
    <key>com.apple.iokit.IOGraphicsFamily</key>
    <string>1.1</string>
    <key>com.apple.iokit.IOPCIFamily</key>
    <string>1.1</string>
    <key>com.apple.kpi.iokit</key>
    <string>8.0.0</string>
    <key>com.apple.kpi.libkern</key>
    <string>8.0.0</string>
    <key>com.apple.kpi.mach</key>
    <string>8.0.0</string>
    <key>com.apple.kpi.unsupported</key>
    <string>8.0.0</string>
  </dict>
  <key>OSBundleRequired</key>
  <string>Safe Boot</string>
</dict>
</plist>
  • Type “sudo touch /System/Library/Extensions”
  • Wait a few minutes until the extension cache is rebuild. You can check the activity monitor the kext cache rebuild process, sort after CPU usage
  • Shutdown the laptop
  • Plug in eGPU setup with SW1 set to 1 and SW2 set to 2-3
  • Connect the eGPU to an external monitor and make sure the monitor is on
  • Boot into OS X
  • My GPU is already supported by OS X (NVIDIA GTX 760) so no driver installation needed
  • Change from mirroring the display to extending the desktop
  • You should now have a working setup, the internal screen is functional as is the external, but only the external screen is accelerated

Performance

I use Geeks3D GpuTest with everything standard settings except resolution which is set to 1440x900 windowed mode.

 FurMarkTessMark (X8/X8)GiMark
Internal screen (Intel HD 5100) - score69868631420
Internal screen (Intel HD 5100) - fps1111423
External monitor (NVIDIA GTX 760) - score5313747936734
External monitor (NVIDIA GTX 760) - fps881247112
Improvement761%1089%474%

Limitations

  1. The internal screen is not accelerated, only the external monitor. Using Optimus this should be possible, worked fine on my Lenovo T430s using Windows, I need to investigate this further.
  2. Only unplug the thunderbolt cable when the computer is off, else a kernel panic will occur.
  3. Need to power the GPU and laptop off before plugging the eGPU in and the monitor must be connected to the eGPU and powered on

References

Enjoyed this Content?

Help keep it free by sending a donation. You can also subscribe to various site feeds to get notified of new posts, follow me on social media, and more.

Related Posts