The Realtek RTL8126 chip we are testing today is so far the most suitable for Raspberry Pi 5. It is capable of 5 Gigabit Ethernet at full speed. TCP iperf3 throughput peaks at 4.7 Gbps. It doesn’t overheat. And it doesn’t excessively utilise the Raspberry Pi 5 CPU.
This particular one is sold under the iocrest brand. Like the other boards and adapters there is no increst branding on it and it will likely be sold under various brands. The RTL8126 chip is the key component here.
Raspberry Pi 5 with 5 Gigabit Ethernet network adapter
How did we connect it to the Pi? Via PCIe bus. We breakout the Raspberry Pi 5’s PCIe connector via Pineboards (aka Pineberry Pi) board to M.2 M-key slot. And in that slot we install the iocrest 5 Gigabit Ethernet network adapter – that’s the black M.2 module, plus a PCB with RJ-45 connector on a grey ribbon cable.
iocrest 5 GbE adapter connected to Raspberry Pi 5 via PCIe Gen 3 linkCloser look at the adapter
Here is how it looks from PCI device perspective.
Performance
It has no problem negotiating full duplex 5 Gigabit Ethernet and filling the interface with traffic fully.
5 GbE Full duplex
iperf3 with default TCP settings peaks at 4.7 Gbps up and down. More parallel streams don’t improve the result any further. This is in PCIe Gen 3 mode.
Full 5 Gigabit Ethernet throughput in PCIe Gen 3 mode
Just for the record, if we downgrade PCIe bus to Gen 2 link speeds, we are talking 3.43 Gbps down and 3.31 Gbps up iperf3 TCP throughput-wise.
Throughput in downgraded PCIe bus to Gen 2 mode
Thermal footprint
Fully loaded by TCP traffic, I see temperature of 81.2° C (178° F) on the top surface of the RTL8126 chip. Yes, it is on the warmer side, but Raspberry Pi 5 SoC runs quite warm too and it is nowhere near 122° C temperatures I observed on this “hot” 10 Gigabit Ethernet adapter.
Chip temperature, installed in Intel NUC with M.2 slot
By the looks of it, there is no temperature sensor on the PHY so I can’t measure internal temperature.
CPU utilization and temperature of fully loaded adapter with TCP traffic
Linux software support
I happened to have Raspberry Pi OS with 6.8.0-rc7 kernel running on the Raspberry Pi 5. Out of the box, the adapter did not work. iocrest included driver download link pointing to this Chinese website but I am not so sure I want to use that one.
This adapter in PCIe Gen 3 mode draws about 1.5 W in idle, and 2.1 W under full iperf3 load.
Switching the adapter to Gen 2 mode doesn’t make any power savings. I measured 0.1 W less in Gen 2 mode.
The whole setup of Raspberry Pi 5 with fan, Pineboards PCIe adapter, and this 5 GbE adapter in PCIe Gen 3 mode draws about 5.1 Watts in total under full iperf3 load.
Does it work on Windows 11?
Yes, it does. I installed one in Intel NUC 12th generation. It runs at full speed full and Gen 3 x1 mode.
Windows 11 driver (as of May 2024) downloaded automatically via Windows Update only allows this adapter to use 2.5 GbE. To unlock 5 GbE we download driver directly from Realtek’s website and we are all set.
Driver from Realtek’s website with full 5 GbE support5 GbE full duplex with driver from Realtek’s websiteIntel NUC with 5 GbE RTL8126 adapter
With the adapter inserted in M.2 M-key slot, we won’t be able pop the NUC bottom lid back on. The adapter is just a bit too tall.
Bottom lid won’t fit with the adapter installed
Throughput also looks good. I might revisit Windows throughput testing tools at some point. But for now, I take 4.74 Gbps down and 4.42 Gbps up speeds. Increasing number of parallel streams did not improve throughput in any way.
Windows 11 throughput test
For the record, Jumbo frames seem to be supported but I had no reason to explore this further this time.
Jumbo frame support on Windows 11
Summary
As I mentioned towards the beginning, 5 Gigabit Ethernet based on Realtek RTL8126 chip seems to strike the perfect balance for Raspberry Pi 5. It delivers 4.7 Gbps up and down, doesn’t consume much power, and doesn’t produce excessive amount of heat.
Long-time test will tell how it actually performs but for now I am happy with what I’ve seen.
From driver perspective, I am wondering if the latest Linux kernel supports this chip natively or if I can enable the right kernel module manually.
It is refreshing to be able to test hardware which actually has a product name :) TP-Link TX401 is a 10 Gigabit Ethernet copper PCIe adapter.
TP-Link TX401 PCIe 10 GbE card
How to connect standard PCIe card to Raspberry Pi 5
I am testing on Raspberry Pi 5 and Intel NUC. Both do have an M.2 M-key slot and they won’t take this card natively, will they?
Pineboards (previously known as Pineberry Pi) makes a great PCIe Gen 3 compatible board that breaks out Raspberry Pi 5 PCIe connector to M.2 M-key slot. And from there we can use another adapter – MZHOU M.2 to PCIe 4X Adapter. It allows us to insert a standard size PCIe card into M.2 M-key slot.
Pineberry Pi M.2 M-key adapter -> M.2 to PCIe adapter -> PCIe cardPineberry Pi M.2 M-key adapter -> M.2 to PCIe adapter -> PCIe card
The Ethernet adapter is correctly recognised. We just need to build a custom Linux kernel with AQC107 kernel module enabled. Steps by steps instructions are here for your reference. They work for all AQC107 based adapters I’ve tested.
It negotiates 10 Gbps Full duplex link with my switch.
But it only works in PCIe Gen 2 mode on Raspberry Pi 5 in this setup. That means that throughput will be significantly limited to 3.44 Gbps download TCP speed and 3.07 Gbps upload. Using more parallel streams did not help in any way. We are limited by the 4 Gbps throughput of PCIe Gen 2.
I was not able to make PCIe Gen 3 work using this setup. Understandably, high-speed buses don’t like the extra connectors and adapters.
Limited throughput due to PCIe Gen 2
Updated: It wasn’t available back then when I tested this, but Pineboards now sells uPCIty Lite HAT for Raspberry Pi 5 which completely removes the need for the intermediate MZHOU adapter.
How to connect standard PCIe card to Intel NUC
The same M.2 M-key to standard PCIe card adapter works with my Intel NUC 12th Generation.
Standard PCIe card in Intel NUCStandard PCIe card in Intel NUC
Windows 11 automatically downloads the latest AQC107 driver using Windows Update.
Driver is downloading
It negotiates 10 Gbps Full duplex.
10 Gbps link
The TP-Link card successfully negotiates PCIe Gen 3 x4.
PCIe Gen 3 link speed and x4 width
PCIe Gen 3 allows us to achieve TCP throughput of 9.48 Gbps with no effort in the download direction and 9.49 Gbps in the upload. So this card can clearly do 10 Gigabit Ethernet, it just needs PCIe Gen 3 link speed.
Unlike unbranded Chinese adapters using the same AQC107 chip, this adapter is designed does not overheat. You can read some horror stories about chip temperatures of 122° degree Celsius (252° F) here.
Idle PHY temperature 58.1° CPCIe Gen 2 full load temperature 63.3° CTP-Link TX401 in PCIe Gen 3 mode on Windows 11 runs at normal temperatureCloser look at the heatsink
Summary
This adapter achieves nearly 9.5 Gbps of TCP throughput in either direction on Windows if you allow it to use PCIe gen 3 link speed.
Unfortunately, it only negotiated PCIe Gen 2 with Raspberry Pi 5 and Ethernet throughput is limited to about 3.4 Gbps. So for Raspberry Pi, I would recommend a 2.5 GbE adapter which it can fully handle. Alternatively, a 5 GbE adapter. Coming up next. Stay tuned.
It is a good product though with solid cooling. It still produces some heat but that’s a feature of the AQC107 chip. Its advantage is that it keeps the actual system CPU utilisation low even when fully loaded.
This journey started as an exploration of maximum PCIe capabilities of Raspberry Pi 5 (and hopefully Compute Module 5) platform. I am mainly interested in multi-gigabit Ethernet and Wi-Fi 7 adapters connected via the PCI Express (PCIe) x1 bus.
This time we are going to use a slightly different adapter. It is available from various sellers under different names, but they all look and work the same. I picked up one from “KALEA-INFORMATIQUE” which happened to be readily available in the UK.
Pineberry’s HatDrive! Bottom breaks out Raspberry Pi’s PCIe connection to M.2 M-key format, and that’s where this 10 Gigabit Ethernet adapter plugs into.
Raspberry Pi 5 with 10 GbE adapterDetail of the Ethernet adapter
We have connected everything, built a custom kernel, we can see the device, but the Ethernet interface is not coming up.
lspcilspci -v output
Look at this official product photo and my photo below. Spot one difference 😉
The official product photoThe actual correct setup
Did you notice the orientation of the white ribbon cable? The official photo got it wrong. The printed text on the cable needs to be on the top on one side, and on the bottom on the other one.
The eth1 interface and its IP details
What speeds did you get in PCIe Gen 2 mode?
After correcting the orientation of the flexible cable, the interface came up, negotiated 10 Gbps full duplex.
In PCIe Gen 2 mode, we got TCP throughput of 3.45 Gbps on the downlink and 3.07 Gbps in the upstream direction. Using more iperf3 parallel streams did not increase performance.
Downstream throughputUpstream throughput
Were you able to use PCIe Gen 3 mode?
Yes! And I got 4.63 Gbps of TCP downstream and 5.5 Gbps (potentially up to 6 Gbps) upstream.
PCIe Gen 3 downloadPCIe Gen 3 uploadI managed to get up to 6 Gbps in the upstream direction
That’s hot news… yes 122° Celsius hot!
This adapter has a thermal problem. It comes with a heatsink, but even in idle mode it overheats.
Detail of the heatsink107.7° C in idle
In PCIe Gen 3 mode with iperf3 test running, we are talking 122.1° C hot! The Pineberry board was very hot and you can literally burn your fingers by touching the heatsink.
122.1° C hot under loadIn PCIe Gen 2 mode, it ‘only’ runs at 96.4° C
Long story short. Don’t buy this adapter, unless you want to add a fan or significantly larger heatsink.
Toaster, 10 Gigabit adapter, aren’t they the same thing?
Make your own opinion based on these couple of thermal photos.
Thermal IR footprint of the Ethernet adapterAnd here is a toaster for scale 😅
This Ethernet adapter as well as the OWC 10 GbE Thunderbolt both use the same Aquantia AQC107 (part of Marvell now) chip. It does really good job at keeping CPU utilisation low. I’ve seen much cheaper 2.5 GbE adapters that hammer CPU with interrupts until the CPU just can’t take no more.
But, compare size of the two heatsinks. Unlike this one, the OWC adapters delivers good thermal results. Don’t take me wrong, it still runs warm, but not anywhere near.
Same AQC107 chip, massive thermal mass difference
Summary
On the positive side, this is the first 10 Gigabit adapter I tested which actually worked in PCIe Gen 3 mode on Raspberry Pi 5. I got TCP throughput of up to 6.0 Gbps.
As far as I can tell, the limit of Raspberry Pi 5’s PCIe bus is around 6 Gbps if you look at it through the iperf3 TCP traffic lens. AQC107 silicon does an amazing job at keeping the Raspberry Pi’s CPU utilisation low. This helps us get as much throughput as we can from the Pi. But it produces a significant amount of heat.
The fact is that this adapter overheats. Don’t buy it unless you wish to use it with a fan or design a much larger heatsink yourself.
Raspberry Pi 5 comes with PCI Express connection and a number of HATs (hardware attached on top) and Bottoms (the opposite of that) are now available for sale. That unlocks some very exciting options. Let’s see how fast can a 10 Gigabit Ethernet adapter on Raspberry Pi 5 go, shall we?
Pineberry’s HatDrive! Bottom proved to be really handy for converting Pi’s PCIe connection to M.2 M-key format. My Kalea-Informatique 10 Gigabit adapter uses exactly that, so that’s a match. Why did I choose this adapter? Very unscientifically this time – it was the first readily available and I was in a fail-fast mood :)
10 GbE adapter connected to Raspberry Pi 5Pineberry HatDrive! Bottom board with 10 GbE network adapterDetail of the AQC107 chip powering the network adapter
Enable PCIe port on Raspberry Pi 5
First things first. We need to enable the PCIe connector on the Pi.
sudo nano /boot/firmware/config.txt
# Enable the port
dtparam=pciex1
# Configure PCIe Gen
dtparam=pciex1_gen=2
Enable PCIe and configure mode
Build custom Linux kernel and include the Aquantia driver module
Vanilla Raspberry Pi OS doesn’t include the Aquantia AQC107 kernel module. So we need to burn a micro SD card with a vanilla Raspberry Pi OS Bookworm image, boot the Pi 5 and build a customised kernel.
After reboot, the LED light on the network adapter should come to life and we can capture first impressions.
Adapter recognised10 Gbps Full Duplexlspci -v output
Temperature
First thing you will likely notice is how hot this network adapter runs. It runs at 85° Celsius in idle which is slightly worrying and you can literally burn your fingers if you are not careful. Thumbs down on the thermal design front.
High idle temperature
Under load, surprisingly, it ‘only’ runs 0.5° warmer.
High temperature under load
How fast can it go then?
Raspberry Pi 5 officially supports PCIe Gen 1 and Gen 2. It is not certified for Gen 3.
PCIe Gen 1 mode
In this slowest mode, I got 1.71 Gbps/1.53 Gbps iperf3 TCP results with standard iperf3 settings. No jumbo frames, no other tweaks.
PCIe Gen 1 throughput
PCIe Gen 2 mode
Again, with standard iperf3 settings, I measured 3.44 Gbps/3.04 Gbps TCP throughput between 2 computers both connected to 10 Gbps switch ports via 10 GbE Full Duplex.
PCIe Gen 2 throughput
In idle conditions, this setup draws 7.5 W, and 8.9 W under 10GbE adapter iperf3 -R load (3.45 Gbps). Using more iperf3 parallel streams (the -P parameter) did not help at all.
Power draw
PCIe Gen 3 mode
The adapter supports PCIe Gen 3, but it doesn’t work with the Pi. The Pi is not certified for Gen 3, so I can’t say anything bad about this. The Ethernet adapter is not recognised in Gen 3 mode, and no interface is present in ip a. Sometimes the Pi will fail to boot.
According to dmesg, the Pi forced Gen 2 mode:
brcm-pcie 1000110000.pcie: link down
brcm-pcie 1000120000.pcie: Forcing gen 2
Forcing PCIe Gen 2 mode athough Gen 3 has been configured
I powered my Pi from M2 MacBook USB-C port. So I thought, I might be running into under-voltage issues. I tested the official Raspberry Pi 27 W (5 V * 5 A) AC power and it made no difference.
Did you upgrade Raspberry Pi 5 firmware?
Yes, I did. It is running the latest version available as of March 2024.
Latest firmware installed
Low CPU utilisation
One feature I really enjoyed is the extremely low CPU utilisation under load. I saw slower 2.5 GbE adapters hammer CPU with interrupts, but that’s not the case for this NIC. AQC107 does really good job at keeping the CPU cool.
Low Raspberry Pi 5 CPU load under network load
Cable analytics
Marvell supports Cable Diagnostics feature which uses TDR to measure cable length and detect Ethernet cable for defects. Unfortunately, it doesn’t seem to be supported on the AQC107 chip.
Cable Diagnostics not supported
Can you get 10 Gbps out of this adapter at all?
I am glad you asked. How does an Intel NUC with this 10 GbE adapter sound? I’ve just tested it, here you go.
Intel NUC with 10 GbE adapter
Summary
The high operating temperature really makes this adapter something I can’t recommend. With maximum throughput below 3.5 Gbps, I think you would be better off choosing a 2.5 Gigabit Ethernet adapter, which runs cool and delivers 2.35 Gbps/2.35 Gbps throughput.
Have you tested any other 10 GbE adapter? Did you get better results? Did you find any 2.5 Gbps Ethernet adapter that supports Cable Diagnostics? I am all ears.
What is a ‘key’? It is formed of the notch on the Wi-Fi adapter PCB, and plastic blob separating pins inside the M.2 slot. The idea is to prevent users from plugging incompatible cards to the slot, and avoid any ‘magic smoke events’. Here is more about M.2 and the individual key types if you are interested.
WLAN Pi upgrade kit
Since Intel adapters use E-key and WLAN Pi M4 uses A-key, we needed to build an adapter. Badger Wi-Fi has the upgrade kit in stock. It comprises of the Oscium M.2 A-key to E-key adapter, Intel BE200 Wi-Fi 7 adapter, and 2 little bolts to secure the adapter and the Wi-Fi module.
Here is how the ‘butterfly’ setup looks like. Intel BE200 sits onboard of the A-key to E-key adapter, installed in the M.2 slot.
We are ready to connect existing tri-band antennas, and assemble the unit.
Software support
Make sure to either upgrade Linux packages to their latest versions using sudo apt update && sudo apt upgrade command, or download and flash the latest WLAN Pi software image on your SD card. Release 3.2.0 supports Wi-Fi 7 Intel BE200 adapter out of the box with no effort whatsoever on your part.
Wi-Fi 7 in action
For this demonstration I use a consumer Wi-Fi 7 router TP-Link Deco BE85 BE19000. Simply because it is available, Wi-Fi 7 certified, and it supports 320 MHz channel width – not that one would deploy that in an enterprise environment, but mainly to test the maximum Wi-Fi throughput of the Pi.
A bug in macOS doesn’t allow Macs to correctly recognise Wi-Fi 7 networks. Instead of Wi-Fi 7 320 MHz wide network, my MacBook reports Wi-Fi 6 and 160 MHz wide channel. So, we will use another WLAN Pi and its Wi-Fi radio as a Remote Sensor in WiFi Explorer Pro – you need the Pro version to do this.
Nice, Wi-Fi 7 AP!
Wi-Fi 7 network
Connecting the WLAN Pi as a Wi-Fi 7 client only takes few lines of wpa_supplicant config.
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
Wi-Fi 7 network settings
And we have successfully connected the WLAN Pi as a Wi-Fi 7 client to the AP using this command.
Run this command to make sure the WLAN Pi requests an IP address from DHCP server running on the router:
sudo dhclient -i wlan0 -v
What channel are we using? 320 MHz channel width? Indeed.
Adapter and channel details
Before you ask, distance between the Pi and the router is sub 1 meter. What is the Wi-Fi data rate? We are using Wi-Fi 7 (EHT), 2 spatial streams, MCS 12 and 4096-QAM and short guard interval of 0.8 µs.
I hardly ever achieved MCS 13. To maintain MCS 12, I had to stay within about 1.5 meter distance from the router. I got best results with antennas position in this ‘V’ pattern.
My noise floor was -96 dBm and RSSI typically between -29 and -39 dBm.
V-shaped antenna placement
With a different client device designed for Wi-Fi 7 from the ground up (with professional quality antennas and placement), I would hope for slightly longer MCS 12 and MCS 13 range.
With the help of Oscium WiPry Clarity 6 GHz spectrum analyser connected to another WLAN Pi, we can monitor the life spectrum and see how much red the iperf3 test introduces. We are able to achieve download TCP speed of 2.27 Gbps and upload speed of 1.74 Gbps.
I used iperf3 -c 192.168.68.51 -P32 -R to test download speed, and iperf3 -c 192.168.68.51 -P32 for upload. Number of parallel streams set to 32 provided the best performance.
I was expecting 2.5 Gbps-ish throughput, which we have got quite close to. During the test, CPU of the WLAN Pi was running around 80 % utilisation, and interrupts were reaching 100 %. So, hardware of the WLAN Pi itself posed a bottleneck.
mpstat 1 300 -P ALL
High CPU utilisation due to interrupts
Orientation of the antennas mattered more than I expected to. Best position was a ‘V’ shape with antennas positioned away from the board. With AUX antenna placed 90 degrees relative to the Main antenna, data rates and throughput dropped. Perhaps there is RF noise from the board itself coming into play.
No, it will not, unless you make some bad choices. But, faster card will make your life easier and significantly speed up the image flashing process.
Tests performed
Flash and verify WLAN Pi 3.1.4 software image to the micro SD card using built-in card reader of MacBook Pro M2 and Balena Etcher app
Software image flashing process
Boot WLAN Pi M4 from the micro SD card. Measure how long it takes to boot from plugging the Ethernet cable in (and PoE power provided) to WLAN Pi home screen shown on the display
WLAN Pi M4 powered via PoE
Results
Sandisk High Endurance 32 GB U3 card is the default provided with WLAN Pi M4 by default. The U3 standard reall y makes a huge difference when it comes to writing to the card and that’s why it is our go to option.
Micro SD cards tested
From practical perspective, different size or even slightly slower card won’t really make your Pi boot any faster. If you make some bad choices and reuse an older class 6 card, you will spend extra 11 seconds of your life waiting for the WLAN Pi to boot every single time.
Flash WLAN Pi image
Effective speed
Boot WLAN Pi M4
Sandisk HE 32 GB U3
1 min 59 seconds
64 MB/s
28 seconds
Sandisk HE 256 GB U3
1 min 53 seconds
68 MB/s
28 seconds
Sandisk Ultra 32 GB U1
3 mins 54 seconds
24 MB/s
28 seconds
Samsung 8 GB Class 6
11 mins 29 seconds
8 MB/s
39 seconds
Compute Module 4 with built-in eMMC storage
Didn’t test
6.5 MB/s
27 seconds
Recommendation
Invest in a U3 or better card and benefit from fast write speeds. There is very little premium to pay. In future, you can reuse a fast card in other device like a dash cam, Raspberry Pi 5 workstation, or video camera.
I flash Micro SD cards few times a day (hello WLAN Pi team 😉), and I thought it might be a good idea to always have an SD card to Micro SD card adapter on me. The easiest way to do that is to insert one in your MacBook built-in SD card reader slot. But which one do you buy?
Supplied adapter
There is nothing wrong with this SanDisk adapter. But it sticks out of your laptop. You can’t leave it inserted in the Mac while travelling. And also, the Micro SD card might slip out of the adapter.
White OEM Micro SD to SD card adapter
To my surprise, this £2.60 adapter worked great… for a couple of weeks 😅 Until it disintegrated. It was designed for previous generations of MacBooks and it is not flush with the body of M1 MacBook, but it is still smaller than the full-size adapter.
You can shave off the grey plastic part, and make it even smaller. The white part allows you to easily remove and reinsert the adapter. No nails required.
The Micro SD card goes in the adapter from the side, so it won’t eject in your backpack or laptop bag.
It flashes cards at the exact same speed 61.8 MB/s as the premium £30 BaseQi. And it is easy to remove from the MacBook card reader slot.
BaseQi 420A
This adapter is primarily designed for those who want to expand storage capacity of their MacBook. And it does that really well. It fits perfectly inside SD card reader slot of 14″ M1 2021 MacBook. The problem is that it works ‘too well’. Once you insert the Micro SD card to it, it is very hard to remove the Micro SD card. Now, when you insert it into MacBook SD card reader, it is designed to stay there and again it does that ‘really well’.
Removal of BaseQi from the MacBook card reader takes 2 fingers and 2 nails. Yes, it takes significant effort.
Would I recommend it to someone who wants to use it to flash Micro SD card few times a day? No. It takes a huge effort.
Afterplug Ultra Slim Stick On SD and MicroSD Card Holder with Reusable Adhesive
Problem solved! This stick on card holder did the trick. I can reuse all my SanDisk SD card to micro SD card adapters. And I can carry a handful of them, label them and store the micro SD cards inside the adapters.