Jump to content
14 posts in this topic

Recommended Posts

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

 

IMG_0581.jpeg.4dda1bfa47d3395b3081e55c27f14e6a.jpeg

 

RTL812xLucy is a new open source macOS driver for the Realtek RTL812x family of 2.5Gbit and 5Gbit Ethernet Controllers.

 

Key Features of RTL812xLucy

  • Supports all versions of Realtek's RTL8125 2.5GBit and RTL8126 5Gbit Ethernet Controllers:
    • RTL8125A
    • RTL8125B(G)
    • RTL8125BP
    • RTL8125CP
    • RTL8125D
    • RTL8126A
  • Support for AppleVTD (Tahoe included), but also works without it.
  • 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 (since version 1.0.1).
  • Fully optimized for Catalina and newer. Note that older versions of macOS might not support 2.5Gbit and 5Gbit Ethernet.
  • Support for Energy Efficient Ethernet (EEE).
  • VLAN support confirmed to be  working since version 1.0.2.
  • Wake on LAN (WoL) has been tested successfully (since version 1.0.1).
  • Supports hardware monitoring with rtl812xtool in Terminal.
  • The driver is published under GPLv2.

 

Current Status

  • The driver has been successfully tested with Tahoe, Sequoia and Monterey but should work fine with Catalina and above.
  • Full TSO4 and TSO6 support has been added with version 1.1.0.

 

A word on AppleVTD

Although RTL812x supports AppleVTD, there is no guarantee that your mainboard also does. In case you are unsure if you need AppleVTD, leave it disabled and you'll be on the safe side. When you enable AppleVTD and experience one of the following issues, it's most likely that your board doesn't support AppleVTD:

  • Kernel Panics.
  • The machine suddenly reboots, freezes and/or the fans speed up.
  • No network connection at all.
  • The link status keeps going up and down.
  • Very low connection throughput.

 

What can you do to resolve the issue?

  • Check your board's DMAR table and see if there are any reserved memory regions in it.
  • If there are reserved memory regions, you might want to patch your DMAR removing these regions. If it resolves the issue, congratulations! Be careful, because the board's manufacturer did add these regions with intention. Removing them may produce unexpected results too, like the problems described above.
  • Otherwise you have to keep AppleVTD disabled, because it is incompatible with your board and there is no way to make it compatible.

 

Installation

  • Use OpenCore to inject the driver.

 

Bildschirmfoto2026-02-06um20_33_23.thumb.png.4e72fd9b0a36b37f33f544f61c09bd1d.png

 

Getting the Driver

 

Changelog

  • Version 1.1.1 build 1.1.100 ()2026-04-03)
    • Added IOUserClient for hardware monitoring.
    • Created rtl812xtool to retrieve hardware monitoring data.
  • Version 1.1.0 build 1.1.004 (2026-03-13)
    • Full TSO4 and TSO6 support added.
    • Rebased project on the source code of LucyRTL8125Ethernet.
  • Version 1.0.3 build 1.0.300 (2026-02-28)
    • Support for the RTL8126A added.
    • Small bugfixes.
  • Version 1.0.2 build 1.0.200 (2026-02-13)
    • VLAN support confirmed to be working.
    • Software interrupt throttling improved.
  • Version 1.0.1 build 1.0.100 (2026-02-06)
    • Added full jumbo frame support up to 9000 bytes.
    • WoL has been successfully tested.
  • Version 1.0.0 build 1.0.55 (2026-02-06)
    • First public development version for testing.
    • TSO temporarily disabled due to performance problems under Tahoe.

 

 

 

 

RTL812xLucy-1.0.3-build-1.0.300.zip

RTL812xLucy-V1.1.0-build-1.1.004.zip

Edited by Mieze
Update to version 1.1.1
  • Like 10
  • Thanks 6

Here is a first speed test I ran with version 1.0.1 using jumbo frames (MTU 9000). The remote machine is my Ubuntu 24.04.3 LTS server with an Intel X520 NIC. The results are as expected, but see for yourself: 😺

dmin@Lucy ~ % ifconfig en1                         
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 9000
	options=40b<RXCSUM,TXCSUM,VLAN_HWTAGGING,CHANNEL_IO>
	ether 04:7c:16:d6:63:ac
	inet6 fe80::106d:2d21:5666:8e61%en1 prefixlen 64 secured scopeid 0xa 
	inet6 fd68:bcb3:f983::179 prefixlen 64 
	inet 192.168.10.179 netmask 0xffffff00 broadcast 192.168.10.255
	nd6 options=201<PERFORMNUD,DAD>
	media: 2500Base-T <full-duplex>
	status: active

admin@Lucy ~ % iperf3-darwin -c gato.lan -4         
Connecting to host gato.lan, port 5201
[  6] local 192.168.10.179 port 49181 connected to 192.168.10.32 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd          RTT
[  6]   0.00-1.00   sec   299 MBytes  2.51 Gbits/sec    0   8.00 MBytes   14ms     
[  6]   1.00-2.00   sec   295 MBytes  2.47 Gbits/sec    0   8.00 MBytes   14ms     
[  6]   2.00-3.00   sec   295 MBytes  2.48 Gbits/sec    0   8.00 MBytes   14ms     
[  6]   3.00-4.00   sec   295 MBytes  2.47 Gbits/sec    0   8.00 MBytes   14ms     
[  6]   4.00-5.00   sec   295 MBytes  2.48 Gbits/sec    0   8.00 MBytes   14ms     
[  6]   5.00-6.00   sec   295 MBytes  2.48 Gbits/sec    0   8.00 MBytes   14ms     
[  6]   6.00-7.00   sec   295 MBytes  2.47 Gbits/sec    0   8.00 MBytes   14ms     
[  6]   7.00-8.00   sec   295 MBytes  2.47 Gbits/sec    0   8.00 MBytes   14ms     
[  6]   8.00-9.00   sec   295 MBytes  2.48 Gbits/sec    0   8.00 MBytes   14ms     
[  6]   9.00-10.00  sec   295 MBytes  2.47 Gbits/sec    0   8.00 MBytes   14ms     
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  6]   0.00-10.00  sec  2.89 GBytes  2.48 Gbits/sec    0             sender
[  6]   0.00-10.01  sec  2.88 GBytes  2.47 Gbits/sec                  receiver

iperf Done.
admin@Lucy ~ % iperf3-darwin -c gato.lan -4 -R
Connecting to host gato.lan, port 5201
Reverse mode, remote host gato.lan is sending
[  6] local 192.168.10.179 port 49183 connected to 192.168.10.32 port 5201
[ ID] Interval           Transfer     Bitrate         Rwnd
[  6]   0.00-1.00   sec   295 MBytes  2.47 Gbits/sec   866 KBytes                  
[  6]   1.00-2.00   sec   295 MBytes  2.48 Gbits/sec   866 KBytes                  
[  6]   2.00-3.00   sec   295 MBytes  2.48 Gbits/sec   866 KBytes                  
[  6]   3.00-4.00   sec   295 MBytes  2.48 Gbits/sec   866 KBytes                  
[  6]   4.00-5.00   sec   295 MBytes  2.48 Gbits/sec   866 KBytes                  
[  6]   5.00-6.00   sec   295 MBytes  2.48 Gbits/sec   866 KBytes                  
[  6]   6.00-7.00   sec   295 MBytes  2.48 Gbits/sec   866 KBytes                  
[  6]   7.00-8.00   sec   295 MBytes  2.48 Gbits/sec   866 KBytes                  
[  6]   8.00-9.00   sec   295 MBytes  2.48 Gbits/sec   866 KBytes                  
[  6]   9.00-10.00  sec   295 MBytes  2.48 Gbits/sec   866 KBytes                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  6]   0.00-10.00  sec  2.88 GBytes  2.48 Gbits/sec  3010             sender
[  6]   0.00-10.00  sec  2.88 GBytes  2.48 Gbits/sec                  receiver

iperf Done.
admin@Lucy ~ % iperf3-darwin -c gato.lan -6   
Connecting to host gato.lan, port 5201
[  7] local fd68:bcb3:f983::179 port 49189 connected to fd68:bcb3:f983::32 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd          RTT
[  7]   0.00-1.00   sec   279 MBytes  2.34 Gbits/sec    0   4.07 MBytes   8ms     
[  7]   1.00-2.00   sec   277 MBytes  2.32 Gbits/sec    0   4.07 MBytes   7ms     
[  7]   2.00-3.00   sec   277 MBytes  2.32 Gbits/sec    0   4.07 MBytes   8ms     
[  7]   3.00-4.00   sec   277 MBytes  2.32 Gbits/sec    0   4.07 MBytes   8ms     
[  7]   4.00-5.00   sec   277 MBytes  2.32 Gbits/sec    0   4.07 MBytes   8ms     
[  7]   5.00-6.00   sec   277 MBytes  2.32 Gbits/sec    0   4.07 MBytes   8ms     
[  7]   6.00-7.00   sec   277 MBytes  2.32 Gbits/sec    0   4.07 MBytes   8ms     
[  7]   7.00-8.00   sec   277 MBytes  2.32 Gbits/sec    0   4.07 MBytes   8ms     
[  7]   8.00-9.00   sec   277 MBytes  2.32 Gbits/sec    0   4.07 MBytes   8ms     
[  7]   9.00-10.00  sec   277 MBytes  2.32 Gbits/sec    0   4.07 MBytes   8ms     
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  7]   0.00-10.00  sec  2.70 GBytes  2.32 Gbits/sec    0             sender
[  7]   0.00-10.00  sec  2.70 GBytes  2.32 Gbits/sec                  receiver

iperf Done.
admin@Lucy ~ % iperf3-darwin -c gato.lan -6 -R
Connecting to host gato.lan, port 5201
Reverse mode, remote host gato.lan is sending
[  7] local fd68:bcb3:f983::179 port 49198 connected to fd68:bcb3:f983::32 port 5201
[ ID] Interval           Transfer     Bitrate         Rwnd
[  7]   0.00-1.00   sec   276 MBytes  2.32 Gbits/sec   418 KBytes                  
[  7]   1.00-2.00   sec   276 MBytes  2.31 Gbits/sec   424 KBytes                  
[  7]   2.00-3.00   sec   277 MBytes  2.32 Gbits/sec   452 KBytes                  
[  7]   3.00-4.00   sec   276 MBytes  2.32 Gbits/sec   452 KBytes                  
[  7]   4.00-5.00   sec   276 MBytes  2.32 Gbits/sec   452 KBytes                  
[  7]   5.00-6.00   sec   276 MBytes  2.32 Gbits/sec   452 KBytes                  
[  7]   6.00-7.00   sec   277 MBytes  2.32 Gbits/sec   450 KBytes                  
[  7]   7.00-8.00   sec   275 MBytes  2.31 Gbits/sec   452 KBytes                  
[  7]   8.00-9.00   sec   275 MBytes  2.31 Gbits/sec   452 KBytes                  
[  7]   9.00-10.00  sec   277 MBytes  2.32 Gbits/sec   466 KBytes                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  7]   0.00-10.00  sec  2.70 GBytes  2.32 Gbits/sec  5232             sender
[  7]   0.00-10.00  sec  2.70 GBytes  2.32 Gbits/sec                  receiver

iperf Done.

 

Edited by Mieze
  • Like 2

I just wanted to let you know that version 1.02 is available for download now in the first post of this thread. Major improvements are VLAN support, which has been successfully tested, and a slight reduction in CPU load thanks to improved software interrupt throttling because the RTL8125 hardware interrupt throttling is broken and has to be disabled for stable operation. Have fun testing!

 

Mieze 😺

  • Like 3
  • Thanks 1

Test: Gigabyte Z690 Gaming X with RTL812xLucy.kext V1.0.2

Spoiler

Last login: Sun Feb 15 16:19:10 on ttys006
fabiomn@Mac-Pro ~ % ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=40b<RXCSUM,TXCSUM,VLAN_HWTAGGING,CHANNEL_IO>
    ether d8:5e:d3:e7:xx:xx
    inet6 fe80::1877:cfea:f04c:14df%en0 prefixlen 64 secured scopeid 0x5 
    inet 192.168.1.xxx netmask 0xffffff00 broadcast 192.168.1.xxx
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect (1000baseT <full-duplex>)
    status: active
fabiomn@Mac-Pro ~ % networksetup -getMedia en0
Current: autoselect
Active: 1000baseT <full-duplex>
fabiomn@Mac-Pro ~ % iperf3 -c 192.168.1.123 -4 -R

Connecting to host 192.168.1.xxx, port 5201
Reverse mode, remote host 192.168.1.xxx is sending
[  5] local 192.168.1.xxx port 49324 connected to 192.168.1.xxx port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  8.40 GBytes  72.1 Gbits/sec                  
[  5]   1.00-2.00   sec  7.99 GBytes  68.6 Gbits/sec                  
[  5]   2.00-3.00   sec  7.96 GBytes  68.4 Gbits/sec                  
[  5]   3.00-4.00   sec  8.66 GBytes  74.2 Gbits/sec                  
[  5]   4.00-5.00   sec  8.21 GBytes  70.7 Gbits/sec                  
[  5]   5.00-6.00   sec  8.43 GBytes  72.3 Gbits/sec                  
[  5]   6.00-7.00   sec  8.78 GBytes  75.8 Gbits/sec                  
[  5]   7.00-8.00   sec  8.68 GBytes  74.4 Gbits/sec                  
[  5]   8.00-9.00   sec  8.49 GBytes  73.1 Gbits/sec                  
[  5]   9.00-10.00  sec  8.59 GBytes  73.8 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  84.2 GBytes  72.3 Gbits/sec                  sender
[  5]   0.00-10.00  sec  84.2 GBytes  72.3 Gbits/sec                  receiver

iperf Done.
fabiomn@Mac-Pro ~ % iperf3 -c 192.168.1.123 -6 -R

Connecting to host 192.168.1.xxx, port 5201
Reverse mode, remote host 192.168.1.xxx is sending
[  5] local 192.168.1.xxx port 49326 connected to 192.168.1.xxx port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  8.37 GBytes  71.6 Gbits/sec                  
[  5]   1.00-2.00   sec  8.31 GBytes  71.7 Gbits/sec                  
[  5]   2.00-3.00   sec  8.41 GBytes  72.3 Gbits/sec                  
[  5]   3.00-4.00   sec  8.67 GBytes  74.4 Gbits/sec                  
[  5]   4.00-5.00   sec  8.54 GBytes  73.3 Gbits/sec                  
[  5]   5.00-6.00   sec  8.58 GBytes  73.7 Gbits/sec                  
[  5]   6.00-7.00   sec  8.43 GBytes  72.4 Gbits/sec                  
[  5]   7.00-8.00   sec  8.56 GBytes  73.2 Gbits/sec                  
[  5]   8.00-9.00   sec  8.56 GBytes  73.9 Gbits/sec                  
[  5]   9.00-10.00  sec  8.46 GBytes  72.4 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  84.9 GBytes  72.9 Gbits/sec                  sender
[  5]   0.00-10.00  sec  84.9 GBytes  72.9 Gbits/sec                  receiver

iperf Done.
fabiomn@Mac-Pro ~ % iperf3 -c 192.168.1.xxx -6   

Connecting to host 192.168.1.xxx, port 5201
[  5] local 192.168.1.xxx port 49328 connected to 192.168.1.xxx port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  6.48 GBytes  55.6 Gbits/sec                  
[  5]   1.00-2.00   sec  6.25 GBytes  53.5 Gbits/sec                  
[  5]   2.00-3.00   sec  6.10 GBytes  52.5 Gbits/sec                  
[  5]   3.00-4.00   sec  7.67 GBytes  65.8 Gbits/sec                  
[  5]   4.00-5.00   sec  7.65 GBytes  65.8 Gbits/sec                  
[  5]   5.00-6.00   sec  7.67 GBytes  65.8 Gbits/sec                  
[  5]   6.00-7.00   sec  7.64 GBytes  65.9 Gbits/sec                  
[  5]   7.00-8.00   sec  7.61 GBytes  65.4 Gbits/sec                  
[  5]   8.00-9.00   sec  7.67 GBytes  65.9 Gbits/sec                  
[  5]   9.00-10.00  sec  7.62 GBytes  65.4 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  72.4 GBytes  62.2 Gbits/sec                  sender
[  5]   0.00-10.00  sec  72.4 GBytes  62.2 Gbits/sec                  receiver

iperf Done.
fabiomn@Mac-Pro ~ % 

 

 

  • Thanks 1
  • 2 weeks later...

These are the results of a speed test with a RTL8126A using version 1.0.3 with MTU 9000 under Tahoe with AppleVTD enabled. The remote machine is my Ubuntu 24.04.3 LTS server with an Intel X520 NIC. You might wonder about the TCP/IPv6 tx speed, which is limited to 3.94Gbit/s by the CPU preparing the packets for transmission. With AppleVTD you may get better results but keep in mind that even a Comet Lake CPU core is not fast enough to send TCP/IPv6 with line speed without the help of TSO. That's why it is so important to make it work and that will be the next step in development.

admin@Lucy Desktop % ifconfig en5                                                       
en5: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 9000
	options=40b<RXCSUM,TXCSUM,VLAN_HWTAGGING,CHANNEL_IO>
	ether 00:e0:4c:68:b8:7c
	inet6 fe80::452:8e82:968:c86a%en5 prefixlen 64 secured scopeid 0x9 
	inet6 2a00:6020:48d1:ae00::126 prefixlen 64 
	inet 192.168.10.126 netmask 0xffffff00 broadcast 192.168.10.255
	nd6 options=201<PERFORMNUD,DAD>
	media: 5000Base-T <full-duplex>
	status: active

admin@Lucy Desktop % iperf3-darwin -c gato.lan -4                                          
Connecting to host gato.lan, port 5201
[  6] local 192.168.10.126 port 49203 connected to 192.168.10.32 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd          RTT
[  6]   0.00-1.00   sec   593 MBytes  4.98 Gbits/sec    0   7.99 MBytes   7ms     
[  6]   1.00-2.00   sec   590 MBytes  4.95 Gbits/sec    0   7.99 MBytes   6ms     
[  6]   2.00-3.00   sec   590 MBytes  4.95 Gbits/sec    0   7.99 MBytes   7ms     
[  6]   3.00-4.00   sec   590 MBytes  4.95 Gbits/sec    0   7.99 MBytes   7ms     
[  6]   4.00-5.00   sec   590 MBytes  4.95 Gbits/sec    0   7.99 MBytes   7ms     
[  6]   5.00-6.00   sec   590 MBytes  4.95 Gbits/sec    0   7.99 MBytes   7ms     
[  6]   6.00-7.00   sec   590 MBytes  4.95 Gbits/sec    0   7.99 MBytes   7ms     
[  6]   7.00-8.00   sec   590 MBytes  4.95 Gbits/sec    0   7.99 MBytes   7ms     
[  6]   8.00-9.00   sec   590 MBytes  4.95 Gbits/sec    0   7.99 MBytes   7ms     
[  6]   9.00-10.00  sec   590 MBytes  4.95 Gbits/sec    0   7.99 MBytes   7ms     
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  6]   0.00-10.00  sec  5.76 GBytes  4.95 Gbits/sec    0             sender
[  6]   0.00-10.00  sec  5.76 GBytes  4.95 Gbits/sec                  receiver

iperf Done.

admin@Lucy Desktop % iperf3-darwin -c gato.lan -4 -R
Connecting to host gato.lan, port 5201
Reverse mode, remote host gato.lan is sending
[  6] local 192.168.10.126 port 49205 connected to 192.168.10.32 port 5201
[ ID] Interval           Transfer     Bitrate         Rwnd
[  6]   0.00-1.00   sec   590 MBytes  4.95 Gbits/sec  4.00 MBytes                  
[  6]   1.00-2.00   sec   590 MBytes  4.95 Gbits/sec  4.00 MBytes                  
[  6]   2.00-3.00   sec   590 MBytes  4.95 Gbits/sec  4.00 MBytes                  
[  6]   3.00-4.00   sec   590 MBytes  4.95 Gbits/sec  4.00 MBytes                  
[  6]   4.00-5.00   sec   590 MBytes  4.95 Gbits/sec  3.92 MBytes                  
[  6]   5.00-6.00   sec   590 MBytes  4.95 Gbits/sec  3.94 MBytes                  
[  6]   6.00-7.00   sec   590 MBytes  4.95 Gbits/sec  4.00 MBytes                  
[  6]   7.00-8.00   sec   590 MBytes  4.95 Gbits/sec  4.00 MBytes                  
[  6]   8.00-9.00   sec   590 MBytes  4.95 Gbits/sec  4.00 MBytes                  
[  6]   9.00-10.00  sec   590 MBytes  4.95 Gbits/sec  4.00 MBytes                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  6]   0.00-10.00  sec  5.77 GBytes  4.95 Gbits/sec  249             sender
[  6]   0.00-10.00  sec  5.76 GBytes  4.95 Gbits/sec                  receiver

iperf Done.

admin@Lucy Desktop % iperf3-darwin -c gato.lan -6                                       
Connecting to host gato.lan, port 5201
[  7] local 2a00:6020:48d1:ae00::126 port 49207 connected to 2a00:6020:48d1:ae00::32 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd          RTT
[  7]   0.00-1.00   sec   466 MBytes  3.91 Gbits/sec    0   4.22 MBytes   4ms     
[  7]   1.00-2.00   sec   468 MBytes  3.92 Gbits/sec    0   4.22 MBytes   5ms     
[  7]   2.00-3.00   sec   470 MBytes  3.95 Gbits/sec    0   4.24 MBytes   5ms     
[  7]   3.00-4.00   sec   470 MBytes  3.94 Gbits/sec    0   4.24 MBytes   4ms     
[  7]   4.00-5.00   sec   469 MBytes  3.93 Gbits/sec    0   4.24 MBytes   5ms     
[  7]   5.00-6.00   sec   472 MBytes  3.96 Gbits/sec    0   4.24 MBytes   5ms     
[  7]   6.00-7.00   sec   468 MBytes  3.93 Gbits/sec    0   4.24 MBytes   5ms     
[  7]   7.00-8.00   sec   468 MBytes  3.92 Gbits/sec    0   4.24 MBytes   4ms     
[  7]   8.00-9.00   sec   472 MBytes  3.96 Gbits/sec    0   4.24 MBytes   4ms     
[  7]   9.00-10.00  sec   471 MBytes  3.95 Gbits/sec    0   4.24 MBytes   5ms     
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  7]   0.00-10.00  sec  4.58 GBytes  3.94 Gbits/sec    0             sender
[  7]   0.00-10.00  sec  4.58 GBytes  3.94 Gbits/sec                  receiver

iperf Done.

admin@Lucy Desktop % iperf3-darwin -c gato.lan -6 -R
Connecting to host gato.lan, port 5201
Reverse mode, remote host gato.lan is sending
[  7] local 2a00:6020:48d1:ae00::126 port 49209 connected to 2a00:6020:48d1:ae00::32 port 5201
[ ID] Interval           Transfer     Bitrate         Rwnd
[  7]   0.00-1.00   sec   552 MBytes  4.63 Gbits/sec  1.53 MBytes                  
[  7]   1.00-2.00   sec   553 MBytes  4.64 Gbits/sec  1.98 MBytes                  
[  7]   2.00-3.00   sec   553 MBytes  4.64 Gbits/sec  1.93 MBytes                  
[  7]   3.00-4.00   sec   553 MBytes  4.64 Gbits/sec  1.93 MBytes                  
[  7]   4.00-5.00   sec   553 MBytes  4.64 Gbits/sec  1.98 MBytes                  
[  7]   5.00-6.00   sec   553 MBytes  4.64 Gbits/sec  1.99 MBytes                  
[  7]   6.00-7.00   sec   553 MBytes  4.64 Gbits/sec  1.99 MBytes                  
[  7]   7.00-8.00   sec   553 MBytes  4.64 Gbits/sec  1.99 MBytes                  
[  7]   8.00-9.00   sec   553 MBytes  4.64 Gbits/sec  1.99 MBytes                  
[  7]   9.00-10.00  sec   553 MBytes  4.64 Gbits/sec  1.99 MBytes                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  7]   0.00-10.00  sec  5.41 GBytes  4.64 Gbits/sec   98             sender
[  7]   0.00-10.00  sec  5.40 GBytes  4.64 Gbits/sec                  receiver

iperf Done.

Have fun!

 

Mieze 😺

  • Like 2
  • 2 weeks later...

I have good news to report. Finally, I managed to solve the performance problem with TSO and I'm going to release version 1.1.0 of RTL812xLucy with full TSO support this weekend. I'm running final tests at the moment to ensure that everything is working as expected.

 

After having lost almost the whole February trying to find the reason of the TSO related tx performance, which resulted in a 15% lower tx speed with TSO on, I decided to start from scratch and rebase RTL812xLucy on the source code of LucyRTL8125Ethernet, because this driver is known to work perfectly with TSO activated. This was a laborious and error prone task, because I had to merge two different code bases piece by piece. After every piece of code from RTL812xLucy, which has been added to the code of LucyRTL8125Ethernet, I had to verify that TSO is still working without the performance penalty, but finally I managed to get the code right, so that RTL812xLucy is now working with line speed and low CPU load thanks to TSO.

 

Mieze 😺

  • Like 5
  • Thanks 2

As announced yesterday, I published version 1.1.0 of RTL812xLucy this afternoon. The new release fully supports TSO improving throughput and lowering CPU load while sending large amounts of data. You'll find the binary attached to the first post of this thread. Good luck testing and have fun!

 

Mieze 😺

 

  • Like 2
  • Thanks 3

Test: Gigabyte Z690 Gaming X with RTL812xLucy.kext V1.1.0

 

Spoiler

Last login: Sun Mar 15 14:47:27 on ttys001
fabio@Pro-di-Fabio ~ % ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=46b<RXCSUM,TXCSUM,VLAN_HWTAGGING,TSO4,TSO6,CHANNEL_IO>
    ether d8:5e:d3:e7:52:f6
    inet6 fe80::1455:9f38:e06c:e8e6%en0 prefixlen 64 secured scopeid 0x5 
    inet 192.168.1.xxx netmask 0xffffff00 broadcast 192.168.1.255
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect (1000baseT <full-duplex>)
    status: active
fabio@Pro-di-Fabio ~ % networksetup -getMedia en0
Current: autoselect
Active: 1000baseT <full-duplex>
fabio@Pro-di-Fabio ~ % iperf3 -c 192.168.1.xxx -4 -R
Connecting to host 192.168.1.xxx, port 5201
Reverse mode, remote host 192.168.1.xxx is sending
[  5] local 192.168.1.122 port 49428 connected to 192.168.1.xxx port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  8.89 GBytes  76.4 Gbits/sec                  
[  5]   1.00-2.00   sec  8.97 GBytes  76.8 Gbits/sec                  
[  5]   2.00-3.00   sec  8.98 GBytes  77.3 Gbits/sec                  
[  5]   3.00-4.00   sec  8.94 GBytes  77.0 Gbits/sec                  
[  5]   4.00-5.00   sec  9.11 GBytes  77.9 Gbits/sec                  
[  5]   5.00-6.00   sec  8.95 GBytes  77.3 Gbits/sec                  
[  5]   6.00-7.00   sec  9.01 GBytes  77.1 Gbits/sec                  
[  5]   7.00-8.00   sec  8.95 GBytes  77.0 Gbits/sec                  
[  5]   8.00-9.00   sec  9.04 GBytes  77.5 Gbits/sec                  
[  5]   9.00-10.00  sec  8.98 GBytes  77.5 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  89.8 GBytes  77.2 Gbits/sec                  sender
[  5]   0.00-10.00  sec  89.8 GBytes  77.2 Gbits/sec                  receiver

iperf Done.
fabio@Pro-di-Fabio ~ %  iperf3 -c 192.168.1.xxx -6 -R
Connecting to host 192.168.1.xxx, port 5201
Reverse mode, remote host 192.168.1.xxx is sending
[  5] local 192.168.1.122 port 49430 connected to 192.168.1.xxx port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  8.16 GBytes  70.0 Gbits/sec                  
[  5]   1.00-2.00   sec  8.21 GBytes  70.5 Gbits/sec                  
[  5]   2.00-3.00   sec  8.09 GBytes  69.6 Gbits/sec                  
[  5]   3.00-4.00   sec  8.43 GBytes  72.4 Gbits/sec                  
[  5]   4.00-5.00   sec  8.18 GBytes  70.1 Gbits/sec                  
[  5]   5.00-6.00   sec  7.80 GBytes  67.2 Gbits/sec                  
[  5]   6.00-7.00   sec  8.16 GBytes  70.0 Gbits/sec                  
[  5]   7.00-8.00   sec  8.88 GBytes  76.4 Gbits/sec                  
[  5]   8.00-9.00   sec  8.97 GBytes  76.9 Gbits/sec                  
[  5]   9.00-10.00  sec  8.84 GBytes  76.0 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  83.7 GBytes  71.9 Gbits/sec                  sender
[  5]   0.00-10.00  sec  83.7 GBytes  71.9 Gbits/sec                  receiver

iperf Done.
fabio@Pro-di-Fabio ~ % iperf3 -c 192.168.1.xxx -6   
Connecting to host 192.168.1.xxx, port 5201
[  5] local 192.168.1.122 port 49432 connected to 192.168.1.xxx port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  7.60 GBytes  65.2 Gbits/sec                  
[  5]   1.00-2.00   sec  7.59 GBytes  65.1 Gbits/sec                  
[  5]   2.00-3.00   sec  7.60 GBytes  65.4 Gbits/sec                  
[  5]   3.00-4.00   sec  7.56 GBytes  65.0 Gbits/sec                  
[  5]   4.00-5.00   sec  7.56 GBytes  65.0 Gbits/sec                  
[  5]   5.00-6.00   sec  7.61 GBytes  65.3 Gbits/sec                  
[  5]   6.00-7.00   sec  7.63 GBytes  65.5 Gbits/sec                  
[  5]   7.00-8.00   sec  7.60 GBytes  65.3 Gbits/sec                  
[  5]   8.00-9.00   sec  7.62 GBytes  65.2 Gbits/sec                  
[  5]   9.00-10.00  sec  7.58 GBytes  65.4 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  76.0 GBytes  65.2 Gbits/sec                  sender
[  5]   0.00-10.00  sec  76.0 GBytes  65.2 Gbits/sec                  receiver

iperf Done.
fabio@Pro-di-Fabio ~ % 

 

Edited by Alpha22
  • Like 1
  • Thanks 1
  • 3 weeks later...
Posted (edited)

Well, for an Easter egg it is too early, but I decided to publish version 1.1.1 of RTL812xLucy this afternoon. The only change since version 1.1.0 is the addition of an IOUserClient, which allows the driver to communicate with the user land utility rtl812xtool, a small command line tool to retrieve hardware monitoring data of the RTL812x family members. Don't forget to call it with sudo as it needs root privileges to communicate with the IOUserClient in kernel space. I uploaded the prebuilt binary to the Download section of insamelymac.com. After installing the new version of the driver, I recommend to copy rtl812xtool to /usr/local/bin/ to install it on your system.

 

At the moment rtl812xtool supports two functions:

  1. Retrieve the chips hardware statistics. The network interface statistics of macOS is quite limited and does not include all the hardware data collected by the chip, which might be helpful to debug problems or watch the chip in action. To access that data, open Terminal and call rtl812xtool with -s and don't forget to use sudo:
    admin@Lucy Desktop % sudo rtl812xtool -s en5
        txPackets: 65009548
        rxPackets: 50317511
        txErrors: 0
        rxErrors: 0
        rxMissed: 0
        alignErrors: 0
        txOneCollision: 0
        txMultiCollision: 0
        rxUnicast: 50316925
        rxBroadcast: 255
        rxMulticast: 331
        txAborted: 0
        txUnderun: 0
        txOctets: 87098909593
        rxOctets: 74121610908
        rxMulticast64: 331
        txUnicast64: 65009294
        txBroadcast64: 126
        txMulticast64: 128
        txPauseOn: 0
        txPauseOff: 0
        txPauseAll: 0
        txDeferred: 0
        txLateCollision: 0
        txAllCollision: 0
        txAborted32: 0
        alignErrors32: 0
        rxFrame2Long: 38
        rxRunt: 0
        rxPauseOn: 0
        rxPauseOff: 0
        rxPauseAll: 0
        rxUnknownOpcode: 0
        rxMacError: 0
        txUnderrun32: 0
        rxMacMissed: 1151
        rxTcamDropped: 0
        tdu: 0
        rdu: 0

     

  2. Most members of the RTL812x family have an integrated thermal sensor. Only the RTL8125A lacks this feature. The chip's temperature can be retrieved using rtl812xtool -t. Calling this command on an RTL8125A will result in an error. 
    admin@Lucy Desktop % sudo rtl812xtool -t en5
    Temperature of device en5: 51°C

    This tool is not made for continuous thermal monitoring, because it doesn't make much sense for these chips. The temperature mostly depends on the link speed and is changing slowly. On my machines the temperature settles at ~30°C with the link down, ~40°C with a 2.5Gbit and for a 5Gbit link at ~50°C. Heavy load doesn't seem to have much influence on the temperature, as running iperf3-darwin for about 2 minutes results in no temperature change. Therefore the thermal monitoring makes only sense when you are optimising your machines cooling system. If the chip's temperature gets too high while in use, in particular in summer, you might want to install an additional fan to blow some cool air on the chip.

Have fun!

 

Mieze 😺

Edited by Mieze
Fixed a typo
  • Like 1
  • 1 month later...
Posted (edited)

Utility rtl812xtool

 

Spoiler

fabio@Pro-di-Fabio ~ % sudo rtl812xtool -s en0

    txPackets: 7100

    rxPackets: 11760

    txErrors: 0

    rxErrors: 0

    rxMissed: 0

    alignErrors: 0

    txOneCollision: 0

    txMultiCollision: 0

    rxUnicast: 10423

    rxBroadcast: 577

    rxMulticast: 760

    txAborted: 0

    txUnderun: 0

    txOctets: 2935558

    rxOctets: 10956570

    rxMulticast64: 0

    txUnicast64: 7014

    txBroadcast64: 15

    txMulticast64: 71

    txPauseOn: 0

    txPauseOff: 0

    txPauseAll: 0

    txDeferred: 0

    txLateCollision: 0

    txAllCollision: 0

    txAborted32: 0

    alignErrors32: 0

    rxFrame2Long: 0

    rxRunt: 0

    rxPauseOn: 0

    rxPauseOff: 0

    rxPauseAll: 0

    rxUnknownOpcode: 0

    rxMacError: 0

    txUnderrun32: 0

    rxMacMissed: 1056

    rxTcamDropped: 0

    tdu: 0

    rdu: 0

 

Edited by Alpha22
  • Like 1
  • 3 weeks later...

Here is Version 1.1.2 (build 1.1.200) of RTL812xLucy, which implements a few number of changes to improve compatibility with AMD-based hackintoshs:

  • Also enables PCIe I/O space of the RTL812x chip to resolve an issue with MMIO not working on certain socket AM5 systems.
  • Fine grained control of ASPM, so that states L0s and L1 can be enabled/disbaled individually in the kext's Info.plist.

RTL812xLucy-V1.1.2-build-1.1.200.zip

  • Like 3

tested and working

kextstat | grep RTL812xLucy
Executing: /usr/bin/kmutil showloaded
No variant specified, falling back to release
   78    0 0xffffff80041e5000 0x66000    0x66000    com.insanelymac.RTL812xLucy (1.1.200) 52B1F25A-28BB-32BB-974F-8D78C4D9AC70 <52 19 7 6 3 1>

 

  • Like 1
×
×
  • Create New...