Investigating the network upload speeds

Last updated on

Since the beginning, all network transfer tests at had that strange characteristic where download speeds have been much higher than upload speeds. There's no reasonable explanation for this, providers don't throttle their upload bandwidth any more than the download bandwidth.

It's been a mystery for a long time, earlier attempts at finding the cause of the problem had all failed but in June this year, I decided to get to the bottom of this. VPSBenchmarks relies on a custom Speedtest library for running those tests and it turns out this library is not immune to bugs. Testing with the more well known speedtest-cli library shows that download and upload speeds are generally in the same ballpark.

The outcome of this investigation was that the VPSBenchmarks uploads are CPU bound on a single physical core. Why? Because it encodes the HTTP POST body before sending it over the wire. Since those payloads are fairly large, the encoding takes a lot of CPU resource and that becomes the bottleneck. This encoding is unnecessary and can be removed. Without it, uploads get into the 1Gbps range and are no longer CPU bound.

I made other changes on this occasion such as replacing the HTTP library with libcurl and more carefully choosing the size of the POST payloads but they didn't significantly impact the transfer speeds.

The main concern for VPSBenchmarks is to keep test results comparable between all servers and all providers, between past and future trials. If the "fix" was applied now to all future trials then past trials would be unfairly penalized. The solution I chose is to run both versions of the network tests on each server (starting in June), the old version will continue to be reported by default and will be used to calculate the grades until December. But VPSBenchmarks still records transfer speeds with the new version. You can see those network speeds by appending "?show_curl=true" to the networks_transfers page urls. For example, see the Linode trial that ran on July 15th.

In December, we'll only run the new version of the network transfer tests and we'll also recalculate grades for all trials in the previous 6 months using the new transfer speeds. It's a slow process but it will be well worth the wait!


VPS Screener

Find the VPS that fits your requirements in seconds


Best VPS 2020

Provider Finder

Share this page

Latest Tweets by @vpsbenchmarks


Investigating the network upload speeds Since the beginning, all network transfer tests at had that strange characteristic...
First EC2 C5a EPYC 2nd Gen benchmarks On June 5th 2020, Amazon EC2 made their new C5a instances generally available. Those instances are ...
New VDS line of servers at Contabo This week, Contabo is releasing a new line of VPS servers called VDS "Virtual ...


Be featured on VPSBenchmarks

Cloud Server Providers, would you like your products to be tested at

Check out our pricing page and sign up


We are proud to provide objective and impartial benchmark data on this website. VPSBenchmarks receives support from some of the providers featured here but all tests are conducted the same way regardless of our relationships with them.

If you find our benchmarks valuable, you can help by making your cloud purchases using the Provider Affiliate Buttons displayed throughout the site.

Latest trials

All tests that were recently conducted at VpsBenchmarks:

Start Provider
Aug 07 2020 Ramnode
Aug 06 2020 Kamatera
Aug 04 2020 Aruba Cloud
Aug 03 2020 Togglebox
Aug 02 2020 Vultr
Jul 30 2020 UpCloud
Jul 29 2020 MaxKVM
Jul 27 2020 Genesis VMs
Jul 26 2020 Amazon EC2
Jul 24 2020 LayerStack
Jul 21 2020 Google Compute Engine
Jul 19 2020 Amazon Lightsail