public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* min-write-size for a UDP socket to be POLLOUT cannot be set. (proposed fixes)
@ 2001-12-10 19:46 Ben Greear
  2001-12-10 20:00 ` Richard B. Johnson
  0 siblings, 1 reply; 5+ messages in thread
From: Ben Greear @ 2001-12-10 19:46 UTC (permalink / raw)
  To: linux-kernel

This relates to my earlier question about setting the threshold
at which select returns that a (UDP) socket is writable.

It appears that UDP sockets are hardwired at 2048 bytes...

 From linux/include/net/sock.h:

....
#define SOCK_MIN_SNDBUF 2048
#define SOCK_MIN_RCVBUF 256
/* Must be less or equal SOCK_MIN_SNDBUF */
#define SOCK_MIN_WRITE_SPACE	SOCK_MIN_SNDBUF

/*
  *	Default write policy as shown to user space via poll/select/SIGIO
  *	Kernel internally doesn't use the MIN_WRITE_SPACE threshold.
  */
static inline int sock_writeable(struct sock *sk)
{
	return sock_wspace(sk) >= SOCK_MIN_WRITE_SPACE;
}


It appears that this issue could be fixed in several ways.  One would be to
make SOCK_MIN_WRITE_SPACE a global variable and set it through the proc
file system (or an IOCTL, etc...).  That is not very flexible, but
easy.  It sounds more likely to break existing programs though..

A more flexible way would be to set the value on a per sock basis (in the sock structure),
which is probably the right way, but may require a new IOCTL defined
in user-space...  This way should be completely backwards compatible, as the
default value can be 2048 as it is now.

Fixing this little problem will be very useful for anyone using larger UDP packet
sizes and poll/select.  Remember that GigE supports >>2048 MTU, so using larger UDP
packets becomes a more useful thing, even in the real world :)


As a side note, it appears that TCP is much smarter about this, taking the
current load into account:  If there is very little in the current write
queue, then it will say the socket is writable at a very small threshold.
However, if the write queue is almost full, tcp will make select/poll wait
longer.  This type of thing could also work for UDP, and the user can indirectly
determine the behaviour by setting the write-queue size appropriately large...

Thanks,
Ben


-- 
Ben Greear <greearb@candelatech.com>       <Ben_Greear AT excite.com>
President of Candela Technologies Inc      http://www.candelatech.com
ScryMUD:  http://scry.wanfear.com     http://scry.wanfear.com/~greear



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2001-12-10 21:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-12-10 19:46 min-write-size for a UDP socket to be POLLOUT cannot be set. (proposed fixes) Ben Greear
2001-12-10 20:00 ` Richard B. Johnson
2001-12-10 20:11   ` Ben Greear
2001-12-10 20:43     ` Richard B. Johnson
2001-12-10 21:14       ` Ben Greear

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox