Czy istnieje narzędzie takie jak tcpdump w systemie Linux do przechwytywania ruchu przechodzącego przez kanał RDMA? (Infiniband/RoCE/iWARP)Przechwytywanie pakietów w RDMA?
Odpowiedz
stary wątek, ale nadal:
Roland zauważył, węsząc ruchu RDMA jest trudne, ponieważ po punkty końcowe zrobił wstępną handshake, ruch przechodzi przez kartę sieciową (HCA) bezpośrednio do pamięci. Jedynym sposobem na powąchanie tego ruchu bez wstawiania dedykowanego sniffera HW na drucie jest posiadanie haków specyficznych dla dostawcy na karcie sieciowej i narzędzia SW, które używa tych haczyków.
Jeśli masz Mellanox HCAs, you can use the "ibdump" tool. To narzędzie jest również częścią pakietu MELANOX OFED.
Jeśli posiadasz sprzęt HW innego producenta, musisz skontaktować się z tym sprzedawcą - nie znajdziesz żadnego sniffera pakietów open source dla wszystkich urządzeń obsługujących RDMA, przepraszam.
Myślę, że twoja odpowiedź pasuje najlepiej. Dowiedziałem się, że każdy sprzedawca musi udostępnić narzędzie do przechwytywania pakietów na ich HCA. Obecnie zajmuję się tylko Mellanox HCA i masz rację, "ibdump" jest odpowiedzią na to. Próbowałem tego teraz i robi to przechwytywanie. Jednak dowiedziałem się, że loguje on tylko nagłówki operacji RDMA, a nie sam ładunek. Nie wiem, czy to zachowanie domyślnie, czy muszę uaktualnić moje pakiety. Ale w istocie "ibdump" działa i właśnie tego szukałem, gdy zadałem to pytanie. Dziękuję Ci! – dhavale
@kliteyn Ale dlaczego pakiet przechwycony przez ibdump jest tak mały, wysyłam dużo pakietu, ale to tylko caputured małe pakiety. – Djvu
Ogólnie rzecz biorąc nie. Jedną z głównych cech RDMA jest to, że całe przetwarzanie sieci odbywa się na adapterze, bez angażowania w ogóle procesora. Zwykle żądania pracy są umieszczane w kolejce bezpośrednio z przestrzeni użytkownika do adaptera, bez żadnego wywołania systemowego. Więc nie ma gdzie sniffer, żeby złapać ruch.
Dzięki tym informacjom, w przypadku protokołów Ethernet, iWARP lub IBoE (inaczej: RoCE), można podłączyć system w środku połączenia i skonfigurować go tak, aby przekazywał dalej oprogramowanie (np. Moduł mostu linuxowego), a następnie uruchom tcpdump lub wireshark, aby przechwycić ruch RDMA, który przechodzi przez ten system. Wireshark ma nawet dysektory dla iWARP i IBoE.
Dla natywnej InfiniBand teoretycznie jest możliwe zbudowanie czegoś podobnego (skonfigurowanie adaptera do przechwytywania i przekazywania ruchu), ale o ile wiem, nikt nie wykonał nawet wymaganego oprogramowania układowego ani sterownika, aby wykonać podstawowe sniffowanie pakietów.
Dziękuję Roland za twój wkład! Zbadam, wykorzystując most linuxowy do podsłuchiwania. Zrozumiałem, że pakiety są ustawiane w kolejce bezpośrednio z przestrzeni użytkownika i to dlatego nie ma miejsca do przechwycenia. Używam ib_post_send() z jądra do kolejki żądań pracy, więc pomyślałem, że może być pewne miejsce wewnątrz implementacji, aby wiedzieć, że pakiet został wysłany do innego węzła. Nie wiem, czy to możliwe bez pomocy oprogramowania układowego, może być, gdy pojawi się wydarzenie na CQ? Głównym powodem tego pytania jest to, że gdy nie widzę danych w odbiorniku, potrzebujemy sposobu, aby stwierdzić, który RNIC jest winny, nadawcy lub odbiorcy? – dhavale
Urządzenie Chelsio's T4 obsługuje funkcję śledzenia pakietów, umożliwiając replikowanie pakietów odciążających/wyjściowych do jednej z kolejek NIC urządzenia. Następnie możesz użyć tcpdump lub cokolwiek na tym interfejsie ethX, aby zobaczyć pakiety RDMA lub TOE.
Dziękuję Steve! Sprawdzę z moim dostawcą sprzętu (Mellanox), czy obsługują coś podobnego. – dhavale
Wireshark może być tym jedynym. Ale problem polega na tym, że potrzebujesz serwera obserwującego. Włączając funkcję lustra, powinieneś być w stanie odebrać kieszeń ROCE u obserwatora.
Jak w końcu rozwiązujesz ten problem? – Djvu
ibdump pracował dla mnie zgodnie z sugestią @kliteyn Jakich pakietów szukasz? Robiłem RMDA_WRITE_WITH_IMMIDIATE i mogłem zobaczyć wszystkie pakiety. – dhavale
Chcę tylko uzasadnić, czy jest jakiś pakiet RDMA jest wychodzących do sieci. Ale kiedy używam ibdump, przechwyciłem tylko bardzo mały pakiet, taki jak 2 pakiety pokazane przez ibdump. ale wysyłam dużo danych. Zastanawiam się również nad znaczeniem pakietów przechwyconych przez ibdump, czy jest to tylko konfiguracja połączenia, czy nie zawierają danych wysyłanych? – Djvu