Stiamo assistendo a un fenomeno bizzarro e inspiegabile con ZeroMQ su Windows 7
, l'invio di messaggi su TCP. (O oltre inproc
, poiché ZeroMQ utilizza TCP internamente per la segnalazione, su Windows).Perché TCP/IP su Windows7 richiede 500 mandate per il riscaldamento? (w10, w8 dimostrato di non soffrire)
Il fenomeno è che i primi 500 messaggi arrivano più lentamente e più lentamente, con una latenza in costante aumento. Quindi i tempi di latenza e i messaggi arrivano rapidamente, ad eccezione dei picchi causati dalla contesa tra CPU e rete.
Il problema è descritto qui: https://github.com/zeromq/libzmq/issues/1608
E 'sempre 500 messaggi. Se inviamo senza ritardo, i messaggi vengono raggruppati in modo tale che il fenomeno si estenda su diverse migliaia di mandate. Se ritardiamo tra le mandate, vediamo il grafico più chiaramente. Anche il ritardo fino a 50-100 msec tra le mandate non cambia le cose.
Anche la dimensione del messaggio è irrilevante. Ho provato con messaggi a 10 byte e messaggi 10K, con gli stessi risultati.
La latenza massima è sempre 2 msec (2000 usec).
Su scatole Linux non vediamo questo fenomeno.
Quello che vorremmo fare è eliminare questa curva iniziale, in modo che i messaggi vadano su una nuova connessione con la loro normale bassa latenza (circa 20-100 usec).
Aggiornamento: la questione non mostra su Windows 10 né 8. Sembra accadere solo su Windows 7 .
Wild hunch: Mi chiedo se questo potrebbe essere correlato all'autotuning TCP in Win7: http://www.sevenforums.com/network-sharing/74556-enable-disable-tcp-auto-tuning.html – keithmo
Grande intuizione, la stiamo verificando. Risulta che il fenomeno non sembra accadere su Windows 10, né su Windows 8. Quindi potrebbe davvero essere una funzione di autotuning di Windows 7. –