我正在运行 x86_64 RedHat 5.3(内核 2.6.18)并在尝试设置 UDP 缓冲区的上下文中专门查看来自 sysctl -a 的 net.core.rmem_max。接收器应用程序有时会丢失数据包,但我认为缓冲区已经足够大了,具体取决于它的含义:
此设置的单位是什么——位、字节、数据包或页?如果是位或字节,它是来自数据报/有效负载(例如 100 字节)还是网络 MTU 大小(~1500 字节)?如果是页面,页面大小是多少(以字节为单位)?
这是每个系统、每个物理设备 (NIC)、每个虚拟设备 (VLAN)、每个进程、每个线程、每个套接字/每个多播组的最大值吗?
例如,假设我的数据是每条消息 100 字节,每个网络数据包包含 2 条消息,并且我希望每个套接字能够缓冲 50,000 条消息,并且我在 4 个线程中的每个线程上为每个线程打开 3 个套接字。net.core.rmem_max 应该有多大?同样,当我在应用程序中设置套接字选项时,单位有效负载字节,所以在这种情况下每个套接字上的 5000000?
最后,一般来说,我如何找到通过 sysctl -a 看到的参数的单位详细信息?我有类似的单位和关于其他参数(如 net.core.netdev_max_backlog 和 net.ipv4.igmp_max_memberships)的问题。
谢谢你。