Medición de latencia de red (Linux)

8

Me gustaría medir la latencia de la red para la solicitud SNMP GET. Hay una herramienta de línea de comandos gratuita timeque se puede utilizar para buscar estadísticas de tiempo para varios comandos. Por ejemplo, se puede usar snmpgetde la siguiente manera:

$ time snmpget -v 2c -c public 192.168.1.3 .1.3.6.1.2.1.2.2.1.10.2
IF-MIB::ifInOctets.2 = Counter32: 112857973

real    0m0.162s
user    0m0.069s
sys 0m0.005s

Según el manual, las estadísticas consisten en:

  • el tiempo real transcurrido entre la invocación y la terminación,

  • el tiempo de CPU del usuario (la suma de los
    valores tms_utime y tms_cutime en una estructura tms tal como la devuelve
    times (2)),

  • el tiempo de CPU del sistema (la suma de los
    valores tms_stime y tms_cstime en una estructura tms tal como la devuelve
    times (2)).

Como puede ver, ninguna de estas opciones permite medir el tiempo real de latencia de la red (excluyendo otras estadísticas de tiempo de ejecución del programa). ¿Hay alguna manera de hacerlo? ¿Tal vez no usando la herramienta del tiempo, sino algunos trucos del kernel?

Quería preguntar, antes de comenzar a escribir mi propio programa.

Gracias Piotr

Om nom nom
fuente

Respuestas:

6

La bandera tcpdump(8)del programa -tttpuede ser justo lo que necesita:

00:00:00.000031 IP haig.mdns > 224.0.0.251.mdns: 0 PTR (QM)? 1.0.168.192.in-addr.arpa. (42)
00:00:01.897031 IP haig.45240 > stackoverflow.com.www: Flags [F.], seq 866615166, ack 62506321, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000030 IP haig.45242 > stackoverflow.com.www: Flags [F.], seq 853537650, ack 61102072, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000019 IP haig.45243 > stackoverflow.com.www: Flags [F.], seq 863535366, ack 62086489, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0

La marca de tiempo al comienzo de las líneas muestra el tiempo en microsegundos desde el paquete anterior. Al dar un número diferente de -ten la línea de comando, puede obtener tiempos absolutos, tiempos relativos desde el primer paquete o tiempos relativos entre paquetes.

Acabo de mostrar mdns aleatorios y tráfico web porque eso es lo que es fácil de encontrar en mi sistema; puede filtrar fácilmente el tráfico SNMP tcpdump(8)para obtener solo los paquetes que le interesan (lo cual sería una buena idea, ya que eliminar todo el tráfico de los sistemas ocupados puede generar una gran carga).

sarnold
fuente
-ttttttambién puede ser útil: en lugar de mostrar microsegundos desde el último paquete, muestra microsegundos desde el comienzo de la traza.
Alex D
7

Intenta hacer ping:

$ ping -U 192.168.1.3

Del manual de ping:

-U Imprimir latencia completa de usuario a usuario (el comportamiento anterior). Normalmente, ping imprime el tiempo de ida y vuelta de la red, que puede ser diferente debido a fallas de DNS.

Francisco R
fuente
Gracias por la respuesta, pero me gustaría medir la latencia específica de la solicitud de obtención de SNMP.
5

Ejecute su programa y mientras tanto capture el tráfico de red con tcpdumpo wireshark. Verifique el tiempo de la solicitud y la respuesta y haga una simple resta.

Karoly Horvath
fuente