Jump to content

IntelLucy for the Intel X500 family


Mieze
 Share

12 posts in this topic

Recommended Posts

This project is dedicated to Lucy, my lovely little indoor tiger.

 

image.jpeg.d65e26727cde8528c4c7b72ae16f0afc.jpeg

 

IntelLucy is an open source driver for the Intel X500 family of 10 GBit Ethernet controllers.

 

 

Key Features of the Driver

  • Supports Intel X520, X540, X550 and 82598 Ethernet adapters.
  • Support for multisegment packets relieving the network stack of unnecessary copy operations when assembling packets for transmission.
  • No-copy receive and transmit. Only small packets are copied on reception because creating a copy is more efficient than allocating a new buffer.
  • TCP segmentation offload with IPv4 and IPv6.
  • Support for TCP/IPv4, UDP/IPv4, TCP/IPv6 and UDP/IPv6 checksum offload.
  • Large Receive Offload: TCP/IPv4 packet streams are identified by the NIC and reassembled to large packets for handover to the network stack eliminating the overhead of packet header processing.
  • Supports jumbo frames up to 9000 bytes (strongly recommended for 10 GBit/s operation).
  • Designed to work with High Sierra and above.
  • Supports Wake on LAN tagging.
  • Supports hardware VLAN (untested).
  • Support for Energy Efficient Ethernet (EEE) is planned for future releaes.
  • No need for hardware modifications anymore (used to be required for SmalltreeIntel8259x.kext).
  • Compatible with AppleVTD but also works fine with AppleVTD disabled.
  • The driver is published under GPLv2.

 

Current Status

  • IntelLucy has been successfully tested with Catalina, Monterey, Ventura and Sonoma and is ready for use in production systems starting with version 1.0.0.
  • Thanks to jumbo frame support, performance is much better than com.apple.DriverKit-AppleEthernetIXGBE.
  • VLAN support has been fixed and tested in version 1.0.0 and is fully working now.
  • I can't test Wake on LAN because I don't have an adapter with WoL support.

 

Tested Configurations

  • X520-DA1 with the following media:
    • Passive DAC cable: working
    • 10GBase-SR SFP+ modules: working
    • 1000Base-T SFP modules: working
  • X540-TA1: working (see note below).
  • X540-TA2: both ports working (see note below).

 

Known Issues

  • Manual media selection doesn't work. The link is always established with the highest data rate both link partners support, i.e. 10 Gbit/s if both endpoints support it, 1 Gbit/s if the link partner is a Gigabit device, etc. As DAC cables and fibre optics usually are fixed-speed devices, only RJ-45 ports are affected by this limitation.
  • Try to avoid media with flow control enabled as it might cause repeated connection drops due to transmitter hangs and serious performance issues.
  • For WoL to work you need 4 things:
    • An adapter which supports WoL (only a few X520 adapters support WoL).
    • A mainboard which supports WoL from an add-in card.
    • WoL must be enabled in the UEFI setup.
    • Proper ACPI tables for MacOS to support wakeup.

 

Installation

  • Use OpenCore to inject the driver:image.thumb.png.0088649e164819e57793cf572e4bd7e2.png

 

Getting the driver

 

Changelog

  • Version 1.0.3 (2024-04-17):
    • Disabled ASPM for the X520 adapters as it is broken and may case erratic behaviour.
    • Enabled ASPM on X540 and X550 provided they report ASPM compliance.
    • Fixed a link status reporting issue for RJ-45 ports (X540 and X550).
    • Removed support for 10 Mbit/s data rate (unsupported on X520 and X540).
    • Resolved a conflict between adaptive interrupt throttling and Receive See Coalescing.
  • Version 1.0.0 (2024-04-07):
    • Fixed relaxed ordering of PCIe transactions.
    • Fixed and tested VLAN support.
  • Version 1.0.0d9 (2024-03-27):
    • Improved transmit performance.
  • Version 1.0.0d6 (2024-03-20):
    • Added support for Intel 82598.
  • Version 1.0.0d5 (2024-03-19):
    • First public release.

 

IntelLucy configuration Parameters explained

The Info.plist file contains a section with configuration parameters ("Driver Parameters") which will be explained in the following section:

  • enableTSO4: Enables support for TCP segmentation Offload with IPv4. Using TSO4 the NIC receives large TCP/IPv4 packets from the network stack to be split up into smaller packets to be transmitted of the network. TSO4 is a major performance feature and required to achieve TCP transmission rates near wire speed.
  • enableTSO6: Enables support for TCP segmentation Offload with IPv6.
  • enableWakeOnAddr: Currently unused.
  • enableASPM: Enables Active State Power Management (ASPM) on X540 and X550.
  • rxBufferSize4k: Use 4KB receive data buffers instead of 2KB buffers.
  • rxCoalescing: Enabled the use of Receive Side Coalescing which is the receive side counterpart of TSO4. The NIC identifies TCP/IPv4 packets belonging to a TCP stream, coalesces them into large packets (up to 64KB) and hands them over to the network stack reducing header processing overhead. Enabling rxCoalescing enforces the use of 4KB receive buffers.
  • µsPollTime10G: Under heavy load receive and transmit interrupts are disabled and the NIC is polled periodically for packets waiting to be processed. This feature greatly reduces CPU load while operating at full speed. The polling period is given in µs and used when 10G Bit/s link speed is established.
  • µsPollTime2G: Same as µsPollTime10G but for link speed 2.5 Bit/s (X550 only).
  • µsPollTime5G: Same as µsPollTime10G but for link speed 5 Bit/s (X550 only)
  • µsRxItrTime: Interrupt throttling is important to achieve high data rates while keeping CPU load low. This parameter determines the minimum timespan between two receiver interrupts in µs. Values below 10 enable adaptive throttling.
  • µsTxItrTime: Same as µsRxItrTime but for the receiver interrupt.

 

 

 

Edited by Mieze
Update to version 1.0.3
  • Like 11
  • Thanks 2
Link to comment
Share on other sites

Long live Lucy!

 

Recent versions of macOS have native support for this family of controllers through DriverKit, so the target audience for this kext driver are AMD users and Intel users which cannot (or do not want to) enable VT-d.

Or did I miss something in the description which would indicate a benefit over com.apple.DriverKit-AppleEthernetIXGBE.dext?

  • Like 1
Link to comment
Share on other sites

Posted (edited)
1 hour ago, etorix said:

Or did I miss something in the description which would indicate a benefit over com.apple.DriverKit-AppleEthernetIXGBE.dext?

Yes, you did! Try to set an MTU of 9000 with com.apple.DriverKit-AppleEthernetIXGBE.dext. You'll notice that you can't because the maximum supported MTU is 2034 and that's a no-go for a 10 Gbit Ethernet adapter. Besides that Large Receive Offload is also not supported. 🤣

Edited by Mieze
  • Like 2
Link to comment
Share on other sites

Here are some benchmark test results comparing IntelLucy (V1.0.0d9) to com.apple.DriverKit-AppleEthernetIXGBE under Ventura. The test machine is the one with the MSI mainboard from my signature. AppleVTD is enabled in both test scenarios. The machine on the other side is my Ubuntu 22.04 LTS server. Both machines are equipped with an Intel X520-DA1 adapter.

 

First, give com.apple.DriverKit-AppleEthernetIXGBE a try. The MTU was set to 2034, the maximum value that com.apple.DriverKit-AppleEthernetIXGBE supports. Note that the IPv4 receive test fails due to the lack of proper jumbo frame support because the Ubuntu server uses jumbo frames.

laura@lucy ~ % iperf3 -w 384K -B 192.168.10.202 -c 192.168.10.32                     
Connecting to host 192.168.10.32, port 5201
[  4] local 192.168.10.202 port 49937 connected to 192.168.10.32 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   801 MBytes  6.72 Gbits/sec                  
[  4]   1.00-2.00   sec   805 MBytes  6.76 Gbits/sec                  
[  4]   2.00-3.00   sec   802 MBytes  6.73 Gbits/sec                  
[  4]   3.00-4.00   sec   799 MBytes  6.71 Gbits/sec                  
[  4]   4.00-5.00   sec   803 MBytes  6.74 Gbits/sec                  
[  4]   5.00-6.00   sec   873 MBytes  7.32 Gbits/sec                  
[  4]   6.00-7.00   sec   837 MBytes  7.02 Gbits/sec                  
[  4]   7.00-8.00   sec   798 MBytes  6.69 Gbits/sec                  
[  4]   8.00-9.00   sec   816 MBytes  6.84 Gbits/sec                  
[  4]   9.00-10.00  sec   798 MBytes  6.69 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec  7.94 GBytes  6.82 Gbits/sec                  sender
[  4]   0.00-10.00  sec  7.94 GBytes  6.82 Gbits/sec                  receiver

iperf Done.

laura@lucy ~ % iperf3 -w 384K -B 192.168.10.202 -c 192.168.10.32 -R
Connecting to host 192.168.10.32, port 5201
Reverse mode, remote host 192.168.10.32 is sending
[  4] local 192.168.10.202 port 49900 connected to 192.168.10.32 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  0.00 Bytes  0.00 bits/sec                  
[  4]   1.00-2.01   sec  0.00 Bytes  0.00 bits/sec                  
[  4]   2.01-3.01   sec  0.00 Bytes  0.00 bits/sec                  
[  4]   3.01-4.01   sec  0.00 Bytes  0.00 bits/sec                  
[  4]   4.01-5.01   sec  0.00 Bytes  0.00 bits/sec                  
[  4]   5.01-6.01   sec  0.00 Bytes  0.00 bits/sec                  
[  4]   6.01-7.00   sec  0.00 Bytes  0.00 bits/sec                  
[  4]   7.00-8.00   sec  0.00 Bytes  0.00 bits/sec                  
[  4]   8.00-9.01   sec  0.00 Bytes  0.00 bits/sec                  
[  4]   9.01-10.01  sec  0.00 Bytes  0.00 bits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.01  sec   454 KBytes   372 Kbits/sec    5             sender
[  4]   0.00-10.01  sec  0.00 Bytes  0.00 bits/sec                  receiver

iperf Done.

laura@lucy ~ % iperf3 -w 384K -B 2a01:c22:bc0d:2000::217 -c 2a01:c22:bc0d:2000::32
Connecting to host 2a01:c22:bc0d:2000::32, port 5201
[  4] local 2a01:c22:bc0d:2000::217 port 49902 connected to 2a01:c22:bc0d:2000::32 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   845 MBytes  7.08 Gbits/sec                  
[  4]   1.00-2.00   sec   841 MBytes  7.06 Gbits/sec                  
[  4]   2.00-3.00   sec   835 MBytes  7.01 Gbits/sec                  
[  4]   3.00-4.00   sec   841 MBytes  7.05 Gbits/sec                  
[  4]   4.00-5.00   sec   845 MBytes  7.09 Gbits/sec                  
[  4]   5.00-6.00   sec   820 MBytes  6.88 Gbits/sec                  
[  4]   6.00-7.00   sec   844 MBytes  7.08 Gbits/sec                  
[  4]   7.00-8.00   sec   842 MBytes  7.06 Gbits/sec                  
[  4]   8.00-9.00   sec   842 MBytes  7.06 Gbits/sec                  
[  4]   9.00-10.00  sec   847 MBytes  7.11 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec  8.20 GBytes  7.05 Gbits/sec                  sender
[  4]   0.00-10.00  sec  8.20 GBytes  7.05 Gbits/sec                  receiver

iperf Done.

laura@lucy ~ % iperf3 -w 384K -B 2a01:c22:bc0d:2000::217 -c 2a01:c22:bc0d:2000::32 -R
Connecting to host 2a01:c22:bc0d:2000::32, port 5201
Reverse mode, remote host 2a01:c22:bc0d:2000::32 is sending
[  4] local 2a01:c22:bc0d:2000::217 port 49904 connected to 2a01:c22:bc0d:2000::32 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  1.08 GBytes  9.27 Gbits/sec                  
[  4]   1.00-2.00   sec  1.08 GBytes  9.28 Gbits/sec                  
[  4]   2.00-3.00   sec  1.08 GBytes  9.28 Gbits/sec                  
[  4]   3.00-4.00   sec  1.08 GBytes  9.28 Gbits/sec                  
[  4]   4.00-5.00   sec  1.08 GBytes  9.28 Gbits/sec                  
[  4]   5.00-6.00   sec  1.08 GBytes  9.28 Gbits/sec                  
[  4]   6.00-7.00   sec  1.08 GBytes  9.28 Gbits/sec                  
[  4]   7.00-8.00   sec  1.08 GBytes  9.28 Gbits/sec                  
[  4]   8.00-9.00   sec  1.08 GBytes  9.28 Gbits/sec                  
[  4]   9.00-10.00  sec  1.08 GBytes  9.28 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  10.8 GBytes  9.28 Gbits/sec    0             sender
[  4]   0.00-10.00  sec  10.8 GBytes  9.28 Gbits/sec                  receiver

iperf Done.

Now it's IntelLucy's turn. On both machines, the Hackintosh and the Ubuntu server, MTU was set to 9000. Let's take a look at the test results:

laura@lucy ~ % iperf3 -w 384K -B 192.168.10.202 -c 192.168.10.32   
Connecting to host 192.168.10.32, port 5201
[  4] local 192.168.10.202 port 49428 connected to 192.168.10.32 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  1.09 GBytes  9.36 Gbits/sec                  
[  4]   1.00-2.00   sec  1.09 GBytes  9.38 Gbits/sec                  
[  4]   2.00-3.00   sec  1.09 GBytes  9.37 Gbits/sec                  
[  4]   3.00-4.00   sec  1.09 GBytes  9.39 Gbits/sec                  
[  4]   4.00-5.00   sec  1.09 GBytes  9.39 Gbits/sec                  
[  4]   5.00-6.00   sec  1.09 GBytes  9.38 Gbits/sec                  
[  4]   6.00-7.00   sec  1.09 GBytes  9.39 Gbits/sec                  
[  4]   7.00-8.00   sec  1.09 GBytes  9.36 Gbits/sec                  
[  4]   8.00-9.00   sec  1.09 GBytes  9.38 Gbits/sec                  
[  4]   9.00-10.00  sec  1.09 GBytes  9.36 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec  10.9 GBytes  9.38 Gbits/sec                  sender
[  4]   0.00-10.00  sec  10.9 GBytes  9.38 Gbits/sec                  receiver

iperf Done.

laura@lucy ~ % iperf3 -w 384K -B 192.168.10.202 -c 192.168.10.32 -R
Connecting to host 192.168.10.32, port 5201
Reverse mode, remote host 192.168.10.32 is sending
[  4] local 192.168.10.202 port 49430 connected to 192.168.10.32 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  1.15 GBytes  9.85 Gbits/sec                  
[  4]   1.00-2.00   sec  1.15 GBytes  9.88 Gbits/sec                  
[  4]   2.00-3.00   sec  1.15 GBytes  9.88 Gbits/sec                  
[  4]   3.00-4.00   sec  1.15 GBytes  9.88 Gbits/sec                  
[  4]   4.00-5.00   sec  1.15 GBytes  9.87 Gbits/sec                  
[  4]   5.00-6.00   sec  1.15 GBytes  9.88 Gbits/sec                  
[  4]   6.00-7.00   sec  1.15 GBytes  9.88 Gbits/sec                  
[  4]   7.00-8.00   sec  1.15 GBytes  9.88 Gbits/sec                  
[  4]   8.00-9.00   sec  1.15 GBytes  9.87 Gbits/sec                  
[  4]   9.00-10.00  sec  1.15 GBytes  9.88 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  11.5 GBytes  9.88 Gbits/sec    0             sender
[  4]   0.00-10.00  sec  11.5 GBytes  9.88 Gbits/sec                  receiver

iperf Done.

laura@lucy ~ % iperf3 -w 384K -B 2a01:c22:bc0d:2000::217 -c 2a01:c22:bc0d:2000::32                
Connecting to host 2a01:c22:bc0d:2000::32, port 5201
[  4] local 2a01:c22:bc0d:2000::217 port 49432 connected to 2a01:c22:bc0d:2000::32 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  1.07 GBytes  9.22 Gbits/sec                  
[  4]   1.00-2.00   sec  1.08 GBytes  9.24 Gbits/sec                  
[  4]   2.00-3.00   sec  1.07 GBytes  9.15 Gbits/sec                  
[  4]   3.00-4.00   sec  1.08 GBytes  9.27 Gbits/sec                  
[  4]   4.00-5.00   sec  1.08 GBytes  9.26 Gbits/sec                  
[  4]   5.00-6.00   sec  1.08 GBytes  9.26 Gbits/sec                  
[  4]   6.00-7.00   sec  1.08 GBytes  9.27 Gbits/sec                  
[  4]   7.00-8.00   sec  1.08 GBytes  9.27 Gbits/sec                  
[  4]   8.00-9.00   sec  1.08 GBytes  9.26 Gbits/sec                  
[  4]   9.00-10.00  sec  1.08 GBytes  9.24 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec  10.8 GBytes  9.24 Gbits/sec                  sender
[  4]   0.00-10.00  sec  10.8 GBytes  9.24 Gbits/sec                  receiver

iperf Done.

laura@lucy ~ % iperf3 -w 384K -B 2a01:c22:bc0d:2000::217 -c 2a01:c22:bc0d:2000::32 -R
Connecting to host 2a01:c22:bc0d:2000::32, port 5201
Reverse mode, remote host 2a01:c22:bc0d:2000::32 is sending
[  4] local 2a01:c22:bc0d:2000::217 port 49434 connected to 2a01:c22:bc0d:2000::32 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  1.07 GBytes  9.22 Gbits/sec                  
[  4]   1.00-2.00   sec  1.08 GBytes  9.27 Gbits/sec                  
[  4]   2.00-3.00   sec  1.08 GBytes  9.27 Gbits/sec                  
[  4]   3.00-4.00   sec  1.08 GBytes  9.27 Gbits/sec                  
[  4]   4.00-5.00   sec  1.08 GBytes  9.27 Gbits/sec                  
[  4]   5.00-6.00   sec  1.08 GBytes  9.26 Gbits/sec                  
[  4]   6.00-7.00   sec  1.08 GBytes  9.28 Gbits/sec                  
[  4]   7.00-8.00   sec  1.08 GBytes  9.25 Gbits/sec                  
[  4]   8.00-9.00   sec  1.08 GBytes  9.27 Gbits/sec                  
[  4]   9.00-10.00  sec  1.08 GBytes  9.26 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  10.8 GBytes  9.26 Gbits/sec    0             sender
[  4]   0.00-10.00  sec  10.8 GBytes  9.26 Gbits/sec                  receiver

iperf Done.

As the benchmark results speak for themself, there is no need for an interpretation. And now the million dollar question: Which one is better? 😼

  • Like 5
Link to comment
Share on other sites

Thanks @Mieze! The case for your driver is now much clearer. (Where do we claim the million dollars?)

 

One further practical question: On a VT-d enabled machine how does the driver binds to the NIC? Does IntelLucy.kext have automatic precedence over the dext, or is a boot-arg required? (I'd guess: "-ixgbe=0".)

 

 

Link to comment
Share on other sites

IntelLucy's Info.plist has an entry named "IOProbeScore" with a value of 2000 so that it has precedence over com.apple.DriverKit-AppleEthernetIXGBE. This means that injecting IntelLucy with OpenCore will prevent com.apple.DriverKit-AppleEthernetIXGBE from loading.

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

My test machine with the MSI MPG Z490 Gaming Plus also has an Aquantia AQC107 card which fully supports jumbo frames. That's why I decided to repeat the test with this card under Ventura. Like in the IntelLucy test setup, I also set MTU to 9000 for AppleEthernetAquantiaAqtion. Here are the results:

laura@lucy ~ % iperf3 -w 384K -B 192.168.10.90 -c 192.168.10.32
Connecting to host 192.168.10.32, port 5201
[  4] local 192.168.10.90 port 49374 connected to 192.168.10.32 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   646 MBytes  5.42 Gbits/sec                  
[  4]   1.00-2.00   sec   677 MBytes  5.68 Gbits/sec                  
[  4]   2.00-3.00   sec   678 MBytes  5.69 Gbits/sec                  
[  4]   3.00-4.00   sec   670 MBytes  5.62 Gbits/sec                  
[  4]   4.00-5.00   sec   669 MBytes  5.61 Gbits/sec                  
[  4]   5.00-6.00   sec   671 MBytes  5.63 Gbits/sec                  
[  4]   6.00-7.00   sec   678 MBytes  5.69 Gbits/sec                  
[  4]   7.00-8.00   sec   668 MBytes  5.61 Gbits/sec                  
[  4]   8.00-9.00   sec   667 MBytes  5.60 Gbits/sec                  
[  4]   9.00-10.00  sec   678 MBytes  5.68 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec  6.55 GBytes  5.62 Gbits/sec                  sender
[  4]   0.00-10.00  sec  6.55 GBytes  5.62 Gbits/sec                  receiver

iperf Done.
laura@lucy ~ % iperf3 -w 384K -B 192.168.10.90 -c 192.168.10.32 -R
Connecting to host 192.168.10.32, port 5201
Reverse mode, remote host 192.168.10.32 is sending
[  4] local 192.168.10.90 port 49377 connected to 192.168.10.32 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  1.10 GBytes  9.48 Gbits/sec                  
[  4]   1.00-2.00   sec  1.11 GBytes  9.49 Gbits/sec                  
[  4]   2.00-3.00   sec  1.10 GBytes  9.49 Gbits/sec                  
[  4]   3.00-4.00   sec  1.13 GBytes  9.72 Gbits/sec                  
[  4]   4.00-5.00   sec  1.14 GBytes  9.82 Gbits/sec                  
[  4]   5.00-6.00   sec  1.14 GBytes  9.82 Gbits/sec                  
[  4]   6.00-7.00   sec  1.14 GBytes  9.82 Gbits/sec                  
[  4]   7.00-8.00   sec  1.14 GBytes  9.82 Gbits/sec                  
[  4]   8.00-9.00   sec  1.14 GBytes  9.76 Gbits/sec                  
[  4]   9.00-10.00  sec  1.14 GBytes  9.80 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  11.3 GBytes  9.70 Gbits/sec    0             sender
[  4]   0.00-10.00  sec  11.3 GBytes  9.70 Gbits/sec                  receiver

iperf Done.
laura@lucy ~ % iperf3 -w 384K -B 2a01:c22:bc0d:2000::d15 -c 2a01:c22:bc0d:2000::32
Connecting to host 2a01:c22:bc0d:2000::32, port 5201
[  4] local 2a01:c22:bc0d:2000::d15 port 49379 connected to 2a01:c22:bc0d:2000::32 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   775 MBytes  6.50 Gbits/sec                  
[  4]   1.00-2.00   sec   780 MBytes  6.55 Gbits/sec                  
[  4]   2.00-3.00   sec   774 MBytes  6.50 Gbits/sec                  
[  4]   3.00-4.00   sec   777 MBytes  6.52 Gbits/sec                  
[  4]   4.00-5.00   sec   780 MBytes  6.55 Gbits/sec                  
[  4]   5.00-6.00   sec   782 MBytes  6.56 Gbits/sec                  
[  4]   6.00-7.00   sec   786 MBytes  6.59 Gbits/sec                  
[  4]   7.00-8.00   sec   785 MBytes  6.58 Gbits/sec                  
[  4]   8.00-9.00   sec   784 MBytes  6.58 Gbits/sec                  
[  4]   9.00-10.00  sec   783 MBytes  6.57 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec  7.62 GBytes  6.55 Gbits/sec                  sender
[  4]   0.00-10.00  sec  7.62 GBytes  6.55 Gbits/sec                  receiver

iperf Done.
laura@lucy ~ % iperf3 -w 384K -B 2a01:c22:bc0d:2000::d15 -c 2a01:c22:bc0d:2000::32 -R
Connecting to host 2a01:c22:bc0d:2000::32, port 5201
Reverse mode, remote host 2a01:c22:bc0d:2000::32 is sending
[  4] local 2a01:c22:bc0d:2000::d15 port 49381 connected to 2a01:c22:bc0d:2000::32 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  1.08 GBytes  9.24 Gbits/sec                  
[  4]   1.00-2.00   sec  1.08 GBytes  9.26 Gbits/sec                  
[  4]   2.00-3.00   sec  1.07 GBytes  9.23 Gbits/sec                  
[  4]   3.00-4.00   sec  1.08 GBytes  9.24 Gbits/sec                  
[  4]   4.00-5.00   sec  1.07 GBytes  9.23 Gbits/sec                  
[  4]   5.00-6.00   sec  1.07 GBytes  9.23 Gbits/sec                  
[  4]   6.00-7.00   sec  1.08 GBytes  9.24 Gbits/sec                  
[  4]   7.00-8.00   sec  1.07 GBytes  9.23 Gbits/sec                  
[  4]   8.00-9.00   sec  1.08 GBytes  9.24 Gbits/sec                  
[  4]   9.00-10.00  sec  1.07 GBytes  9.18 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  10.7 GBytes  9.23 Gbits/sec    0             sender
[  4]   0.00-10.00  sec  10.7 GBytes  9.23 Gbits/sec                  receiver

iperf Done.

As you can see, receive performance is quite good but transmit performance is lousy, it's even worse than com.apple.DriverKit-AppleEthernetIXGBE and I wonder what Apple has done to their network drivers because they used to be better in the past?

  • Like 3
Link to comment
Share on other sites

It would be great if somebody could help me in testing the driver. I have three machines with X520-DA1 adapters connected via DAC cables and 10GBase-SR fibre optics to the switch. Everything is working fine in these configurations but I would like to ask some X540 and X550 owners to test the latest version of the driver with their cards. Please check if the media (100Mbit, 1Gbit, and 10Gbit, for X550 also 2.5Gbit and 5Gbit) are correctly recognized and working well as I don't have the opportunity to test these configurations.

 

Thanks in advance❣️

Link to comment
Share on other sites

  • 2 weeks later...

I released version 1.0.0 of IntelLucy, uploaded a new binary and pushed source code to GitHub. Here is a list of changes:

  •  Fixed relaxed ordering of PCIe transactions as it may cause strange behaviour in certain situations.
  •  Fixed and tested VLAN support.

Version 1.0.0 is recommended for production systems as it has passed all tests and is fully working. All users of previous version should upgrade to version 1.0.0.

 

Have fun❣️

  • Like 5
Link to comment
Share on other sites

  • 2 weeks later...

I have been using a few Intel X540-AT2 Dual Base-T x8 NICs on a some of my Hackintosh dual boot systems: 1 x Skylake, 2 x Coffee Lake, 1 x AMD FX, 1 x AMD Ryzen B550 all with your IntelLucy.kext.  I have upgraded IntelLucy to version 1.0.0. 
 

I am really grateful for the work you have put in to this  project as it has allowed me to make greater use of my QNAP 1208 10G switch.  Using some relatively inexpensive Intel Server NICs (£30+) to expand my 10G network.  My other systems are using ACQ107 10G PCIe x4 cards.

 

People need to be wary of the really cheap (£14-£20) INSUPER X540-AT2 NICs that are flooding eBay from China, as they aren’t macOS friendly. 

 

The X540-AT2 NICs work at 1GB or 10G, no 2.5G connection to my 2.5G switch only 1G.  Surprisingly both 10G Base-T connectors work in macOS.

 

I have changed all my Ethernet cables to Cat8, and have LC-LC 50/125um Multimode Fibre Optic Cable connections running between my 10GbE network switches.

Edited by Edhawk
  • Like 4
Link to comment
Share on other sites

Posted (edited)

There are good news to report since the last update 10 days ago. As Intel is going to stop production of the X540 this year, many retailers are selling out their inventory of X540 based cards offering rebates on these adapters. On AliExpress there are several offers for X540 adapters below 20€ so that I decided to give it a try and ordered one of these cards last week for a little bit more than 10€, shipping included. At first I was quite sceptic about the card's quality, in particular as the retailer mentioned that it may not work with certain mainboards and that the adapter runs very hot, but after it arrived last Monday, I am extremely happy with the purchase and can confirm that the card is more than worth the money. Here is a photo of the card:

 

IMG_4384.thumb.jpeg.735188bf337643c19026ebda1c32b22e.jpeg

 

The quality is quite good, although there has been some dirt on the PCIe connector, but the heatsink is adequate for such a power hungry card. Nevertheless, it runs quite hot when both ports are active so that you can't touch it anymore but that's not unusual for passively cooled X540 adapters. Besides the second RJ-45 connector, there is a jumper (see the red arrow) to disable the second port allowing you to save power (and limit heat dissipation) in case it is not needed. Unfortunately the retailer didn't lie when he mentioned that the card may not work in certain mainboards. My Asrock H97M-Pro4 will immediately shut down on power-on with the card installed. Therefore I installed it in the PEG slot of my MSI MPG Z490 Gaming Plus and it worked perfectly without a single issue. Maybe it's because a powerful Gaming mainboard is designed to cope with the power consumption of high-end GPUs? Both systems are equipped with a 400W PSU. Anyway, you need a good airflow in your case when using such a card. Running stability tests I haven't noticed a single connection drop but after two days of testing you can't tell anything about long term stability. I wouldn't use this for my home server, in particular because of the power consumption (according to Intel the X540 the typical power consumption with one port active is 10.8W and 17.4W with both ports active), but for a test system or first steps with 10Gbit Ethernet it's the perfect solution, although I would recommend the X520 with a DAC cable, provided you only have to bridge a distance of up to 5 meter because it's the cheapest and most power efficient solution (~0.1W per active port) or a 10GBase-SR SPF+ module with a multi-mode fibre cable, which also consumes less power (~0.6W per active port) than 10GBase-T (~3W per active port).

 

As a result of my testing I was able to fix some issues and improve IntelLucy. The result of my work, version 1.0.3 has been published a few minutes ago and is available in the download section or on GitHub. Also, I would like to thank you all for your support of the project and your testing efforts.

 

Have fun❣️ 

 

Edited by Mieze
Fixed some typos
  • Like 1
  • Thanks 1
Link to comment
Share on other sites

Mieze

 

So, just tried out your driver with a X540-T2 that I got from eBay for a whopping $25......fantastic!  Works great, and very fast - considerably faster than the Aquantia I have been using. 

 

Great work!

 

It worked in Ventura, Sonoma (14.5 B2), and Ubuntu/Mint.  I had a bit of trouble in Windows 11, but was able to find a driver and work around there and once that was done, it was working in all of my installed betas (the machine I use them on is an Intel Z790 Asus motherboard and I don't really use that for production needs, just for betas of various Operating Systems).

 

The main point is that 10G adapter is working on all of them, and working extremely well in my two Mac installations thanks to you.  Thank you!

  • Like 2
Link to comment
Share on other sites

 Share

×
×
  • Create New...