2011-08-08 22 views
5

Pasando por la página man de tcpdump here Parece que kernel puede soltar los paquetes si el buffer está lleno. Me preguntaba siTamaño de búfer para capturar paquetes en el espacio del kernel?

1) ese tamaño es configurable y/o 2) ¿dónde puedo ver el tamaño de mi distribución?

Desde la página del manual (para facilitar la referencia):

paquetes `` dejado caer por el kernel '' (este es el número de paquetes que se dejaron caer, debido a la falta de espacio de almacenamiento intermedio, por el mecanismo de captura de paquetes en el sistema operativo en el que se está ejecutando tcpdump, si el sistema operativo informa esa información a las aplicaciones, de lo contrario, se informará como 0).

Respuesta

10

hay varias áreas se podría verificar para mitigar los paquetes se redujo en kernel:

  • mirada a la configuración de /proc/sys/net/core/netdev_max_backlog y /proc/sys/net/core/netdev_budget. El valor predeterminado es probablemente bastante bajo; intente configurar cada uno a algo así como 2000.
  • escritura en la pantalla del dispositivo de salida puede estar bloqueando/ralentizar el proceso tcpdump el tiempo suficiente para llenar el búfer recv
    • Uso -nn para desactivar las búsquedas de DNS y nombre al puerto
    • escribir en el archivo en lugar de la pantalla
    • Pruebe una herramienta como gulp
  • Si usted tiene una mirada máquina multi-procesador en el uso de taskset
  • Uso nice para ajustar la prioridad del proceso

Incluso con esos ajustes, que sólo puede ser que no se puede seguir el ritmo de la velocidad del tráfico que está tratando de capturar. Mire los detalles de su NIC y máquina y asegúrese de que lo que espera sea posible.

+0

Gracias. La modificación/proc/sys/net/core/netdev_max_backlog me sirvió. Aquí, en caso de que veas este comentario, ¿por qué escribir en un archivo sería más rápido/mejor que escribir en la pantalla cuando en Unix ambos son prácticamente archivos? – Anon

+0

No soy un experto, pero me imagino que se reduce a las técnicas de almacenamiento en búfer que se pueden utilizar en ambos casos. Estoy seguro de que obtendrías una respuesta más definitiva si hicieras una pregunta formal;) – ezpz

+0

Puedo hacerte una pregunta formal, pero necesito estar seguro de que este es el caso. ¿Tiene alguna experiencia de primera mano/estudio de caso a la mano en este momento, donde observó esto? Realmente me encantaría saber la respuesta si escribir en el archivo en lugar de la pantalla es más rápido.Gracias por tomarse un tiempo para responder mi pregunta. – Anon

1

1) Es configurable pero no es exactamente como decidiría un tamaño adecuado a partir de su solicitud.

2) Utilizar setsockopt/getsockopt con SO_RCVBUF/SO_SNDBUF

No estoy familiarizado con Linux, pero parece este enlace lo explica bien. http://linux.die.net/man/7/socket

+0

Gracias por su respuesta. Probé tu sugerencia y la respuesta que obtuve fue de alrededor de 48 kb. Lo cual no parece correcto. Es el tamaño del búfer del zócalo, no el tamaño del búfer que mantiene el kernel para recibir paquetes. Gracias por tu duro trabajo. – Anon

Cuestiones relacionadas