Contribute
Register

Intel Network adapters on OS X: Small Tree drivers

following mrjayviper's post as I too have tried these steps with the same results. also tried 3 different subsystem id, found during google search, also with no luck.

Thanks,
 
Hi all,
The 10g card is found and works! The performance is not super great compared to this machine running Linux. In one application (http://djv.sourceforge.net) the speed is comparable to what we get in Linux, but in pure copy speed, I see on OSX about 160 MB/s read, whereas on Linux I get around 550 MB/s read, which basically corresponds to the current storage setup. I am sure I need to tune some OSX kernel parameters.
Thanks again!

Hello.

I have exactly the same problem. I can't get better performance than 150-160MB/s over a 10G Fiberlane to my DS3615xs.
If i copy files from one SSD to an other the Performance is okay.
If i copy files user DSM (Graphical Interface for the Synology using a Browser) on my DS3615xs the Speed is about 500-800MB per Second - also okay.

So imho the bottleneck is the 10G-Network - But why. Who or what limits the Transfer-Speed.
Is there anybody out there (cool ... Pink Floyd) who can help?

Sorry for my english.....

thanks
 
etimacias, thanks for the pointer. I've now got this working on my X520-DA2 card.

FOLKS, PROCEED WITH CAUTION. THIS WILL WRITE TO THE CARD EEPROM AND INCORRECT USAGE COULD RENDER YOUR CARD USELESS. THESE STEPS ARE SPECIFIC TO MY INTEL X520-DA2 CARD ONLY. HOWEVER, WITH SOME WORK THEY CAN PROBABLY BE ADAPTED TO WORK ON MOST INTEL NETWORK CARDS.


First step, boot off Ubuntu 16.04 LTS Desktop CD, run terminal and the following commands.
http://www.ubuntu.com/download/desktop

TO LOCATE ethX:
ifconfig

TO BACKUP EEPROM (DO THIS!):
ethtool -e ethX raw on > ethX.bin

COMMAND WE NEED TO USE TO CHANGE OFFSET VALUES:
ethtool -E ethX magic 0x<device id><vendor id> offset 0x<offset> value 0x<value>

TO DETERMINE VENDOR, DEVICE AND SUBSYSTEM IDs:
lspci -nn -vvv | grep Ethernet
01:00.0 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01)
Subsystem: Intel Corporation Ethernet Server Adapter X520-2 [8086:7a11]
01:00.1 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01)
Subsystem: Intel Corporation Ethernet Server Adapter X520-2 [8086:7a11]


NOW, TO FIND THE RELEVANT OFFSETS!
Intel datasheet linked above states the following, but it doesn't seem to apply to my card:
PCIe Sub-System ID - Offset 0x08
Bits:15:0
Name:Sub System ID
Default: 0x0

By running the following command and eyeballing the offsets I've discovered that these are the two values on my Intel X520-DA2 card:
ethtool -e eth1 | less
"0x0320: 03 00 1f 00 00 00 00 2b 03 13 11 7a 86 80 a6 10"

So, if we start at offset 0x0320 you would count 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f for each pair of digits.
The values we need to change are 11 at 0x032a and 7a at 0x032b. We can remove the 0 to shorten to 0x32a and 0x32b

So, for an Intel X520-DA2 (8086:10fb), to set subsys ID of 0x000a we would run:
sudo ethtool -E eth1 magic 0x10fb8086 offset 0x32a value 0x0a
sudo ethtool -E eth1 magic 0x10fb8086 offset 0x32b value 0x00
sudo ethtool -E eth2 magic 0x10fb8086 offset 0x32a value 0x0a
sudo ethtool -E eth2 magic 0x10fb8086 offset 0x32b value 0x00

In order to allow the ethtool to write to the EEPROM you need the magic value specific to your card, which is: 0x<device id><vendor id>
The command below will show these values:
lspci -nn -vvv | grep Ethernet
NOTE these are not the Subsystem values, they are the device and vendor IDs, in this case 10fb and 8086.
Here's a useful reference:
http://pci-ids.ucw.cz/read/PC/8086

Reboot and done! :headbang:

View attachment 185753View attachment 185754

Thanks for the info. Section 6.1 of 82599 data sheet says that word address 0x06 stores a word pointer to the PCIe
general configuration table. This is 0x18d on my 520-DA2. Times 2 gives the byte address of PCIe configuration area
you printed above (section 6.3.5). The MAC address following the device ids confirms the correct location.
 
Last edited:
Hello.

I have exactly the same problem. I can't get better performance than 150-160MB/s over a 10G Fiberlane to my DS3615xs.
If i copy files from one SSD to an other the Performance is okay.
If i copy files user DSM (Graphical Interface for the Synology using a Browser) on my DS3615xs the Speed is about 500-800MB per Second - also okay.

So imho the bottleneck is the 10G-Network - But why. Who or what limits the Transfer-Speed.
Is there anybody out there (cool ... Pink Floyd) who can help?

Sorry for my english.....

thanks
There are a whole bunch of things one can do on Linux to speed things up
http://timetobleed.com/useful-kernel-and-driver-performance-tweaks-for-your-linux-server/

I don't know how to do it on osx
 
Okay I think I get it now. So the first personality matches the device, sets the fake properties, and attaches to FakePCIID.kext. Then the second personality tells it which other kext to attach? In this second personality, should it match with the real device-id or the fake injected one?

CFBundleIdentifier specifies the name of the driver to load
IOClass is an arbitrary label

I renamed my kext FakePCIID_Intel_i211.kext and here is the plist with the added personality. It's still not working. I have RM,subsystem-id as a string, because I'm not sure how to translate 0x0B to data type.

i211 is supported by AppleIGB. I just installed the driver directly from multibeast pkg file. Works like a charm.

Ok, boot time kernel panic, had to remove AppleIGB.
 
Last edited:
etimacias, thanks for the pointer. I've now got this working on my X520-DA2 card.

FOLKS, PROCEED WITH CAUTION. THIS WILL WRITE TO THE CARD EEPROM AND INCORRECT USAGE COULD RENDER YOUR CARD USELESS. THESE STEPS ARE SPECIFIC TO MY INTEL X520-DA2 CARD ONLY. HOWEVER, WITH SOME WORK THEY CAN PROBABLY BE ADAPTED TO WORK ON MOST INTEL NETWORK CARDS.


First step, boot off Ubuntu 16.04 LTS Desktop CD, run terminal and the following commands.
http://www.ubuntu.com/download/desktop

TO LOCATE ethX:
ifconfig

TO BACKUP EEPROM (DO THIS!):
ethtool -e ethX raw on > ethX.bin

COMMAND WE NEED TO USE TO CHANGE OFFSET VALUES:
ethtool -E ethX magic 0x<device id><vendor id> offset 0x<offset> value 0x<value>

TO DETERMINE VENDOR, DEVICE AND SUBSYSTEM IDs:
lspci -nn -vvv | grep Ethernet
01:00.0 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01)
Subsystem: Intel Corporation Ethernet Server Adapter X520-2 [8086:7a11]
01:00.1 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01)
Subsystem: Intel Corporation Ethernet Server Adapter X520-2 [8086:7a11]


NOW, TO FIND THE RELEVANT OFFSETS!
Intel datasheet linked above states the following, but it doesn't seem to apply to my card:
PCIe Sub-System ID - Offset 0x08
Bits:15:0
Name:Sub System ID
Default: 0x0

By running the following command and eyeballing the offsets I've discovered that these are the two values on my Intel X520-DA2 card:
ethtool -e eth1 | less
"0x0320: 03 00 1f 00 00 00 00 2b 03 13 11 7a 86 80 a6 10"

So, if we start at offset 0x0320 you would count 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f for each pair of digits.
The values we need to change are 11 at 0x032a and 7a at 0x032b. We can remove the 0 to shorten to 0x32a and 0x32b

So, for an Intel X520-DA2 (8086:10fb), to set subsys ID of 0x000a we would run:
sudo ethtool -E eth1 magic 0x10fb8086 offset 0x32a value 0x0a
sudo ethtool -E eth1 magic 0x10fb8086 offset 0x32b value 0x00
sudo ethtool -E eth2 magic 0x10fb8086 offset 0x32a value 0x0a
sudo ethtool -E eth2 magic 0x10fb8086 offset 0x32b value 0x00

In order to allow the ethtool to write to the EEPROM you need the magic value specific to your card, which is: 0x<device id><vendor id>
The command below will show these values:
lspci -nn -vvv | grep Ethernet
NOTE these are not the Subsystem values, they are the device and vendor IDs, in this case 10fb and 8086.
Here's a useful reference:
http://pci-ids.ucw.cz/read/PC/8086

Reboot and done! :headbang:

View attachment 185753View attachment 185754

I used this a guide to mod my X540-T2 EEPROM in my MacPro5,1 (mid 2010)
shows up as:
Code:
Vendor ID: 0x8086
Device ID:    0x1528
Subsystem Vendor ID: 0x8086
Subsystem ID: 0x000a
SmallTree-kext is loaded, card shows up fine in "System Info" and "SysPrefs/Network", 10GBaseT FD link...also on the switch I get 10G PHY... but only seem to get top-gigabit speeds.
Checked cables
My "Macintosh SSD" does 700MB/s write, 1200MB/s read (so that's not the bottleneck)
Moved MP next to 10G-Switch, with short Cat6a... all the same.
Any ideas what could have gone wrong? Any advice/guidelines in further troubleshooting?

Don't have any other 10G NICs to test with in the MP (only have X710-DA2's, Mellanox ConnectX-2's and Tehuti3040)

EDIT: UPDATE: those speeds seem only low when using "smb://", when I use "cifs://" I get double the speed...
When I use "afp://" though, I get the full potential of my storage (through 4 switches :) write:733MB/s; read: 1039,5MB/s)
 
Last edited:
Bubez: Care to elaborate any more on the findings for the EEPROM error? I do not have enough posts to PM.

I am getting a similar error to yours with my Intel Pro/1000 PT Quad 82571GB card (0x10a4) after flashing the subsystem id. The card still works correctly in Ubuntu, but gives the following error on boot in OS X:

Nov 24 12:21:52 xserve1 kernel[0]: b5d0f0 probe: Invalid EEPROM 0x000a 0x10a4 0xfb78 0xffff
Nov 24 12:21:52 xserve1 kernel[0]: b4d0f0 probe: Invalid EEPROM 0x000a 0x10a4 0xfb78 0xffff
Nov 24 12:21:53 xserve1 kernel[0]: b4d0f1 probe: Invalid EEPROM 0x000a 0x10a4 0xfb78 0xffff
Nov 24 12:21:54 xserve1 kernel[0]: b5d0f1 probe: Invalid EEPROM 0x000a 0x10a4 0xfb78 0xffff

SmallTree driver does not load by default, and gives no warnings or errors when manually loaded.

System profiler shows:

ethernet:
Type: Ethernet Controller
Driver Installed: No
MSI: No
Bus: PCI
Slot: Slot-2@5,0,1
Vendor ID: 0x8086
Device ID: 0x10a4
Subsystem Vendor ID: 0x8086
Subsystem ID: 0x000a
Revision ID: 0x0006
Link Width: x4
Link Speed: 2.5 GT/s

(plus three more for the other ports - 4 port card)
 
Hi guys,

thanks to Squuiid I got my x520-DA2 working by altering the subsys ID via Linux.
I get speeds of

write: ~270mb/s
read: ~300mb/s

to an SSD in the NAS.

Any ideas on how to better the performance?

Cheers,
shinokubo
 
Hi guys,

thanks to Squuiid I got my x520-DA2 working by altering the subsys ID via Linux.
I get speeds of

write: ~270mb/s
read: ~300mb/s

to an SSD in the NAS.

Any ideas on how to better the performance?

Cheers,
shinokubo

Try confirming whether it's the network itself that's slow using something like iperf3. if so, try enabling jumbo frames and removing flow control. This is in Network Preferences->Advanced->Hardware... configure Manual, increase MTU, and put Duplex on "full-duplex" without flow-control (this may not help, but it's worth a try). once you get iperf3 up to ≥9gbps, then it's likely something other than network performance that's limiting your transfer speeds. If so, you can try multichannel transfer applications like bbcp, fdt.jar, or file transfer program like filezilla with multiple concurrent transfers to see if you get faster file transfers.

Thanks Squiid, excellent post... my X520-DA2 is working great after following your instructions.
 
Hi. I've got a hack with an old Intel PCI 82541 (8086:107c), confirmed as visible with that ID by DPCIManager. There is a hnak driver for that, but it crashes after sleep. Since I'm trying to use this instead of the builtin Atheros that crashes occasionally under heavy load, that's a nonstarter.

One of the SmallTree drivers linked by DarkVoid, SmallTreeIntel8254x-3.4.32, claims support for this board. (His link doesn't work for me, but this does: https://www.small-tree.com/support/download_category?cat_id=5 .) But it won't work because my card's "Sub Dev" (as listed in DPCIManager) is 1376, and the SmallTree kext is looking for 0x000a.

If I understand this right, the solution is a newish kext called Rehabman's FakePCIID. I've downloaded this from bitbucket. However, looking at the readme, it seems I need to understand DSDT patch syntax, something I've assiduously avoided by buying a MB that can be used DSDT-free (GigaByte 8-series), and then put the relevant info into the plist-only second kext.

Please help me avoid spending many hours digging into this, by telling me what I'd need to put in the plist of the second kext.

...hm, looking at the Feb. 16 kexts, I see FakePCIID_Intel_GbX. I assume this won't work as it's for the 10GbE cards, but at a guess, changing one number in there would do the trick, right?

Thanks!!!

I recently acquired one of these old PCI cards and am now trying to get it working under Sierra. After reading this thread, I didn't see where Wundorn had been successful, so I'm bringing this topic up again.

After installing Sierra, I had used MultiBeast v9.0.0.0 to install "7/8/9 Series USB Support," which pulls in v1.3.2 (a.k.a. v2016-0820) of FakePCIID.kext and FakePCIID_XHCIMux.kext. These kexts resided in /Library/Extensions, so I downloaded RehabMan-FakePCIID-2016-0820.zip from github, pulled out FakePCIID_Intel_GbX.kext, added "0x107c8086" to the IOPCIPrimaryMatch string in its Info.plist, and placed the edited kext in /Library/Extensions. Then I ran Kext Utility v2.6.6 to repair the permissions and update the cache files.

After rebooting, I checked to see if the kext loaded; it had not. I tried manually loading it via:

$ sudo kextload /Library/Extensions/FakePCIID_Intel_GbX.kext

but kextstat revealed that it had still not loaded (text trailing "(1.3.2)" omitted):

$ kextstat | grep FakePCI
37 1 0xffffff7f80c82000 0x8000 0x8000 org.rehabman.driver.FakePCIID (1.3.2)
38 0 0xffffff7f80c8a000 0x3000 0x3000 org.rehabman.driver.FakePCIID.XHCIMux (1.3.2)

and I found the following at the end of dmesg:

$ sudo dmesg | tail
Notice - new kext org.rehabman.injector.FakePCIID-Intel-GbX, v1.3.2 matches prelinked kext but can't determine if executables are the same (no UUIDs).

I'm not sure where to go from here. This error has popped up for other people using other kexts on several versions of Mac OS X, but there is not a clear solution to the problem. Perhaps I should be using different programs to correct the kext permissions and rebuild the cache?

Thanks for any help anyone can provide.
 
Back
Top