Ich bin auf der Suche nach Leistung von .NET Core auf einer Linux-Box. Spezifisch sicherstellen, welche Art von Einschränkungen von Tools, die im Framework selbst verfügbar sind, sein können.Wie UDPClient Durchsatz zu erhöhen
Ich habe die Box mit ~ 50.000 pps geschlagen. Bis jetzt scheint es ~ 20.000 pps zu geben, was der UDPClient erreichen konnte, bevor einige Pakete verloren gingen. Mit einem anderen Tool (syslog-ng) gibt es eine seltene/niedrige Paketverlustrate.
Wenn ich versuche, mehr als 50K pro Sekunde zu bewältigen, kann der UdpClient das mit der richtigen Abstimmung bewältigen?
using (UdpClient udpListener = new UdpClient(_sysLogPort))
{
udpListener.Client.ReceiveBufferSize = _bufferSize;
while (!_cts.IsCancellationRequested)
{
try
{
UdpReceiveResult result = await udpListener.ReceiveAsync();
}
catch (Exception ex)
{
}
}
}
Ihre Hauptwaffe hier ist die Größe des Socket-Empfangspuffers zu erhöhen, über SO_RCVBUFSIZ, aber das zeigt sich in der API, die Sie verwenden. – EJP
@EJP Ich glaube, die ReceiveBufferSize-Eigenschaft ist der Teil, der dies behandelt (ich könnte falsch liegen), aber die aktuellen Pakete sind ziemlich klein und das Pufferlimit ist viel größer als das Paket, das gerade gesendet wird. Es fühlt sich an wie ein Tuning, das ich für den UdpClient möglicherweise vermisse, da syslog-ng diesen Verkehr mit sehr wenig Überlauf verarbeiten konnte. –
Wie groß ist die Paketgröße, die Sie zum Senden von Paketen an dieses Programm verwenden? Welches Tool verwenden Sie, um diese Pakete zu senden? Welchen Prozessortyp verwenden Sie? Können Sie bestätigen, dass Sie die Loopback-Schnittstelle verwenden (dh, der Sender und Ihr Programm befinden sich auf demselben Linux-Host)? Welche Version von dotnet verwendest du, auf deiner Linux-Box: 1.0.4, älter, aktueller? –