request drops in BIND?
KyoungSoo Park
kyoungso at cs.princeton.edu
Mon May 10 14:07:51 UTC 2004
Hi BIND hackers(or anyone interested in BIND's performance),
To know BIND's reliability & performance, I tested BIND 9.2.3 by sending
burst requests and
seeing how many actually get back.
When I did 200 requests of a single local domain name(the result should
be cached in the BIND) at the same time,
I see about 20 - 22 responses are usually missing.
The BIND server that I configured is for testing only, so there is no
user except for me.
I wonder why it starts failing to respond at the burst request rate 178
requests/sec.
When I looked through tcpdump, then it seems the BIND gets all requests, but
it seems it's dropping requests inside the server.
Why 178 requests?
BIND's default recv buffer size is max(32KB, default buffer), and in the
box I tested, it's 64KB.
Each request is about 64 bytes including header(UDP/IP), so the recv
buffer should be big enough to hold all requests.
When we think about the send buffer(64KB), each response's size is about
323Bytes, so it can only
hold up to 202 responses at any one time. Maybe it's because send buffer
overflow, but I don't know how that happens.
You might suspect client's buffer overflow, but I use 150 different UDP
sockets and each has its own
recv/send buffer of 64KB, so it's not a problem with the client side.
Also, the client and server live on the same
network segment whose switch is 100 Mbps, so it's not a packet loss or
network problem either.
Surprisingly enough, when you use just Ping(udp ping that I made to
simulate the BIND, it gets 64-byte request/ sends
323 bytes back), then you don't see any drops at the rate of 200 burst
requests.
I've looked at the BIND source code(9.2.3), and it seems it's dropping
requests at some point, but I can't possibly know
those are related with the problems I see. Specifically, when there is
some "needs" like zone transfer, dumping statistics so on,
then BIND blocks and if the time taken for those operations is bigger
than 3 seconds, it tries to drain the udp buffer.
But it only satisfies 500 requests and drop all the others. 500 is good
for 32KB recv buffer(500*64 ~= 32 KB), but I think most
BIND uses bigger buffer than that. But this seems not related with the
problems I see, because my request rate is 200/sec.
Is there anyone who's familar with BIND's interaction with high requests?
Or, any reasonable guessing is greatly appreciated!
Thanks,
KyoungSoo
More information about the bind-users
mailing list