Getting Gigabit Networking on a Raspberry Pi 2, 3 and B+

tl;dr You can get Gigabit networking working on any current Raspberry Pi (A+, B+, Pi 2 model B, Pi 3 model B), and you can increase the throughput to at least 300+ Mbps (up from the standard 100 Mbps connection via built-in Ethernet).

I received a shipment of some Raspberry Pi 2 model B computers for a project I'm working on (more on that to come!), and as part of my project, I've been performing a ton of benchmarks on every aspect of the 2, B+, and A+ Pis I have on hand—CPU, disk (microSD), external SSD, external HDD, memory, and networking.

I've tested the onboard LAN port (rated as 10/100 Fast Ethernet, and driven through the onboard USB 2.0 bus), and a few different 802.11n WiFi cards, and the raw throughput speeds ranged from ~45 Mbps with the 802.11n cards (with a very strong signal) to ~94 Mbps with the onboard LAN.

I then purchased a TRENDnet USB 3.0 Gigabit adapter from Amazon to test on my Pi. After configuring the interface by editing /etc/network/interfaces and adding a line for the new eth1 adapter, I ran standard iperf benchmarks on all the interfaces and found the following results:

  • Internal LAN (10/100): 94.4 Mbits/sec (11.8 MB/sec)
  • USB 802.11n WiFi: 44.5 Mbits/sec (5.6 MB/sec)
  • USB Gigabit LAN (10/100/1000): 321 Mbits/sec (40 MB/sec)

(These were as measured on a Pi 3—the model 2 and B+ have slight speed differences which I'll enumerate in a chart below).

Or, in a nice graphical format (note that this chart is slightly out of date as of early 2016):

Raspberry Pi Network Interface Speed Comparison - Internal LAN WiFi Gigabit

For certain use cases, this more-than-doubled bandwidth can be extremely beneficial (e.g. streaming full-res HD video, streaming and processing large amounts of data, etc.). However, for many real-world use cases, the Pi's other subsystems (CPU and disk I/O especially, since I/O is on a single, shared USB 2.0 bus) will limit the available bandwidth.

If you're hungry for faster networking, and you can't wait until the Raspberry Pi 4 (or whatever starts including Gigabit Ethernet), know that you can more-than-double the built-in bandwidth capacity.

Here's an additional graph, comparing speeds between the B+/A+ and the model 2/3 (the onboard LAN has been dramatically improved, and I double-checked these results to confirm the increased download bandwidth!):

Raspberry Pi 2 and model B+ network throughput speed comparisons

Real-world implications

In working on building a high-performance cluster of Raspberry Pi 3s for my Dramble cluster, I wanted to see just how scalable I could make the Nginx load balancer (which was also acting as a reverse proxy cache).

After making sure the Nginx configuration could support thousands of requests per second on the 4-core Pi, I discovered that I was easily able to saturate the onboard 10/100 LAN at about 95 Mbps serving cached content at around 1800 requests/second.

Switching to a Gigabit adapter almost doubled the throughput, and I was able to serve about 5000 requests/second at a rate of 200 Mbps!

So, if you need the raw throughput increase, using a USB 3.0 Gigabit adapter will definitely take you further than using onboard LAN—at the cost of slightly higher total power consumption and an unsightly dongle hanging off the Pi :)

Further reading:

Comments

Hi there,
Good post.
Have you tried teaming USB 3.0 Gigabit adapter's on the pi2?
Wayne

Yes; please see the second graph, which includes benchmarks for both the B+ and Pi 2 model B.

I don't think you understood his comment. He was talking about using LAN teaming, using two USB3.0 gigabit adapters banded together on a single Rpi2 for an overall bandwidth of 2gbps. Maybe you should test this against the Odroid C1's integrated gigabit LAN controller to see what is faster. The C1 wouldn't require the extra hardware/power/costs so it might already be a win.

Ah, I see. Misread the comment.

In that case, I don't think it would do much of anything—we're hitting USB 2.0's maximum real-world bus throughput way before even the first 1 Gbps adapter is saturating it's bandwidth.

I used the same adapter on my MacBook Air with USB 3.0 and was able to get about 960 Mbps, so I know the limit isn't the adapter :)

2x gigabit usb teamed together might reach the 480Mbps usb root's throughput (enough to handle 2x USB 2.0 at 30MB/s or 240Mbps each)

It might, but given that the bottleneck is clearly not in the GigE/USB3 adapter, it seems unlikely that loading the RPi with another active USB device would result in more throughput. My guess is that two adapters would actually be slower.

It would be a fun practical example but the author is right. Bonding two usb network interfaces would be mooted because they would be sharing the same usb bus. Just one USB adapter sounds like it is already maxing out the one use bus on the pi. I believe the pi mentioned shares the only USB bus with the network Port and the four USB ports.

From the Raspberry Pi documentation on USB:
"The Raspberry Pi also has only one root USB port: all traffic from all connected devices is funnelled down this bus, which operates at a maximum speed of 480mbps."

So no matter how many adapters you team up, it will still be limited to a total of 480Mbps.

Have you tested copying the test files to different file system?
Probably you can provide a comparison for transfer speed to ext4/ntfs partition?

Hi!

Do you know how to configure the ethernet adapter in Openelec (Kodi)? Because there is not /etc/network/interfaces file anymore so I don't know where to add the new interface. I've been searching what is the new file to configure ethernet interfaces but i couldn't find anything..

I am curious as how exactly you edited the file. I am getting ready to do this same thing but I'm not very Linux savy. I've been learning but still don't understand alot of it. Just want to know what the extra line is. Thank you.

You will have to use the nano text editor. Just google this question, there are several different parameters

What is the difference between "Gigabit - Download" and "Gigabit - Iperf", what is the huge difference attributed to?

The iperf metric is simply measuring raw network throughput—how fast can the interface send or receive packets? The download is also measuring how fast the system can accept the packets, transfer them to a storage system, write to disk, etc.

Very useful info, kudos for taking the time to publish it.

On a related note, I have a Pi 2 connected to a gigabit switch and a Mac connected to the same switch. I know my throughput should be around the 11MB/s mark (since the Pi 2 has only a 100Mb port), but doing a netcopy (nc) between the computers always averages 2.6MB/s, only maxing at 6MB/s occasionally.

Any idea why, or what tools/articles I can use to find out where the slow down is occurring?

Thanks

Try running the iperf benchmark instead of doing a file copy between the two; if you do a file copy, a lot of the USB bus' bandwidth gets sapped by the filesystem read/write operations, and that reduces the amount of throughput the Pi can devote to the network connection.

In real world use (e.g. anything that involves files on the server, and can't be cached in RAM, throughput through any network interface tops out around 4-6 MB/sec.

Are you transfering to the SD Card? That could be part of it. Also, what else is plugged into the Pi? That will make a difference.

Can you tell precisely how did you add the line for the new adapter, transcribing the all editing? How can you know for sure that the raspbian will recognize the new adapter as "eth1"? Thanks!

Unfortunately, 222 Mbps is not really fast... Wonder why the designers chose to use a 10/100 instead of a 10/100/1000...

Main reason is cost. The primary goal of the Pi is to produce a low-cost computer for learning -- their goal on each release is to hit the $35 price point. Presently that means USB 2.0 bus, which limits the I/O to 480Mbs.

Hello, thanks you for sharing your experience.

A question, but the raspberry2 not have only an usb2 port with limited bandwidth?

Thanks.

The Pi 2 has one USB 2.0 bus shared with four USB 2.0 ports. So if you tried adding two Gigabit ethernet interfaces, they'd have to share that maximum throughput.

Say one were to have an external drive connected to the pi, and a USB Ethernet cable. Would the ~speed of a file off of that external drive over the network be limited to around 111mbps? (222mbps/2, due to the fact that both the ethernet and usb drive is sharing the same bus).

Thanks!

Yes, more or less; all the ports share the same USB bus, and it's theoretical limit is ~480 Mbps, but in the real world that's more like 200-250 Mbps total.

so theoretically, if you did not use a gigabit controller, you could team up a usb wifi dongle and the onboard ethernet to get slightly higher throughput than just the ethernet alone? (they are all going through the same usb controller, but since you've proven you can get double the bandwidth out of the bus by using a gigabit dongle, so the usb bus itself is capable of a higher capacity)

or would the overhead used by combining the NICs negate limit the throughput anyway?

I'm not sure, since I haven't tested, but since everything's on one bus, it would probably still max out around the same total throughput; and the more USB devices, the more contention in the controller, so total maximum throughput could decrease (but only a very small amount) the larger the number of devices.

Very good article Jeff,
Will PI 2 board Ethernet port support GigE Cameras?

Thanks tons for this post mate! I am looking at setting up ownCloud on my Pi2 and I was pretty much sold on doing so until I saw it only had a 10/100 ethernet connection. My home connection is in excess of 100/100mbps and I wasn't prepared to take a bottleneck... Your post breathed new life into my plan!

I would suggest the Orange Pi Plus (or Banana Pi) over the RPi2B as not only does it have a native 10/100/1000 LAN port but a SATA port as well. Would be perfect for cloud storage.

Funny you mention that—I actually just received an Orange Pi Plus for testing in the mail. I'll be blogging about performance comparison with Rasbperry Pi soon!

What is the theoretical transfer speed of the MicroSD chip in the RPi2? Could you be saturating that point?

Hi, i hardly try to find the network devices on my Raspberry Pi 2 , which i use with OSMC(Kodi), got a clue for me, where to find it ?

Greetings
Thomas from Germany

Hey Jeff, Thanks for submitting the article and all the comments. Some really useful learning information.

For the people submitting media player requests, the author of this article states pretty clearly that he is performing theoretical tests for another project involving a cluster of Raspberry Pi devices. I came here from a Google search on measuring network performance for a Raspberry Pi based media centre.

I would not expect to find the answer to your environment specific requirements. This isn't an attack, just to help people not live in false hope :).

Hi Jeff. Great job you did! This is what I was looking for. I'm streaming a usb webcam with mjpg-streamer on a RPi and the LAN speed is the bottlneck to achieve a decent framerate. I have a question: Have you connected the "USB 3.0 to Ethernet adapter" to a dual usb Y-cable getting power from 2 ports of the RPi (as it's a power hungry USB 3.0 device) or you just plugged it into a single port? Can you also guide me through the process of what line should I add to the configuration file? Many thanks.

Nope, just plugged directly into the port on the Pi itself, and this provided enough power.

Thanks Jeff. Do I just have to change eth0 to eth1 in /etc/network/interfaces or is there anything else I have to change?

Hi Jeff, thats a great Tip to expande the Lan up to 1 Gbit. Please explain for me by a smal howto, what i have to do for
"/etc/network/interfaces and adding a line for the new eth1 adapter" !
Which entry must be added to the file? Seeking many months for a solution as you describe it. I use the Raspi as VPN tunnel to be accessible externally and i need much more than 100 mbits. :-)

Thanks

Frank

I found some additional information here: http://www.dxsdata.com/2015/06/openelec-configure-static-ip-via-ssh-cons...

The network details are saved under /storage/.cache/connman
You will need to allow the OpenELEC box to see the device (and may even need to have it acquire a DHCP address) first. Then you will be able to edit the entry as needed to match your desired network configuration.

Hi Jeff!

Thanks for the article, it's great! Was really convinced so I went out and bought a pi after reading it.
I've been trying to mimic your setup though I can't seem to break 16MB/s so I wanted to ask if you had to install any drivers for the USB Gigabit adapter or was it just plug and play? Because I did the latter and it seems to work perfectly (aside from the fact that it's only running on 16MB/s lol).

Well Damn.

So, I bought the same TRENDnet USB 3.0 Gigabit adapter from Amazon, thinking hey, $10 to cut my transfer time in half, no problem.

Plugged it into my Pi2 OpenElec setup, it was auto discovered and added as eth1 with no issues.

Copied a 3Gb movie from another machine to the external hard drive plugged into the Pi, and sadly got the exact same (if not slightly worse) transfer speeds.

Any thoughts? Was the doubled network speed cut in half by sharing the USB bus with the External HDD?

Was the doubled network speed cut in half by sharing the USB bus with the External HDD?

Unfortunately, that's exactly the problem. You only have one USB bus on the entire Pi, so all it's bandwidth is split up between the LAN and all four USB ports.

So really there is no point to doing this?

It depends on what you're trying to do; if you want to use the Pi as a router or other kind of network device that doesn't need to copy data across to another connected device, then raw network transfer is the most important aspect, and in that case, this could make or break your use.

If you need to copy data to/from another device attached via USB, you probably won't get much improvement (if any) over the built-in LAN.

Did you do full duplex tests with iperf?

Yes; the same tests resulted in ~960 Mbps between my Macs or between my Mac and an ODROID-C2.

Nice, I am going to setup a PI3 + USB Gbit in the next few weeks to just download data from the internet and store it on NFS shares (same Gbit switch), so full duplex performance was a worry of mine.

Bought a trendnet gigabit adapter which works without having to configure it or anything... but still seem to be getting 100Mbps transfer rates... exactly the same as using the standard port...

This whole thread doesn't make sense. It's calling for a USB 3.0 Adapter when all the Pi's have USB 2.0.....

There are a number of reasons you might not be getting more than 100 Mbps of throughput:

  1. How are you measuring? If you use iperf, and don't have any other things running on the Pi, then it should test raw data throughput. If you use Internet traffic, that could be limited by your router, by your cabling, by your ISP... many different levels.
  2. What are you connected to? If you use iperf and one of your two computers only has a 100 Mbps interface... then that's the maximum throughput iperf can handle. You have to measure raw throughput between two devices that both have Gigabit connections, using a switch, hub, or router that also supports Gigabit ethernet.
  3. What is your cabling? Do you have Cat5e or Cat6 network cable? Do you have the USB adapter plugged into a hub or the Pi directly? Do you have a switch in between that only supports 100 Mbps?

I outlined the exact testing setup I used—Pi 2B and Pi 3B connected directly to a USB 3.0 Gigabit adapter, connected to a Cat5e cable, connected to a Gigabit switch; then a Mac connected directly to a USB 3.0 Gigabit adapter, connected to a Cat5e cable, connected to the same Gigabit switch.

Then I made sure there was nothing else running on either the Pi or Mac, and I started up iperf and measured the throughput four times, discarding the first test result and averaging the last three.

Thank You !!!
I tried with the Orico USB 3.0 HUB with Gbit LAN and it works :)
Normal LAN speed on my Pi2 with Iperf was 97 mbits.
Wlan Stick between 20 and 54 mbits.
With the Orico 300 mbits.
If anyone want to know how to change the interfaces:

"auto lo

iface lo inet loopback
iface eth0 inet dhcp
iface eth1 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp"

I purchased a raspberry pi 3 model b and the same trendnet usb3 gigabit adapter you mentioned in your post and installed the latest version of raspbian. when measuring the speed with the well known site speedtest by ookla the download speed is not exceeding 6 Mb/s. My ISP offers me 300 Mb/s and doing the same measure with my laptop with the same Trendnet adapter I get around 280 Mb/s. The only thing connected to my Pi is this Usb3 adapter nothing else, no keybord, no mouse... So where is the problem? How you managed to obtain that speed?

Do you get the same result with the built in LAN? If so, it sounds like it could be a cabling issue or something else.

If the USB 3.0 Gigabit Adapter isn't plugged directly into the Pi 2/3 and you are using a hub or extension, that could be your issue. Ask me how I know?

Hey,
The Pi's only have USB 2.0 ports... So how did you get a GB ethernet adapter for USB 3.0 ports to work with 2.0 ports?

Well, the way this works is USB 2.0 offers a maximum theoretical throughput of 480 Mbps. The USB 3.0 Gigabit adapters have a maximum theoretical throughput of 1 Gbps.

In real-world terms, for raw throughput, the USB 3.0 Gigabit adapter can saturate the entire USB 2.0 bus bandwidth on a Pi—meaning it gets around 200-220 Mbps traffic even on USB 2.0.

It's just a marketing thing that Gigabit adapters don't exist for USB 2.0—the chipset works the same on 2.0 vs. 3.0 in terms of network traffic, and the USB 3.0 adapter (which works fine on 2.0) sends as much data as the bus supports.

Hi,

I went out and brought a new Pi3 after reading this to do something similar and monitor my ISP bandwidth, which tops out at 200mb/s... I brought a TP Link usb3 gigabit adapter (UE300(UN)) as the easiest one i could get hold of. Unfortunately this adapter tops out about 20mbit/s when running speediest-cli on the pi. The same adapter and cable plugged into my retina MacBook pro (over USB3) gets the full 20ombit/s speed down from ISP in the Mac speedtest app.

The built in network of the PI works at 60-80mb/s.. it seems like the speedtest cli can choke sometimes, i've seen even it go as low as 20mb/s, though that was a one off so far with my tests.

Is it worth trying to get the exact same model as your article lists?

I've tried disabling the wifi and bluetooth modules in the boot config, hoping that could free up some bandwidth.. not sure how to disable the built in ethernet port too to free it up. I'm running the pi headless so no keyboard or mouse connected, though obviously the USB ports are there.

Basically disappointed as at this point I can't manage to test my internet speed as i'd hoped I could do :/

Any suggestions, ideas really appreciated!

Cheers

Strange—there could be a few things going on to prevent the full bandwidth from being available:

  1. Are you plugging the adapter directly into the Pi? USB Hubs can really slow down downstream devices when used with the Pi
  2. When you do the speed testing, is it also writing a file to the Pi's drive? If so, that takes away a lot of the network bandwidth.
  3. What else besides the adapter is plugged into the Pi? Some USB devices can also screw with data rates on the USB 2.0 ports.

I've had good luck with TP-Link adapters in the past, and especially if it works fine with your MacBook Pro, it doesn't seem like it would be the problem.

I've having the same problem. I've tried the UE300 on an Asus Zenbook and a couple of Chromebooks and I can only get about 30 to 40 Mb/s. The Zenbook is running Debian Sid with kernel 4.11.11 and I'm not sure what the kernel the Chromebooks are on. They're all connected to USB 3.0 ports.

[ 1648.947011] usb 4-1: new SuperSpeed USB device number 8 using xhci_hcd
[ 1648.967664] usb 4-1: New USB device found, idVendor=2357, idProduct=0601
[ 1648.967669] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=6
[ 1648.967673] usb 4-1: Product: USB 10/100/1000 LAN
[ 1648.967676] usb 4-1: Manufacturer: TP-LINK
[ 1648.967678] usb 4-1: SerialNumber: xxxxxxxxx
[ 1648.969466] cdc_ether 4-1:2.0 eth0: register 'cdc_ether' at usb-0000:00:14.0-1, CDC Ethernet Device, xx:xx:xx:xx:xx:xx
[ 1652.801344] cdc_ether 4-1:2.0 enxd46e0e0e1adc: renamed from eth0

I too am having the same issue. Just upgraded my internet speed to 300+ and wanted my Pi to continue making hourly logs of my speed. I purchased the USB Adapter listed on this page and it will not go over 90mbps. I too am using speedtest-cli for tests.