Ich habe eine Multi-Threaded C++ - Netzwerkanwendung, die UDP-Pakete als Eingabe überwacht - diese Daten hüpft dann durch die Anwendung/verarbeitet über verschiedene Warteschlangen und Threads und schließlich auf einen TCP-Socket geschoben.Antwortzeit einer Anwendung unintuitiv korreliert mit der Anzahl der Eingabe-Trigger in einem geben Zeitraum
Was ich sehe, ist, dass, wenn Eingänge kommen in langsam lässt sagen 5/sec, die gesamte Reaktionszeit (in-to-out) ist langsam (sagen wir 100ms) und wenn die Eingänge kommen schnell, z. 20/sec, die Reaktionszeit ist auch schnell (~ 50ms). Diese Beobachtung ist wirklich seltsam. Und macht auch die Reaktionszeit im schnellen Fall durcheinander, weil die erste Antwort immer langsam ist. Nur um sicher zu gehen - die Anwendung macht genau die gleiche Menge an Arbeit in langsamen und schnellen Fällen.
Dinge, die versucht haben, dies zu untersuchen -
Es ist ein Dual-Xeon-Box Linux 2.6-Kernel läuft - disabled Turbo-Boost, sorgte dafür, dass Prozessoren sind in C0 Staaten.
beseitigt Netzwerk Ursachen. Die Ursache liegt in der Box. (in Software oder Hardware)
Ich habe einen falschen Eingang durch das System von Eingang zu Ausgang auf einem Timer, um die Anwendung "warm" zu halten - keine Wirkung. (Die Worker-Threads der Anwendung sind damit beschäftigt, auf Kerne zu warten und zu merken).
Perf Punkte zeigen an, dass alles langsamer wird - was im Grunde bedeutet, dass die Prozessoren langsamer werden, wenn sie nicht unter Dauerlast sind - aber nichts deutet darauf hin (17z/Turbostat) oder ich lese sie falsch.
Hat jemand Farbe, was passieren könnte?
Könnte es irgendwo in der Netzwerkschleife gepuffert werden? Die schnellere Antwort führt dazu, dass der Puffer früher ausgegeben wird. Die langsameren Nachrichten benötigen länger, um die Puffer zu füllen. – rts1
Können Sie TCP/UDP/IP vollständig eliminieren und nur "falsche" Pakete in die vorderen Warteschlangen Ihres Programms einspeisen und die Latenz bis zum Ende messen? –
Sind Busy-Waits wirklich beschäftigt? Keine Wartezeiten, Sperren, Mutexe, nur Spinlocks? – Basilevs