Abbiamo recentemente completato un'analisi delle prestazioni di invio multicast. Fortunatamente, Java e C si sono comportati in modo quasi identico, poiché abbiamo testato diverse velocità di invio del traffico su Windows e Solaris.Prestazioni di trasmissione multicast
Tuttavia, abbiamo notato che il tempo di inviare un messaggio multicast aumenta all'aumentare del tempo tra le mandate. Più frequentemente chiamiamo invia, meno tempo ci vuole per completare la chiamata di invio.
L'applicazione ci consente di controllare la quantità di tempo che aspettiamo tra la chiamata di invio, di sotto si vede il tempo che aumenta come il ritardo tra i pacchetti sale. Quando si inviano 1000 pacchetti al secondo (1 ms di tempo di attesa), sono necessari solo 13 microsecondi per chiamare send. A 1 pacchetto/secondo (tempo di attesa 1000 ms), il tempo aumenta fino a 20 microsecondi.
Wait time (ms) us to send
0 8.67
1 12.97
10 13.06
100 18.03
1000 20.82
10000 57.20
Vediamo questo fenomeno sia da Java che da C e sia su Windows che su Solaris. Stiamo testando su un server Dell 1950, con una scheda di rete a doppia porta Intel Pro 1000. Il micro-benchmarking è difficile, specialmente in Java, ma non pensiamo che questo sia collegato a JITing o GC.
codice Java e la linea di comando che sto utilizzando per i test sono a: http://www.moneyandsoftware.com/2009/09/18/multicast-send-performance/
Per verificare questa teoria, l'OP deve verificare con unicast e vedere un profilo simile mostrato nell'analisi. – Stef
beh, in teoria - ma la maggior parte degli switch/router con cui ho lavorato mantengono tabelle e cache separate per unicast vs multicast. Quindi possono avere entrambi gli stessi timeout, ma IIRC erano anche configurabili ... –
I timeout nelle tabelle di routing non comportano che tutto sotto il tempo di timeout abbia la stessa velocità, mentre tutto è più lento.Ma vediamo che si degradano gradualmente mentre aumentiamo il tempo tra i pacchetti. –