wtorek, 27 marca 2018

iPerf - pomiar wydajności łącza i wizualizacja wyników


Kilka dni temu napisał do mnie jeden z czytelników z prośbą o przedstawienie w jaki sposób wykonuję wizualizację wyników uzyskiwanych przy pomocy programu iPerf3.
Jest to bardzo przydatny sposób na sprawdzenie poniższych parametrów:
  • średniej wydajności łącza w danym okresie czasu,
  • wartości szczytowych, 
  • wartości minimalnych,
  • przerw w transferach,
  • korelacji w transferach (jak zaprezentowane na powyższym screenie wydajność łącza gigabit lan w porównaniu do WiFi2,4 i WiFi 5GHz)
  • w przypadku sieci bezprzewodowych można także w bardzo prosty sposób sprawdzić, jak wygląda ich stabilność (dwa poniższe screeny to sieć 2,4GHz na tych samych urządzeniach, ale różnych kanałach).
Sieć Wi-Fi 2,4GHz pracująca bardzo niestabilnie (nakładające się kanały)
Sieć Wi-Fi 2,4GHz pracująca bardzo niestabilnie (nakładające się kanały)

Sieć Wi-Fi 2,4Ghz prująca na tych samych urządzeniach co na wykresie powyżej, ale po zmianie kanału sieci
Sieć Wi-Fi 2,4Ghz prująca na tych samych urządzeniach co na wykresie powyżej, ale po zmianie kanału sieci

Jeżeli więc chcecie wiedzieć jak dokonać tego typu pomiarów oraz utworzyć z nich wykres, to zachęcam to przeczytania tekstu poniżej ;)

Ogólne założenia

iPerf3 to darmowa aplikacja dzięki której można zmierzyć przepustowość łącza pomiędzy dwiema końcówkami sieci. Oczywiście najbardziej typowym zastosowaniem tego produktu wydaje się pomiar wydajności łącza kablowego, ponieważ na obydwu jego końcach można umieścić komputery z zainstalowanym programem.

Ale to nie koniec jego możliwości.

Osobiście często używam iPerfa do wykonywania testów wydajności łączy radiowych w routerach, które na czas testu zestawiam jak w poniższym przykładzie. Wtedy "wąskim gardłem" staje się sieć bezprzewodowa i to w rzeczywistości jej wydajność jest mierzona.
Przykładowy schemat pomiaru wydajności łącza Wi-Fi 5GHz w Synology RT2600AC przy użyciu iperf
Przykładowy schemat pomiaru wydajności łącza Wi-Fi 5GHz w Synology RT2600AC przy użyciu iperf

W gruncie rzeczy powyższy schemat wyjaśnia wiele, ale pozwolę sobie na jego uszczegółowienie.

Całą procedurę pomiaru należy zacząć od uruchomienia iperfa do pracy w trybie serwera. Robimy to poniższą komendą:
iperf3.exe -s
Następnie, po drugiej stronie łącza, odpalamy ją w trybie klienta, podając jako jeden z parametrów, adres IP serwera, który przed chwilą uruchomiliśmy.
iperf3.exe -c adres_IP_serwera_iperf -t 1000 -W20M 
Wyjaśnić należy, że przełącznik -t oznacza, że program przeprowadzi podaną ilość jednosekundowych próbek, czyli w tym przypadku będzie ich 1000 (cały pomiar zajmie prawie 17 minut).
I to w zasadzie tyle. Wystarczy nacisnąć Enter i procedura się rozpocznie. W jej trakcie na ekranie będą wyświetlane wyniki z każdej z sekundowych próbek oraz na zakończenie zostanie zaprezentowane ich całościowe podsumowanie.

W ten sposób zostanie sprawdzona wydajność łącza z prezentacją danych w postaci surowego wyjścia na konsoli. A jak dokonać wizualizacji uzyskanych wyników?

Wizualizacja wyników

Przekierowanie wyników pracy programu do pliku

Aby można było dokonać wizualizacji wyników należ uruchomić iPerfa w trybie klienta tak jak powyżej, ale na końcu komendy uruchamiającej poinformować program, żeby wyniki działania nie były wyświetlane na ekranie, ale zapisywane do pliku. Robi się to poprzez dopisanie ciągu znaków zaznaczonego poniżej na czerwono:
iperf3.exe -c adres_IP_serwera_iperf -t 1000 -W20M > c:\plik_z_wynikami.txt
Jak wspomniałem, tak uruchomiony program nie będzie wyświetlał wyników swojej pracy na ekranie. Warto o tym pamiętać i spokojnie czekać zadaną ilość czasu.
Jeżeli chcecie się jednak upewnić, czy wszystko przebiega poprawnie, to możecie zerknąć na ekran konsoli serwera. On powinien wyświetlać wyniki pomiarów niezależnie od tego czy na kliencie zostało wykonane przekierowanie zapisu do konsoli, czy nie.

Po zakończeniu pracy można podejrzeć plik z wynikiem pracy programu. Powinien wyglądać jak poniżej.

Ostatnie wiersze działania iperfa wyświetlone z pliku do którego przekierowane było jego działanie
Ostatnie wiersze działania iperfa wyświetlone z pliku do którego przekierowane było jego działanie
Gdy mamy już dane z pomiaru można pokusić się o ich import do Excela w celu stworzenia wykresu.

Ale, ale.... Takie coś do Excela?

Można, ale chyba tylko masochista chciałby obrabiać to w Excelu. Ja nim nie jestem i przygotowałem wyrażenie regularne, które z całego pliku z danymi pozostawia kolumnę z wynikami (kolumnę o nazwie "Bandwidth"). Taką kolumnę można już spokojnie skopiować do Excela i utworzyć z niej wykres.

Ale najpierw przetwórzmy dane, aby pozostały nam jedynie te, których potrzebujemy.

Przetwarzanie danych

Aby skorzystać z wyrażenia regularnego (inna nazwa to "regex") należy mieć program, który je obsłuży. Ja, do wszelkich plików tekstowych, korzystam z darmowego Notepad++, który ma wiele funkcji, w tym pożądaną w tym przypadku, obsługę wyrażeń regularnych.

Przetworzenie danych polega na uruchomieniu funkcji Zamień.
W polu "Szukany tekst" wpisujemy:.*Bytes\s+(.+).+bits/sec.*
zaś w polu "Zamień na:" \1
Na koniec, w sekcji "Tryb szukania", wybieramy "Wyrażenia regularne" i potwierdzamy całą operację klawiszem "Zamień wszystkie".

Plik wyników programu iPerf przez uruchomieniem zamiany poprzez wyrażenia regularne
Plik wyników programu iPerf przez uruchomieniem zamiany poprzez wyrażenia regularne
Zawartość pliku z wynikami iPerf po przetworzeniu przez wyrażenie regularne
Zawartość pliku z wynikami iPerf po przetworzeniu przez wyrażenie regularne
Jak widać na screenie powyżej, niezmienione pozostały trzy pierwsze wiersze. Następnie wszystkie wiersze z pomiarami zostały przetworzone, tak aby pozostały jedynie prędkości. Na samym końcu pozostało także kilka wierszy podsumowania. Zarówno pierwsze wiersze, jak i kilka ostatnich można usunąć, tworząc w ten sposób plik z samymi wynikami pomiarów.

Teraz tak przygotowane dane wystarczy zaimportować do Excela przez zakładkę DaneZ pliku tekstowego/CSV, bądź poprzez tradycyjne Kopiuj - Wklej (pozwalam sobie na przypuszczenie, że to będzie ta popularniejsza metoda;)

Opcja importu danych z pliku tekstowego/CSV
Opcja importu danych z pliku tekstowego/CSV

Następnie z kolumny danych pozostaje utworzyć wykres wg własnych potrzeb i voilà - mamy zwizualizowany pomiar wydajności łącza :)

Prawda, że było prosto? :D

Na co warto zwrócić uwagę, bądź inaczej - o czym warto pamiętać

Z tego co pamiętam, iPerf jako separatora w liczbach z częściami dziesiętnymi używa kropki, których Excel nie bardzo lubi. To może powodować problemy tego rodzaju, że w miejscu gdzie wartość będzie wynosiła np. 99.9, Excel wskaże na wykresie zero. 

Warto się więc upewnić, że w liczbach kropki zostały zamienione na przecinki (np. poprzez profilaktyczne uruchomienie w Excelu funkcji Znajdowanie i zamienianie z poleceniem zamiany kropek na przecinki).

Ponadto jeżeli wykres nie wychodzi jak trzeba, to sprawdźcie, czy komórki z danymi rozpoznawane są jako komórki liczbowe, a nie zawierające tekst.

Jeżeli napotkacie na problemy to piszcie, a postaram się coś poradzić. Proszę jednak o wyrozumiałość, bo ostatnio bardzo słabo u mnie z czasem. 

2 komentarze:

  1. Świetny, kompletny tutorial! Muszę to kiedyś sprawdzić na własnej sieci. Kable są co prawda kat. 6 (Cat 6), ale póki co mam słaby router i byłby wąskim gardłem.

    Mając output w pliku tekstowym daje to duże pole do popisu z obróbką i wykresami. Gdybym ktoś to robił często to już można zacząć się bawić z Pythonem i Matplotlib albo Plotly.
    Ostatnio przypadł mi też do gustu fajny zamiennik Windowsowego CMD o nazwie cmder (http://cmder.net). Nie trudo być lepszym od Win CMD, ale Cmder posiada wbudowane Conemu oraz wiele przydatnych narzędzi takich jak grep, awk, vi, bash i inne. Polecam.

    PS. Wpisy tutaj może nie pojawiają się zbyt często, ale jak już coś się pojawi to chapeau bas. :)

    OdpowiedzUsuń
    Odpowiedzi
    1. Dzięki za komentarz oraz info o cmder :) Nie znałem tego.

      Pozdrawiam serdecznie
      Daniel

      Usuń

Bardzo proszę o zachowanie netykiety.