2011-08-08 5 views
5

En parcourant la page de manuel de tcpdump here Il semble que le noyau puisse laisser tomber les paquets si le tampon est plein. Je me demandais siTaille de la mémoire tampon pour la capture de paquets dans l'espace noyau?

1) cette taille est configurable et/ou 2) où puis-je voir la taille de ma distribution?

De la page de manuel (pour référence):

`a chuté de noyau

paquets` « » (ce qui est le nombre de paquets qui ont été abandonnés, en raison d'un manque d'espace tampon, par le mécanisme de capture de paquets dans le système d'exploitation sur lequel tcpdump s'exécute, si le système d'exploitation signale cette information aux applications, sinon, il sera signalé comme 0).

Répondre

10

Il y a plusieurs domaines que vous pouvez vérifier pour atténuer les paquets larguées par noyau:

  • Regardez la configuration /proc/sys/net/core/netdev_max_backlog et /proc/sys/net/core/netdev_budget. La valeur par défaut est probablement assez faible; essayez de régler chacun à quelque chose comme 2000
  • écriture à l'écran du périphérique de sortie peuvent bloquer/ralentir le processus tcpdump assez longtemps pour remplir le tampon recv
    • Utilisez -nn pour désactiver la recherche DNS et le port de nommage
    • écrire dans le fichier au lieu de l'écran
    • Essayez un outil tel que gulp
  • Si vous avez un look machine multi-processeur à l'aide taskset
  • Utilisez nice pour définir la priorité du processus

Même avec ces paramètres, il peut être simplement que vous ne pouvez pas suivre la vitesse du trafic que vous essayez de capturer. Regardez les détails de votre carte réseau et de la machine et assurez-vous que ce que vous attendez est même possible.

+0

Merci. Modifier/proc/sys/net/core/netdev_max_backlog a fait l'affaire pour moi. Hors sujet question ici dans le cas où vous voyez ce commentaire, Pourquoi écrire dans un fichier serait plus rapide/mieux que d'écrire à l'écran lorsque dans unix les deux sont pratiquement des fichiers? – Anon

+0

Je ne suis pas un expert mais j'imagine que cela se résume aux techniques de tamponnage qui peuvent être utilisées dans les deux cas. Je suis sûr que vous obtiendrez une réponse plus définitive si vous posez une question formelle;) – ezpz

+0

Je peux poser une question formelle mais je dois être sûr que c'est le cas. Avez-vous une expérience/étude de cas de première main à portée de main en ce moment, où avez-vous observé cela? J'aimerais vraiment savoir la réponse si écrire au dossier au lieu de l'écran est plus rapide.Merci d'avoir pris le temps de répondre à ma question. – Anon

1

1) Il est configurable mais pas précisément car il décidera d'une taille appropriée à partir de votre demande.

2) Utilisez setsockopt/getsockopt avec SO_RCVBUF/SO_SNDBUF

Je ne suis pas familier avec linux, mais il semble que ce lien explique bien. http://linux.die.net/man/7/socket

+0

Merci pour votre réponse. J'ai essayé votre suggestion et la réponse que j'ai eu était d'environ 48kb. Ce qui ne semble pas juste. C'est la taille du tampon socket, pas la taille de la mémoire tampon que le noyau conserve pour la réception des paquets. Je vous remercie pour votre travail acharné. – Anon

Questions connexes