Inband Network Telemetry i Host-INT mogą dostarczyć cennych informacji na temat wydajności sieci – w tym informacji o opóźnieniach i zagubionych pakietach.
Podczas intensywnego skalowania centrów danych zależy nam na uzyskaniu lepszego wglądu w to, co dzieje się w naszej sieci i co ma kluczowy wpływ na jej wydajność. Wraz ze wzrostem liczby przełączników i serwerów wyzwanie to staje się coraz trudniejsze, a przepływ danych ewoluuje do 100 Gb/s i więcej. Na tym etapie kluczowe znaczenie ma wiedza o tym, w którym miejscu sieć jest przeciążona i jak wpływa na przepływ danych oraz umowy dotyczące poziomu usług (SLA).
Inband Network Telemetry (INT) to otwarta specyfikacja utworzona przez społeczność open source P4 [1]. Celem INT jest umożliwienie zbierania pakietów i generowania raportów na ich temat podczas ich przepływu przez sieć. Firma Intel udostępniła tę możliwość społeczności open source za pomocą zaimplementowanej w Linuksie usługi Host Inband Network Telemetry (Host-INT). Struktura Host-INT może zbierać bardzo cenne dane dotyczące warunków sieciowych – takich jak opóźnienia i odrzucanie pakietów – które w inny sposób byłyby bardzo trudne do uzyskania. Host-INT jest idealny dla tych twórców aplikacji, którzy muszą wiedzieć, w jaki sposób sieć wypływa na działanie ich aplikacji. Z kolei dostawca usług sieci rozległej (WAN) może użyć Host-INT, aby zapewnić przestrzeganie umów dotyczących poziomu usług.
Host-INT opiera się na Switch-INT, kolejnej implementacji P4, która przeprowadza pomiary pakietów sieciowych. Zarówno Host-INT, jak i Switch-INT są zaprojektowane pod kątem działania wyłącznie w warstwie danych urządzenia sieciowego (np. w szybkiej ścieżce sprzętowej ASIC przełącznika lub karty sieciowej Ethernet). Switch-INT działa obecnie na programowalnych infrastrukturach przełączników, takich jak Intel Tofino Intelligent Fabric Processors [2]. Działając w płaszczyźnie danych, Switch-INT może zapewnić rozległą telemetrię sieci bez wpływu na wydajność.
Jak działa Host-INT
Host-INT działa na serwerze linuksowym, nie na przełącznikach, dzięki czemu potrafi analizować przepływy pakietów spoza sieci. Węzeł źródłowy INT, znajdujący się na wejściu do sieci, wstawia do pakietu instrukcje i informacje telemetryczne. Ujście INT, zlokalizowane na wyjściu z sieci, usuwa nagłówek INT i metadane z pakietu oraz wysyła je do kolektora telemetrii.
Konfiguracja Host-INT składa się z hosta źródłowego, na którym pakiety są modyfikowane w taki sposób, by zawierały informacje telemetryczne, oraz hosta docelowego, na którym zbierane są metadane i przesyłane do programu analitycznego (Rysunek 1). W ten sposób Host-INT potrafi zgromadzić trudne do uzyskania dane o wydajności. Na przykład zespół DevOps może użyć Host-INT do zbadania wpływu sieci na wydajność ich aplikacji i uzyskania znacznie bardziej szczegółowych informacji niż te dostępne przy użyciu konwencjonalnych narzędzi, takich jak ping itraceroute.
Ponadto organizacje, które są zależne od dużych sieci WAN, mogą wykorzystać dane o opóźnieniach i odrzucaniu pakietów, które pochodzą z Host-INT, aby zapewnić wymagany poziomy usług i w razie potrzeby odpowiednio wcześnie skontaktować ze swoim dostawcą usług, by zminimalizować czas naprawy.
Host-INT zbiera metadane
Specyfikacja Host-INT opisuje kilka opcji dotyczących gromadzenia dodatkowych metadanych pochodzących z nagłówków pakietów w celu pomiaru opóźnienia, głębokości kolejek, przez które przechodzi pakiet, oraz poziomów wykorzystania łącza.
Po zainstalowaniu i włączeniu Host-INT na serwerach z Linuksem (więcej informacji na temat obsługiwanych dystrybucji można znaleźć na witrynie projektu na GitHubie [3]) nagłówki INT są dodawane do pakietów IPv4 TCP i UDP, które są następnie odczytywane przez inne hosty w sieci obsługujące INT. Jeśli np. skonfigurujemy Host-INT na hoście A, aby dodawać nagłówki INT do wszystkich pakietów wysyłanych z hosta A do hosta B, eBPF załadowany w jądrze Linuksa na hoście A zmodyfikuje wszystkie pakiety TCP i UDP przeznaczone dla hosta B.
Nagłówek INT zawiera następujące informacje:
Czas przetworzenia pakietu.
Numer sekwencyjny, który zaczyna się od 1 dla pierwszego pakietu każdego przepływu i zwiększa się dla każdego kolejnego pakietu przepływu.
„Przepływ” w kontekście Host-INT to wszystkie pakiety z tą samą 5-krotką (tj. tą samą kombinacją wartości poniższych pięciu pól nagłówka pakietu):
Adres źródłowy i docelowy IPv4
Protokół IPv4
Port źródłowy i docelowy TCP/UDP
Format enkapsulacji pakietów używany w obecnej wersji Host-INT polega na dodaniu nagłówków INT po nagłówku TCP lub UDP danego pakietu. Aby host odbierający B mógł odróżnić pakiety, które mają nagłówki INT od tych, które ich nie mają, host A modyfikuje również wartość punktów kodowych pola zróżnicowanych usług (DSCP) w polu Type of Service (typ usługi) IPv4 na wartość konfigurowalną. W praktyce dobrze jest skonsultować się z administratorem sieci, aby znaleźć taką wartość DSCP, która nie jest używana do innych celów w danej sieci.
Kiedy pakiety docierają do hosta B, przetwarza je inny program eBPF działający w jądrze hosta B. Jeśli pakiet ma nagłówek INT (określony przez wartość DSCP), program eBPF usuwa go i wysyła pakiet do kodu sieciowego jądra Linuksa, skąd następnie przechodzi do aplikacji docelowej.
Przed usunięciem nagłówka INT program eBPF hosta B oblicza jednokierunkowe opóźnienie pakietu, obliczone jako czas odebrania pakietu przez host B, minus znacznik czasu, który host A wysłał w nagłówku INT. Należy zauważyć, że każda niedokładność synchronizacji zegarów na hoście A i hoście B wprowadza błąd do tego jednokierunkowego pomiaru opóźnienia. Zaleca się więc synchronizację zegarów urządzeń w sieci za pomocą protokołu Network Time Protocol (NTP) lub Precision Time Protocol (PTP).
Program eBPF hosta B sprawdza przepływ pakietu (określony przez tę samą 5-krotkę pól nagłówka pakietu, która jest używana w hoście źródłowym A) w mapie eBPF. Niezależnie, dla pakietów, które host B odbiera z nagłówkami INT, przechowuje następujące dane:
Ostatni czas odebrania pakietu.
Jednokierunkowe opóźnienie poprzedniego pakietu odebranego przez hosta B dla danego przepływu.
Niewielką strukturę danych, która w połączeniu z numerem sekwencji w nagłówku INT określa liczbę utraconych pakietów w sieci dla danego przepływu.
Host B wygeneruje pakiet raportu INT w przypadku dowolnego z poniższych zdarzeń:
Pierwszy pakiet nowego przepływu zostanie odebrany z nagłówkiem INT.
Upłynął czas na wygenerowanie raportu o utraconych pakietach. Każdy przepływ jest sprawdzany pod kątem wykrycia utraty pakietów od ostatniego okresu. Jeśli niedawno wykryto utratę nowych pakietów, generowany jest pakiet raportu o utracie INT. Raport zawiera liczbę utraconych pakietów, które zostały wykryte, oraz nagłówek pakietu.
Jeśli jednokierunkowe opóźnienie bieżącego pakietu znacznie różni się od opóźnienia poprzedniego pakietu dla tego przepływu, generowany jest pakiet raportu o opóźnieniu INT.
W ten sposób, patrząc na strumień pakietów raportów INT, Host-INT może monitorować m.in.:
Znaczne zmiany opóźnienia przepływu
Okresowe aktualizacje liczby utraconych pakietów.
Obie te rzeczy są raportowane na podstawie przepływu.
Host-INT generuje pakiety raportów INT, które są wysyłane z odbiorników pakietów INT z powrotem do hosta wysyłającego, gdzie dane wyodrębnione z raportu są zapisywane do pliku tekstowego. Dodanie innych komponentów rozszerza funkcjonalność Host-INT. Host-INT obsługuje rozszerzenia wysyłające pakiety raportów INT do hosta, który jest nadawcą pakietu zawierającego nagłówek – a nawet na wstępnie skonfigurowany adres IP.
Typowym powodem używania wstępnie skonfigurowanego adresu IP jest wysyłanie raportów INT z wielu hostów do systemu analizy telemetrycznej, który może zbierać, zestawiać, analizować i wyświetlać dane telemetryczne, dzięki czemu operatorzy mogą podejmować odpowiednie decyzje dotyczące sieci. Przykładem systemu analitycznego, który może przetwarzać raporty INT, jest zaprojektowane przez Intela oprogramowanie Deep Insight Analytics [4].
Aktualne ograniczenia
Chociaż raporty Host-INT mogą pomóc administratorom sieci dowiedzieć się o przepływach charakteryzujących się dużymi opóźnieniami lub wieloma porzucanymi pakietami, obecnie Host-INT nie potrafi jeszcze zidentyfikować głównej przyczyny tego zachowania w sieci – może to jednak zrobić Switch-INT. Jeśli wdrożymy w sieci przełączniki obsługujące INT, możemy je skonfigurować w taki sposób, by generowały raporty INT dotyczące zdarzeń, takich jak gubienie pakietów lub pojawienie się kolejek pakietów powodujących duże opóźnienia. Odpowiednio konfigurując przełączniki, możemy też szybko sprawdzić, w którym miejscu w sieci występują te problemy.
Podsumowanie
Host-INT umożliwia obsługę telemetrii pakietów na hostach z systemem Linux, zapewniając skuteczny sposób monitorowania stanu sieci w centrach danych oraz na bieżąco informując o problemach, takich jak przeciążenia, zgubione pakiety i opóźnienia. Host-INT można połączyć ze Switch-INT, uzyskując w ten sposób wszechstronne narzędzie do zarządzania stanem sieci. Samo oprogramowanie oraz dodatkową dokumentację znajdziemy na witrynie projektu na GitHubie [3].
Autorzy
Andrew Fingerhut jest głównym inżynierem w Intel Corporation pracującym nad programowalnymi przełącznikami i kartami sieciowymi; ma prawie 30-letnie doświadczenie w sieciach komputerowych. Aktywnie uczestniczy również w rozwoju języka programowania P4 w ramach grup roboczych P4.org.
Deepa Seshadri jest menedżerem produktu Intel Deep Insight Network Analytics w Intel Corporation. Jej obszar specjalizacji obejmuje tworzenie nowych technologii związanych z oprogramowaniem, począwszy od koncepcji, po wersje produkcyjne.
Źródła:
[1] Otwarty język programowania P4: https://p4.org/
[2] Intel Tofino: https://www.intel.com/content/www/us/en/products/network-io/programmable-ethernet-switch.html
[3] Host-INT na GitHubie: https://github.com/intel/host-int
[4] Oprogramowanie DIA: https://www.intel.com/content/www/us/en/products/network-io/programmable-ethernet-switch/network-analytics/deep-insight.html