On 03/15/2015 02:06 PM, Simon Kelley wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 12/03/15 00:15, Rick Jones wrote:
Does dnsmasq make any setsockopt(SO_SNDBUF) settings?  Perhaps the
SO_SNDBUF has filled thanks to Linux's intra-stack flow-control and
an attempt to (non blocking?) send has triggered the EAGAIN?

Just guessing,


No, it doesn't change the buffer size. I think your guess may be a
good one.


I wonder some adaptive buffer-size expansion could be created?

Presumably, these are transient conditions right? I suppose there are a few choices - one would be to queue the request internally and send it again "later." Another would be to simply drop the request outright (non-Linux stacks likely would have done so anyway and not necessarily told the caller).

The third would be to tweak the SO_[SND|RCV]BUF explicitly. Under Linux for that to "take" the administrator will have to have tweaked net.core.[rw]mem_max. Otherwise Linux will silently cap any request above that value.

As for how much buffer, I suppose for the SO_SNDBUF decision it would be how much delay is one willing to add. Then figure how many sends could be drained by the NIC in that length of time. If the Linux version is new enough, it may already have fq_codel employed as the default qdisc and there may already be a fair bit of buffering below the socket buffer.

If there are UDP receive errors being recorded (ie because dnsmasq wasn't keeping-up with the incoming requests) then the computation would be just how long one might reasonably expect a dnsmasq process to remain blocked by something else and compute from there.

Lots of choices and "it depends" :)

rick

_______________________________________________
Dnsmasq-discuss mailing list
Dnsmasq-discuss@lists.thekelleys.org.uk
http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss

Reply via email to