Hey, ta informacja jest tylko notką dla osób korzystających z Ubuntu 16.04 na stacji wirtualizacji.
FYI
Problem nie leży po stronie QNAP, a po stronie samego Ubuntu 16.04.
Co to za problem?
System Ubuntu 16.04 postawiony na wirtualizacji w QNAP (KVM i QEMU) ma kłopoty z wydajnością karty sieciowej VirtIO, które objawia się spadkiem prędkości karty sieciowej. Zmiana na kartę sieciową Intel nie rozwiązuje problemu, zmiana na Realtek stabilizuje prace karty sieciowej, ale nie pozwala osiągnąć maksimum jej możliwości.
Jak wygląda ten problem - jego rezultat?
Przeprowadzony test prędkości za pomocą
Test został przeprowadzony w tym samym czasie na dwóch symetrycznych linkach po 100Mbit.
Prędkości które osiąga host - czyli QNAP - serwer wirtualizacji:
Prędkości, które osiąga gość - czyli maszyna wirtualna w tym wypadku Ubuntu 16.04, to:
--- widać znaczący spadek prędkości, który najbardziej jest widoczny w uploadzie.
Żeby było ciekawiej, ten sam test przeprowadziłem na kolejnym gościu, ale na maszynie wirtualnej z Ubuntu wersją 18.04 i prędkości są takie jak w hoście - czyli poprawne!
Dla Waszej informacji aktualizacja Kernel w Ubuntu 16.04 do ostatniej wersji absolutnie nie rozwiązuje problemu.
A więc jeśli, ktoś używa Ubuntu 16.04 na KVM/QEMU to niech się liczy z brakiem maksymalnej wydajności maszyny wirtualnej i to jest kwestia tego systemu.
BONUS:
Jeśli, ktoś chce na własną rękę wygenerować sobie taki raport prędkości z polskich serwerów speedtest to podaje źródło skryptu, które w tym celu napisałem (wymagany speedtest-cli - FYI można łatwo uruchomić na QNAP'ie... to tylko pythonowy skrypt):
1. Zainstaluj Pythona. Ja zainstalowałem z Entware.
2. Pobierz plik:
3. Wygeneruj listę serwerów speedtest dla raportu na wszystkich serwerach:
(Upewnij się, że plik z listą na wszystkich maszynach jest identyczny...)
4. Utwórz plik
4. Uruchom skrypt. Wynik będzie wyświetlany a także zapisany do pliku .csv.
FYI
Problem nie leży po stronie QNAP, a po stronie samego Ubuntu 16.04.
Co to za problem?
System Ubuntu 16.04 postawiony na wirtualizacji w QNAP (KVM i QEMU) ma kłopoty z wydajnością karty sieciowej VirtIO, które objawia się spadkiem prędkości karty sieciowej. Zmiana na kartę sieciową Intel nie rozwiązuje problemu, zmiana na Realtek stabilizuje prace karty sieciowej, ale nie pozwala osiągnąć maksimum jej możliwości.
Jak wygląda ten problem - jego rezultat?
Przeprowadzony test prędkości za pomocą
speedtest-cli
i skryptu, który w tym celu napisałem.Test został przeprowadzony w tym samym czasie na dwóch symetrycznych linkach po 100Mbit.
Prędkości które osiąga host - czyli QNAP - serwer wirtualizacji:
Code:
Ping: 22.5 ms Upload: 11.4 Mbyte/s Download: 11.2 Mbyte/s 17569) Multi-NET Infrastruktura Sp. z o.o. (Bielsko-Biała, PL) [124.51 km]
Ping: 17.9 ms Upload: 11.6 Mbyte/s Download: 10.6 Mbyte/s 3376) Fiberway Sp. z o.o. (Niepolomice, Poland) [58.58 km]
Ping: 26.8 ms Upload: 11.4 Mbyte/s Download: 10.4 Mbyte/s 10858) MULTINET 24 SP Z O.O. (Debica, Poland) [64.67 km]
Ping: 32.6 ms Upload: 10.7 Mbyte/s Download: 9.8 Mbyte/s 3670) inhost.pro (Debica, Poland) [64.67 km]
Ping: 33.2 ms Upload: 11.6 Mbyte/s Download: 7.6 Mbyte/s 8409) IT Systematic Group (Krosno, Poland) [70.73 km]
Ping: 31.7 ms Upload: 11.9 Mbyte/s Download: 10.0 Mbyte/s 6785) Stimo (Krosno, Poland) [70.73 km]
Ping: 27.7 ms Upload: 11.2 Mbyte/s Download: 10.5 Mbyte/s 9689) FIBERLINK Sp z o.o. (Mogilany, Poland) [71.10 km]
Prędkości, które osiąga gość - czyli maszyna wirtualna w tym wypadku Ubuntu 16.04, to:
Code:
Ping: 28.5 ms Upload: 4.9 Mbyte/s Download: 8.3 Mbyte/s 17569) Multi-NET Infrastruktura Sp. z o.o. (Bielsko-Biała, PL) [124.51 km]
Ping: 44.9 ms Upload: 2.8 Mbyte/s Download: 6.9 Mbyte/s 3376) Fiberway Sp. z o.o. (Niepolomice, Poland) [58.58 km]
Ping: 25.5 ms Upload: 10.0 Mbyte/s Download: 6.6 Mbyte/s 10858) MULTINET 24 SP Z O.O. (Debica, Poland) [64.67 km]
Ping: 37.7 ms Upload: 8.9 Mbyte/s Download: 7.6 Mbyte/s 3670) inhost.pro (Debica, Poland) [64.67 km]
Ping: 31.5 ms Upload: 7.8 Mbyte/s Download: 7.7 Mbyte/s 8409) IT Systematic Group (Krosno, Poland) [70.73 km]
Ping: 25.6 ms Upload: 9.2 Mbyte/s Download: 9.7 Mbyte/s 6785) Stimo (Krosno, Poland) [70.73 km]
Ping: 49.3 ms Upload: 2.6 Mbyte/s Download: 9.6 Mbyte/s 9689) FIBERLINK Sp z o.o. (Mogilany, Poland) [71.10 km]
Żeby było ciekawiej, ten sam test przeprowadziłem na kolejnym gościu, ale na maszynie wirtualnej z Ubuntu wersją 18.04 i prędkości są takie jak w hoście - czyli poprawne!
Dla Waszej informacji aktualizacja Kernel w Ubuntu 16.04 do ostatniej wersji absolutnie nie rozwiązuje problemu.
A więc jeśli, ktoś używa Ubuntu 16.04 na KVM/QEMU to niech się liczy z brakiem maksymalnej wydajności maszyny wirtualnej i to jest kwestia tego systemu.
BONUS:
Jeśli, ktoś chce na własną rękę wygenerować sobie taki raport prędkości z polskich serwerów speedtest to podaje źródło skryptu, które w tym celu napisałem (wymagany speedtest-cli - FYI można łatwo uruchomić na QNAP'ie... to tylko pythonowy skrypt):
1. Zainstaluj Pythona. Ja zainstalowałem z Entware.
2. Pobierz plik:
Bash:
wget http://pool.qnapclub.pl/projects/tools/speedtest-cli/speedtest-cli
3. Wygeneruj listę serwerów speedtest dla raportu na wszystkich serwerach:
Bash:
speedtest-cli --list | grep Poland | cut -d" " -f 1 | sed 's/)//' > speedtest.srv.list
4. Utwórz plik
speedtest.chart.gen.sh
i nadaj mu odpowiednie wykonywalne uprawnienia chmod +x speedtest.chart.gen.sh
:
Bash:
#!/bin/sh
/bin/echo -e "\n\nPerforming multiple speedtests... Please be patient!"
PATH=$PATH:.
CMD_SPEEDTEST="speedtest-cli"
CSV=speedtest.chart.csv
LST=speedtest.srv.list
SRV=speedtest.srv
[ -f "$CSV" ] && rm "$CSV" ; touch "$CSV"
[ -f "$SRV" ] && rm "$SRV" ; touch "$SRV"
$CMD_SPEEDTEST --list > "$SRV"
_IFS=$IFS
while IFS="" read -r p || [ -n "$p" ]
do
PING="" ; UPLOAD="" ; DOWNLOAD="" ; # RESET VALUE
SERVER=`cat $SRV | grep $p | grep -v "\[$p"`
_SRV_SPEED_TEST=$($CMD_SPEEDTEST --simple --server $p --timeout 60 --bytes)
PING=`printf "%s" "${_SRV_SPEED_TEST}" | grep Ping | cut -d" " -f 2`
UPLOAD=`printf "%s" "${_SRV_SPEED_TEST}" | grep Upload | cut -d" " -f 2`
DOWNLOAD=`printf "%s" "${_SRV_SPEED_TEST}" | grep Download | cut -d" " -f 2`
if [ -n "$PING" ] && [ -n "$UPLOAD" ] && [ -n "$DOWNLOAD" ]; then
# csv export
echo "$p,$PING,$UPLOAD,$DOWNLOAD,\"$SERVER\"" >> $CSV
# verbose output
printf 'Ping: %4.1f ms Upload: %8.1f Mbyte/s Download: %8.1f Mbyte/s %s' "$PING" "$UPLOAD" "$DOWNLOAD" "$SERVER"
echo
fi
done < $LST
IFS=$_IFS
4. Uruchom skrypt. Wynik będzie wyświetlany a także zapisany do pliku .csv.