J'ai réécrit mon script en m'inspirant du .bat (pour ne télécharger que pendant 1 seconde); je l'ai réorienté "test de peering" (la neutralité c'est important certes, mais la majorité reste le traffic HTTPS), du coup une liste JSON de fichiers à télécharger serait très intéressante à mutualiser.
#!/usr/bin/env python3
import subprocess
from statistics import mean
def measure_bw(url):
cmd = 'curl --fail --location --max-time 1 -4 -s --write-out "%{time_namelookup} %{time_connect} %{time_starttransfer} %{time_total} %{size_download}" -o /dev/null '
cmd += url
status, output = subprocess.getstatusoutput(cmd)
time_namelookup, time_connect, time_starttransfer, time_total, size_download = [float(x.replace(',', '.')) for x in output.split()]
took_transfer = time_total - time_starttransfer
bandwidth_bytes_per_sec = size_download / took_transfer
bandwidth_mbit_per_sec = bandwidth_bytes_per_sec * 8 / 1000000
return bandwidth_mbit_per_sec
def measure_bw_average(url, runs=3):
results = list()
for i in range(runs):
bw = measure_bw(url)
if bw:
results.append(bw)
return mean(results)
test_files = {
'bouygues': 'https://bouygues.testdebit.info/1G.iso',
'k-net': 'https://k-net.testdebit.info/1G.iso',
'ikoula': 'https://ikoula.testdebit.info/1G.iso',
'scaleway': 'https://scaleway.testdebit.info/1G.iso',
'ovh': 'http://www.ovh.net/files/1Gio.dat',
'aws us-east-1': 'https://github.com/balena-io/etcher/releases/download/v1.5.109/balena-etcher-electron_1.5.109_amd64.deb',
}
results = dict()
for host, url in test_files.items():
print(host, "%.1f Mbits/s" % measure_bw_average(url))
Depuis que je suis passé chez sosh (depuis Red), c'est beaucoup mieux chez ovh et ikoula (qui étaient 10 fois plus faibles)
$ python test.py
bouygues 298.8 Mbits/s
k-net 280.9 Mbits/s
ikoula 287.1 Mbits/s
scaleway 298.8 Mbits/s
ovh 295.3 Mbits/s
aws us-east-1 26.4 Mbits/s