私はLinuxのボックスで.NETコアのパフォーマンスを調べています。具体的には、どのような制限がフレームワーク内で利用できるツールであるかを確認することです。UDPClientのスループットを向上させる方法
私は〜50,000 ppsで箱を打っています。これまでのところ、パケットのかなりのビットが落とされる前にUDPClientが達成できたのは約20,000ppsです。別のツール(syslog-ng)を使用すると、まれな/低いパケット損失率があります。
もし私が50K pps以上を処理しようとしているのであれば、UdpClientはこれを適切なチューニングで処理できますか?
using (UdpClient udpListener = new UdpClient(_sysLogPort))
{
udpListener.Client.ReceiveBufferSize = _bufferSize;
while (!_cts.IsCancellationRequested)
{
try
{
UdpReceiveResult result = await udpListener.ReceiveAsync();
}
catch (Exception ex)
{
}
}
}
あなたの主な武器はSO_RCVBUFSIZ経由でソケット受信バッファーのサイズを増やすことですが、使用しているAPIに表示されます。 – EJP
@EJP ReceiveBufferSizeプロパティはこれを処理する部分(私は間違っている可能性があります)が、送信される現在のパケットはかなり小さく、バッファ制限は現在送信されているパケットよりもはるかに大きいと考えています。これは、syslog-ngがこのトラフィックを非常に少ないオーバーフローで処理できるようになったので、おそらくUdpClientに欠けているようなチューニングのような感じです。 –
このプログラムにパケットを送信するために使用しているパケットサイズは?どのツールでこれらのパケットを送信していますか?どのプロセッサタイプを使用していますか?ループバックインターフェイスを使用していることを確認できますか(つまり、送信者とプログラムは同じLinuxホストにあります)。あなたのLinuxボックスで、どのバージョンのドットネットを使用していますか?1.0.4、より古い、より最近ですか? –