Linux UDP缓冲区的单位是什么?sysctl参数的文档在哪里?

Linux UDP缓冲区的单位是什么?sysctl参数的文档在哪里?,linux,sockets,udp,buffer,sysctl,Linux,Sockets,Udp,Buffer,Sysctl,我正在运行x86_64 RedHat 5.3(内核2.6.18),并在尝试设置UDP缓冲区的上下文中特别关注sysctl-a中的net.core.rmem_max。接收器应用程序有时会丢失数据包,但我认为缓冲区已经足够大了,这取决于它的含义: 此设置的单位是什么?位、字节、数据包或页面?如果是位或字节,是来自数据报/有效负载(如100字节)还是网络MTU大小(约1500字节)?如果是页面,以字节为单位的页面大小是多少 这是每个系统、每个物理设备(NIC)、每个虚拟设备(VLAN)、每个进程、每个

我正在运行x86_64 RedHat 5.3(内核2.6.18),并在尝试设置UDP缓冲区的上下文中特别关注sysctl-a中的net.core.rmem_max。接收器应用程序有时会丢失数据包,但我认为缓冲区已经足够大了,这取决于它的含义:

此设置的单位是什么?位、字节、数据包或页面?如果是位或字节,是来自数据报/有效负载(如100字节)还是网络MTU大小(约1500字节)?如果是页面,以字节为单位的页面大小是多少

这是每个系统、每个物理设备(NIC)、每个虚拟设备(VLAN)、每个进程、每个线程、每个套接字/每个多播组的最大值吗

例如,假设我的数据是每条消息100字节,每个网络数据包包含2条消息,我希望每个套接字能够缓冲50000条消息,并且我在4个线程中的每个线程上打开3个套接字。net.core.rmem_max应该有多大?同样,当我在应用程序中设置套接字选项时,单位有效负载字节是多少,在这种情况下每个套接字上有5000000字节

最后,一般来说,我如何找到通过sysctl-a看到的参数的单位的详细信息?对于其他参数,例如net.core.netdev_max_backlog和net.ipv4.igmp_max_成员资格,我有类似的单位和每X个问题

谢谢。

您可以查看文档。也就是说,这些参数中的许多都是非常缺乏文档记录的,所以请期待do-do-Google从博客和邮件列表中挖掘出血淋淋的细节

rmem_max是每个套接字的最大缓冲区,以字节为单位。仔细研究,这似乎是接收整个数据包的内存,因此大小也必须包括/ip/udp头的大小——尽管这个区域对我来说很模糊


请记住,UDP是不可靠的。丢失的来源很多,至少在交换机和路由器之间——它们也有缓冲区。

在socket(7)手册页中有完整的记录(以字节为单位)

此外,可使用SO_RCVBUF(如同一页所述)在每个插座的基础上设置限制

阅读socket(7)、ip(7)和udp(7)手册页,了解这些东西实际上是如何工作的。sysctl记录在这里