c# - example - Sockets en la misma máquina para Windows y Linux
winsock c# (2)
En cuanto al rendimiento de TCP, he realizado este tipo de prueba recientemente en un servidor HP-UX (8 procesadores Intel Itanium 2 de 1.5 GHz 6 MB, 400 MT / s bus) y en Red Hat Linux (2 IA-64 1,6 Ghz ). Utilicé iperf para probar el rendimiento de TCP. Descubrí que la velocidad de intercambio de TCP es diez veces más rápida cuando ejecuto iperf en la misma máquina en comparación con la ejecución de iperf en dos máquinas diferentes.
También puede intentarlo, ya que hay opciones que podrían interesarle: la longitud del búfer para leer o escribir, configurar TCP sin demora, etc. También puede comparar la velocidad de intercambio de TCP en máquinas Windows, ya que hay una versión de iperf para Winddws.
Esta es una comparación más detallada:
1) Velocidad de intercambio de TCP entre dos aplicaciones iperf que se ejecutan en diferentes servidores HP-UX, ventana TCP predeterminada 32K: 387 Mbits / seg.
2) Velocidad de intercambio de TCP entre dos aplicaciones iperf que se ejecutan en diferentes servidores HP-UX, ventana de TCP 512K: 640 Mbits / seg.
3) Velocidad de intercambio de 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 aplicaciones iperf que se ejecutan en el mismo servidor HP-UX, ventana TCP predeterminada 512K: 5.70 Gbits / seg.
5) Velocidad de intercambio de TCP entre dos aplicaciones iperf que se ejecutan en el mismo servidor Linux, ventana TCP 512K: 7.06 Gbits / seg.
6) Velocidad de intercambio de TCP entre dos aplicaciones iperf que se ejecutan en HP-UX y Linux, ventana de TCP 512K: 699 Mbits / seg.
¿Qué tan eficiente es usar sockets cuando se realiza IPC en comparación con las canalizaciones con nombre y otros métodos en Windows y Linux?
En este momento, 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 sea de baja latencia. Estamos usando sockets ahora con nagle deshabilitado y el parche de inicio lento sles10 instalado en las máquinas Linux.
¿Qué tanto de impulso de velocidad crees 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 cuadro de Linux y sin hacer cambios de código (es decir, seguir utilizando sockets)?
¿Se darán cuenta los sistemas operativos de que los puntos finales están en la misma máquina y sabrán que no deben ir a la red Ethernet con los paquetes? ¿Tendrán que pasar los paquetes por toda la pila de redes? ¿Cuánto más rápido será si nos tomamos el tiempo para cambiar a tuberías con nombre o archivos asignados en memoria o algo más?
Las canalizaciones locales con nombre serán más rápidas ya que se ejecutan en modo kernel.