Pro měření rychlosti internetových přípojek jsou veřejné servery jako Ookla, Cloudflare Speed Test nebo CESNET speedtest zpravidla dostatečné. Jiná situace ovšem nastává, když stojíme před úkolem změřit propustnost lokální sítě. Protože internetová přípojky bývá obvykle pomalejší než lokální síť. Pro tyto scénáře se nabízí několik způsobů měření. My si ukážeme jak na to s open source softwarem iperf a LibreSpeed. Mimochodem, druhý jmenovaný je používán právě pro CESNET speedtest.

iperf3

Unixový iperf běží nepřekvapivě v příkazovém řádku. Do Debianu jej nainstalujeme obligátním sudo apt install iperf3, do macOS brew install iperf3, ale najdeme jej samozřejmě také v jiných distribucích. Za zmínku stojí, že macOS verze neukazuje v klientském módu Retr (Retransmissions), ať je zbytečně nehledáte. Serverovou stranu spustíme jednoduše přes iperf3 -s. Jednodušší to být nemůže.

Klientskou stranu spustíme neméně snadno přes příklad pro IP adresu iperf serveru 192.168.1.100:

$ iperf3 -c 192.168.1.100

Connecting to host 192.168.1.100, port 5201
[  5] local 192.168.1.00 port 40922 connected to 192.168.1.100 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   284 MBytes  2.38 Gbits/sec    0   1.50 MBytes
[  5]   1.00-2.00   sec   281 MBytes  2.36 Gbits/sec    0   1.62 MBytes
[  5]   2.00-3.00   sec   281 MBytes  2.36 Gbits/sec    0   1.62 MBytes
[  5]   3.00-4.00   sec   281 MBytes  2.35 Gbits/sec    0   1.62 MBytes
[  5]   4.00-5.00   sec   280 MBytes  2.35 Gbits/sec    0   1.62 MBytes
[  5]   5.00-6.00   sec   281 MBytes  2.35 Gbits/sec    0   1.62 MBytes
[  5]   6.00-7.00   sec   280 MBytes  2.35 Gbits/sec    0   1.62 MBytes
[  5]   7.00-8.00   sec   280 MBytes  2.35 Gbits/sec    0   1.62 MBytes
[  5]   8.00-9.00   sec   281 MBytes  2.36 Gbits/sec    0   1.62 MBytes
[  5]   9.00-10.00  sec   280 MBytes  2.35 Gbits/sec    0   1.62 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  2.74 GBytes  2.36 Gbits/sec    0            sender
[  5]   0.00-10.00  sec  2.74 GBytes  2.35 Gbits/sec                 receiver

Abychom předešli rozčarování, před spuštěním speedtestu bychom si měli zkontrolovat linkovou rychlost síťověk. Na macOS přes ifconfig en0 | grep media. Na Linuxu například přes ethtool enp2s0 | grep Speed. Označení síťvých rozhranní se samozřejmě liší případ od případu. Za zmínku stojí i některé přepínač, např. -P 4 spustí 4 paralelní připojení. Přepínač -t 30 spustí test po dobu 30 sekund na místo defaultních 10 sekund. Přepínač -R prohodí testovací strany.

Doplňme, že pro rychlosti nad 10 Gbit/s už bychom ke spolehlivosti potřebovali přímý přístup do paměti RDMA a upravený tooling.

LibreSpeed

Na scénu přichází měřící open source projekt LibreSpeed, ke kterému se připojujeme běžným webovým browserem. Tedy, můžeme se k serveru připojit i přes speedtest-cli, ale základem je v obou případech LibreSpeed server.

Nejsnadnější spuštění je přes Docker Compose:

compose.yml
services:
  librespeed:
    image: ghcr.io/librespeed/speedtest:latest-alpine
    container_name: librespeed
    restart: always
    environment:
      - MODE=standalone
   ports:
     - '8080:8080'

Případně můžeme použít Golang verzi image: minimages/librespeed-speedtest-go. Existují i další implementace. Do browseru pak stačí zadat http://IP:8080. Protože měření budeme používat pro lokální síť a přenášené informace nejsou citlivého charakteru, není třeba před LibreSpeed předřazovat reverzní proxy. Pokud tak přesto učiníme, je třeba zapnout na reverzní proxy pouze protokol HTTP/1, jinak můžou být rychlosti v testech zkreslené.

Automatizace s MySpeed

Pro hračičky lze doplnit, že LibreSpeed lze kompbinovat s open source automatizovanou analytikou MySpeed, který podporuje backendy LibreSpeed, Ookla a Cloudflare.