2011-08-08 24 views
5

Przechodzenie przez stronę podręcznika tcpdump here Wygląda na to, że jądro może zrzucić pakiety, jeśli bufor jest pełny. Zastanawiam się, czyRozmiar bufora do przechwytywania pakietów w przestrzeni jądra?

1) ten rozmiar jest konfigurowalny i/lub 2) gdzie mogę zobaczyć rozmiar dla mojej dystrybucji?

Od strony człowieka (dla łatwego odniesienia):

pakietów `` spadła o jądra „” (jest to liczba pakietów, które zostały wycofane z powodu braku miejsca w buforze, przez mechanizm przechwytywania pakietów w systemie operacyjnym, w którym działa tcpdump, jeśli system operacyjny przekazuje te informacje do aplikacji, jeśli nie, zostanie zgłoszony jako 0).

Odpowiedz

10

Istnieje kilka obszarów, można sprawdzić w celu złagodzenia pakiety upuszczone przez jądro:

  • Spójrz na konfigurowanie /proc/sys/net/core/netdev_max_backlog i /proc/sys/net/core/netdev_budget. Wartość domyślna jest prawdopodobnie dość niska; spróbuj ustawić każdy coś jak 2000
  • Pisanie na ekranie urządzenia wyjściowego może blokować/spowalniając proces tcpdump wystarczająco długo, aby wypełnić bufor Recv
    • Korzystając -nn wyłączyć zapytań DNS oraz port nazewnictwa
    • Zapis do pliku zamiast ekranu
    • Spróbuj narzędzia takiego jak gulp
  • Jeśli masz komputer wygląd wieloprocesorowych przy użyciu taskset
  • Zastosowanie nice ustawić priorytet procesu

Nawet przy tych ustawieniach, może być tylko to, że nie może nadążyć z prędkością ruchu, który próbujesz uchwycić. Sprawdź szczegóły karty sieciowej i komputera i upewnij się, że to, czego oczekujesz, jest możliwe.

+0

Dzięki. Modyfikowanie/proc/sys/net/core/netdev_max_backlog zrobiło dla mnie trudność. Jeśli nie masz odpowiedzi na pytanie dotyczące tematu, dlaczego pisanie do pliku byłoby szybsze/lepsze niż pisanie na ekranie, gdy w systemie Unix oba są praktycznie plikami? – Anon

+0

Nie jestem ekspertem, ale wyobrażam sobie, że sprowadza się on do technik buforowania, które można zastosować w obu przypadkach. Jestem pewien, że uzyskałbyś bardziej jednoznaczną odpowiedź, gdybyś zadał formalne pytanie;) – ezpz

+0

Mogę zadać pytanie formalne, ale muszę mieć pewność, że tak właśnie jest. Czy masz teraz jakieś doświadczenia z pierwszej ręki/studia przypadku, gdzie to zaobserwowałeś? Naprawdę chciałbym znać odpowiedź, jeśli pisanie do pliku zamiast ekranu jest szybsze.Dziękuję za poświęcenie czasu, aby odpowiedzieć na moje pytanie. – Anon

1

1) Jest konfigurowalny, ale nie tak precyzyjny, jak byś zadecydował o właściwym rozmiarze.

2) Użyj setsockopt/getsockopt z SO_RCVBUF/SO_SNDBUF

nie jestem obeznany z Linuksem, ale wydaje ten link wyjaśnia to dobrze. http://linux.die.net/man/7/socket

+0

Dzięki za odpowiedź. Wypróbowałem twoją sugestię, a odpowiedź, którą otrzymałem, wynosiła około 48 kB. Co nie wydaje się właściwe. Jest to rozmiar bufora gniazda, a nie rozmiar bufora, który jądro trzyma w celu odbierania pakietów. Dziękuję Ci za ciężką prace. – Anon

Powiązane problemy