2009-10-29 10 views
16

¿Qué tan eficiente es usar sockets cuando se hace IPC en comparación con los tubos con nombre y otros métodos en Windows y Linux?Enchufes en la misma máquina Para Windows y Linux

Ahora mismo, tengo 4 aplicaciones separadas en 4 cajas separadas que necesitan comunicarse. Dos son aplicaciones .NET 3.5 que se ejecutan en Windows Server 2003 R2. Dos son Linux (Suse Linux 10). Generalmente no están vinculados a la CPU. La cantidad de tráfico no es tan grande, pero es muy importante que tenga una baja latencia. Estamos utilizando sockets ahora con Nagle Dis-abled y el parche de inicio lento sles10 instalado en las máquinas Linux.

¿Cuánto de un aumento de velocidad cree que obtendríamos simplemente ejecutando las dos aplicaciones de Windows en el mismo cuadro de Windows y las dos aplicaciones de Linux en el mismo Linux Box y sin cambios de código (es decir, todavía utilizando sockets).

¿El sistema operativo se dará cuenta de que los puntos finales están en la misma máquina y saben que no deben salir a la red con los paquetes? ¿Todavía tendrán que pasar los paquetes por toda la pila de redes? ¿Cuánto más rápido sería si nos tomáramos el tiempo para cambiar a tuberías con nombre o archivos mapeados en memoria o alguna otra cosa?

+7

Esto es fácil de probar. Solo pruébalo. –

+3

1, jeffamaphone: no hay comentarios vagos o evidencia anecdótica importa mucho aquí. Lo que importa es cómo se comportan los * programas de Michael *. –

+3

De acuerdo, debería probarlo. Esa es la única manera de saber con certeza dado todas las diferencias en las redes, configuraciones, etc. Pero sólo estaba esperando que alguien tendría un enlace a alguien que ya ha hecho una prueba muy similar. No me puedo imaginar que la comparación con rigor el desempeño de estas cosas es una idea nueva - Su probablemente han hecho 100 veces por personas que saben mucho más acerca de la creación de redes que yo. –

Respuesta

16

En cuanto al rendimiento de TCP, he hecho este tipo de pruebas recientemente en un servidor HP-UX (8 procesadores Intel Itanium 2 1.5 GHz 6 MB, 400 MT/s) y en Red Hat Linux (2 IA-64 1,6 Ghz). Usé iperf para probar el rendimiento de TCP. Descubrí que la velocidad de intercambio de TCP es más de diez veces más rápida cuando ejecuto iperf en la misma máquina en comparación con ejecutar iperf en dos máquinas diferentes.

También puede intentarlo ya que hay opciones que pueden ser de su interés: la longitud del búfer para leer o escribir, establecer TCP sin demoras, etc. También puede comparar la velocidad de intercambio de TCP en máquinas con Windows, ya que hay una versión de iperf para Winddws.

Ésta es una comparación más detallada:

1) velocidad de intercambio de TCP entre dos applicatons iperf que se ejecutan en diferentes 32K HP-UX ventana del servidor, TCP por defecto: 387 Mbits/seg

2) Velocidad de Intercambio TCP entre dos aplicaciones iperf que se ejecutan en diferentes servidores HP-UX, ventana TCP 512K: 640 Mbits/seg

3) Velocidad del intercambio TCP entre dos aplicaciones iperf que se ejecutan en el mismo servidor HP-UX, ventana TCP predeterminada 32K: 5,60 Gbits/seg

4) velocidad de intercambio de TCP entre dos applicatons iperf que se ejecutan en el mismo servidor HP-UX, por defecto de la ventana TCP 512K: 5,70 Gbits/seg.

5) velocidad de intercambio de TCP entre dos applicatons iperf que se ejecutan en el mismo servidor Linux, 512K ventana TCP: 7,06 Gbits/seg

6) velocidad de intercambio de TCP entre dos applicatons iperf que se ejecutan en HP-UX y Linux , Ventana TCP 512K: 699 Mbits/sec

+0

Eso es perfecto. Lo ejecutaré en mi configuración como un comienzo. ¡Gracias! –

3

Las tuberías locales con nombre serán más rápidas ya que se ejecutan en modo kernel.

+0

De acuerdo. Pero en términos de magnitud, ¿cuál es el salto más grande a medida que avanzas (Sockets On Different Machines) -> (Sockets en la misma máquina) -> (Named Pipes)? ¿Cuánto te cuesta simplemente ejecutar las aplicaciones en la misma máquina en lugar de gastar el tiempo para convertir a las tuberías con nombre? –

+0

ejecutar las aplicaciones en la misma máquina le comprará un gran aumento de rendimiento, ya que la latencia de ethernet se reducirá drásticamente. Mudarse a tuberías con nombre probablemente lo impulsará más, si lo necesita. Yo recomendaría que intentes solo con la pila TCP/IP primero, y luego te muevas a las tuberías con nombre si realmente necesitas ese impulso. Lo más probable es que no lo haga, pero no puedo saberlo con certeza, ya que no sé lo suficiente sobre su situación. – Randolpho

+2

¡Usa los sockets de dominio UNIX! Estos serán iguales o cercanos a las canalizaciones con nombre en rendimiento, pero casi idénticas a las tomas TCP en uso. – ephemient

Cuestiones relacionadas