I run x86_64 RedHat 5.3 (kernel 2.6.18) and look specifically at net.core.rmem_max from sysctl -a in the context of trying to set UDP buffers. The recipient application sometimes skips packets, but I think the buffer is already large enough, depending on what it means:
What are the units of this parameter - bits, bytes, packets or pages? If bits or bytes, is it from a datagram / payload (e.g. 100 bytes) or the size of the network MTU (~ 1500 bytes)? If pages, what page size in bytes?
And is this the maximum for each system, to a physical device (NIC), for each virtual device (VLAN), for each process, for a stream, for each socket / for a multicast group?
For example, suppose my data is 100 bytes per message, and each network packet contains 2 messages, and I want to be able to buffer 50,000 messages per socket, and I open 3 sockets per stream for each of the 4 threads. How big should net.core.rmem_max be? Similarly, when I set the socket parameters inside the application, these are bytes of units payload, why 5,000,000 per socket in this case?
Finally, in general, how would I find the unit details for the parameters that I see through sysctl -a? I have similar units on X questions about other parameters such as net.core.netdev_max_backlog and net.ipv4.igmp_max_memberships.
Thank.
source
share