我的服务器在运行 Ubuntu 10.04 时,UDP 数据包出现一些延迟。我应该如何更改 UDP 数据包的设置?我认为问题就在这里。
在我的/proc/sys/net/ipv4/udp_mem
我有137088 182784 274176
udp_rmem_min: 4096
udp_wmem_min: 4096
/proc/sys/net/core/rmem_max - 131071
/proc/sys/net/core/rmem_default - 124928
/proc/sys/net/core/wmem_max - 131071
/proc/sys/net/core/wmem_default - 124928
我每秒从客户端向服务器发送 30 个数据包,并从服务器向客户端发送 30 个数据包。当有大量用户连接时,它们都会延迟到达。
答案1
您的问题与 UDP 不直接相关。问题在于您的一个核心已达到最大容量,而使用 UDP 的某些应用程序无法利用多个核心。您可以选择对其进行配置/优化,使其利用可用资源完成工作,或者重新设计它以使用多个线程或多个进程,以便它能够利用其他核心。
具体如何操作取决于代码中现在存在什么问题。一种可能性是代码大致如下所示:
while(1)
{
do_udp_stuff(); // this is fairly simple
do_other_stuff(); // this is complex
}
在这种情况下,解决方案要么进行优化do_other_stuff
,要么将其移至不同的线程。
另一种可能性是代码如下所示:
while(1)
{
do_some_work_which_generates_a_UDP_Packet();
send_udp_patch();
}
// or
while(1)
{
receive_UDP_packet();
process_UDP_packet();
}
在这种情况下,解决方案可能是让多个线程执行生成 UDP 数据包或处理 UDP 数据包的工作。
基本上,您要么必须减少每个 UDP 数据包使用的 CPU 数量,要么需要通过在核心上分配工作来提高 CPU 利用率。