Bug #1730
closedpkgsrc BIND asserts under load, kqueue-related?
Description
BIND from pkgsrc fails quickly under load with the message
sockmanager:maximum number of FD events (64) received
followed by an assertion
socket.c:2559: INSIST failed
This seems to be fixed by configuring with --disable-kqueue
To repeat: Use queryperf
Updated by sjg over 14 years ago
BIND is queuing socket operations (read/write), marking them as queued, but then
not filtering ready events (from kqueue/poll/select) that would result in a
second queued operation and then asserting when they catch it just prior to
queueing (in dispatch_recv() in this case, but it is also possible for it to
happen in dispatch_send()). Raising the number of FD events,
ISC_SOCKET_MAXEVENTS may work around this in our kevent case.
A possible fix might be to change the INSIST's in dispatch_send/recv() to if
(sock->pending_recv) return;, but I have not tested this.
There is an underlying bug here and we should re-file this upstream.
Updated by sjg over 14 years ago
I might have been wrong here, BIND does "unwatch" the descriptor for the read or
write case after queuing the read or write event. So it looks like it is
possible we are returning events from kevent(2) previously passed in with an
EV_DELETE flag. Will investigate further.
Updated by tuxillo almost 10 years ago
- Description updated (diff)
- Category set to Kernel
- Status changed from New to Feedback
- Target version set to 4.2
Hi,
Is this still relevant?
Cheers,
Antonio Huete
Updated by tuxillo almost 3 years ago
- Status changed from Feedback to Closed
- % Done changed from 0 to 100
We no longer have pkgsrc and we use bind, from dports, in our infra without problems. Closing this.