0
我正在研究Linux核心在Linux机器上的性能。具体确定框架本身可用的工具有哪些限制。如何增加UDPClient吞吐量
我一直在约50,000箱/每箱。到目前为止,看起来〜20,000 pps是UDPClient在一小部分数据包丢失之前能够实现的。使用另一种工具(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属性是处理这个问题的部分(我可能是错的),但是当前发送的数据包非常小,缓冲区限制远大于当前发送的数据包。这感觉就像我可能对UdpClient缺少一些调整,因为syslog-ng能够以很少的溢出处理这个流量 –
你用来发送数据包到这个程序的包大小是多少?你使用哪个工具发送这些数据包?你使用哪种处理器类型?你能否确认你使用的是回送接口(即发送者和你的程序在同一台Linux主机上)?您在Linux机器上使用的是哪个版本的dotnet:1.0.4,更旧,更新? –