Cómo solucionar problemas de latencia entre 2 hosts Linux

16

La latencia entre 2 hosts Linux es de aproximadamente .23ms. Están conectados por un interruptor. Ping y Wireshark confirman el número de latencia. Pero no tengo ninguna visibilidad de lo que está causando esta latencia. ¿Cómo puedo saber si la latencia se debe a NIC en el host A o B o el conmutador o los cables?

ACTUALIZACIÓN: La latencia de .23 ms es mala para mi aplicación existente, que envía mensajes a una frecuencia muy alta y estoy tratando de ver si puede reducirse a .1ms

Jimm
fuente
2
¿Por qué crees que .23ms es una mala latencia? Esa es una latencia increíble.
SpacemanSpiff
66
Conéctelos directamente con un cable cruzado. Si tiene la misma latencia, la causa es uno de los hosts. Si no tiene la misma latencia, entonces la causa es el interruptor o el cableado.
joeqwerty
1
De acuerdo, ¿cuál es el problema? La latencia de 0.23 ms es menor que la que obtengo con dos máquinas ubicadas una al lado de la otra.
Michael Hampton
@joeqwerty Si dos sistemas están conectados a través de un cable cruzado, ¿cómo se ubican entre sí? ¿ARP todavía funciona? ¿TCP todavía funciona?
Jimm
1
Funcionarán igual que si ambos estuvieran conectados al mismo conmutador. El cable es simplemente el medio físico a través del cual se comunicarán. Las 7 capas del modelo OSI (o las 4 capas del modelo DARPA, si lo prefiere) funcionarán exactamente como lo hacen ahora.
joeqwerty

Respuestas:

15

Genéricamente, puede usar algunos de los conmutadores avanzados a la utilidad iperf para obtener una vista del rendimiento de la red entre sistemas, específicamente latencia y fluctuación de fase ...

¿Es este un flujo de mensajes basado en UDP o TCP?

Comenté anteriormente sobre la necesidad de más información sobre su configuración. Si se trata de una aplicación de mensajería de baja latencia, hay todo un mundo de técnicas de optimización y optimización que abarcan ajustes de hardware, controladores y SO. Pero realmente, necesitamos más información.

Editar:

Bien, entonces esto es mensajería TCP. ¿Has modificado algún /etc/sysctl.confparámetro? ¿Cómo son sus buffers de envío / recepción? El uso de un kernel en tiempo real por sí solo no servirá de mucho, pero si te mueves hasta el punto de vincular las interrupciones a las CPU, cambiar la prioridad en tiempo real de la aplicación de mensajería ( chrt) y posiblemente modificar el tuned-admperfil del sistema puede ayudar ...

Esto suena como un sistema EL6 genérico, por lo que una manera fácil de establecer una línea base de ajuste de rendimiento implica cambiar el perfil de rendimiento del sistema a otro disponible dentro del marco ajustado . Luego construye desde allí.

En tu caso:

yum install tuned tuned-utils
tuned-adm profile latency-performance

Una matriz rápida que muestra las diferencias:

¿Puedes contarnos sobre el hardware? Tipos de CPU, NIC, memoria?

Por lo tanto, puede ser interesante probar su enlace ... Pruebe esta prueba de iperf ...

En un sistema, inicie un oyente UDP iperf. Por otro lado, abra una conexión con el primero ... Una prueba rápida de calidad de línea.

# Server2
[root@server2 ~]# iperf -su   

# Server1
[root@server1 ~]# iperf -t 60 -u -c server2

En mi caso, baja inestabilidad y bajo tiempo de ping:

------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size:  224 KByte (default)
------------------------------------------------------------
[  3] local 192.168.15.3 port 5001 connected with 172.16.2.152 port 36312
[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  3]  0.0-20.0 sec  2.50 MBytes  1.05 Mbits/sec   0.012 ms    0/ 1785 (0%)

PING server1 (172.16.2.152) 56(84) bytes of data.
64 bytes from server1 (172.16.2.152): icmp_seq=1 ttl=63 time=0.158 ms
64 bytes from server1 (172.16.2.152): icmp_seq=2 ttl=63 time=0.144 ms

Verificaría el hardware y las interfaces en busca de errores. Si lo desea, elimine el cambio entre sistemas y vea cómo se ve una conexión directa. No desea un alto jitter (varianza), así que verifíquelo.

Pero, sinceramente, incluso con los tiempos de ping que obtiene en su configuración actual, eso no debería ser suficiente para matar su aplicación. Seguiría el camino de ajustar sus buffers de envío / recepción. Ver: net.core.rmem_max, net.core.wmem_maxy sus valores por defecto ...

Algo como lo siguiente en /etc/sysctl.conf(sintonizar al gusto):

net.core.rmem_default = 10000000
net.core.wmem_default = 10000000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
ewwhite
fuente
Es una aplicación de mensajería sensible a la latencia. El sistema operativo típico sería kernel-2.6.32-279.11.1.el6.x86_64, aunque cargué hosts con kernel 3.2.23-rt37.56.el6rt.x86_64 para ver si eso haría alguna diferencia. Pero fue más o menos lo mismo. Los tamaños de los mensajes varían entre 1 KB y 3 KB. Toda comunicación ocurre a través de TCP.
Jimm
¿Es el sistema operativo Red Hat MRG?
ewwhite
En este momento es simple Redhat 6.3, pero MRG también es una posibilidad. Como mencioné anteriormente, probé ambos, pero la latencia fue la misma. ¿Con qué tipo de sintonizables debería preocuparme?
Jimm
Me gustaría conocer el hardware y la configuración de la NIC. Cambiar modelo ayuda. Para los sintonizables, el área obvia para mirar en 6.3 es su tuned-admperfil.
ewwhite
Controladores duales de Ethernet: Emulex Corporation OneConnect 10Gb NIC (rev 02) y 16 procesadores AMD Family 10h de núcleo, cada uno de 2400 MHz.
Jimm