Recientemente completamos un análisis del rendimiento de envío de multidifusión. Afortunadamente, Java y C se desempeñaron casi de manera idéntica ya que probamos diferentes tasas de envío de tráfico en Windows y Solaris.Multicast Send Performance
Sin embargo, notamos que el tiempo para enviar un mensaje de multidifusión aumenta a medida que aumenta el tiempo entre envíos. Cuanto más frecuentemente llamemos enviar, menos tiempo tardará en completar la llamada de envío.
La aplicación nos permite controlar la cantidad de tiempo que esperamos entre llamar y enviar, a continuación verá que el tiempo aumenta a medida que aumenta la demora entre los paquetes. Cuando se envían 1000 paquetes/segundo (1 ms de tiempo de espera), solo se requieren 13 microsegundos para llamar al envío. Con 1 paquete/segundo (tiempo de espera de 1000 ms), ese tiempo aumenta a 20 microsegundos.
Wait time (ms) us to send
0 8.67
1 12.97
10 13.06
100 18.03
1000 20.82
10000 57.20
Vemos este fenómeno tanto de Java como de C, tanto en Windows como en Solaris. Estamos probando en un servidor Dell 1950 con una tarjeta de red de puerto dual Intel Pro 1000. Micro-benchmarking es difícil, especialmente en Java, pero no creemos que esto esté relacionado con JITing o GC.
código de Java y la línea de comandos que estoy usando para las pruebas se encuentran en: http://www.moneyandsoftware.com/2009/09/18/multicast-send-performance/
Para verificar esta teoría, el OP debería probarse con unidifusión y ver un perfil similar en el análisis. – Stef
bueno, en teoría, pero la mayoría de los conmutadores/enrutadores con los que he trabajado mantienen tablas y cachés separados para unidifusión y multidifusión. Entonces ambos pueden tener los mismos tiempos de espera, pero IIRC también fueron configurables ... –
¿No los tiempos de espera en las tablas de enrutamiento darán como resultado que todo bajo el tiempo de espera sea la misma velocidad, mientras que todo es más lento?Pero vemos que se degrada gradualmente a medida que aumenta el tiempo entre los paquetes. –