Project

General

Profile

Actions

Bug #1730

open

pkgsrc BIND asserts under load, kqueue-related?

Added by sjg over 11 years ago. Updated 5 months ago.

Status:
Feedback
Priority:
Normal
Assignee:
Category:
Kernel
Target version:
Start date:
Due date:
% Done:

0%

Estimated time:

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

Actions #1

Updated by sjg over 11 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.

Actions #2

Updated by sjg over 11 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.

Actions #3

Updated by tuxillo almost 7 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

Actions #4

Updated by tuxillo 5 months ago

  • Target version changed from 4.2 to 6.0
Actions

Also available in: Atom PDF