Maintained by: NLnet Labs

Multi-threaded operation?

Havard Eidnes
Mon Oct 5 14:43:11 CEST 2015


Hi,

it looks like I'll have to answer my own question, which is a
little disappointing:

> I'm running unbound 1.5.4 on NetBSD/amd64 7.0, and I notice that
> despite me having configured
>
> server:
>   num-threads: 12
>   so-reuseport: yes
>
> only one of the threads is handling all the queries, according to
> the output from "unbound-control stats".  "Not what I wanted."

It turns out that using the "so-reuseport" setting to distribute
the load over the threads is a fairly recent Linuxism, and
relying on it causing the kernel to distribute the load over the
different sockets is not portable.

The first answer in

  http://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they-mean-t

says it quite clearly:

    Linux 3.9 added the option SO_REUSEPORT to Linux as well.
    [...] Additionally the kernel performs some "special magic"
    for SO_REUSEPORT sockets that isn't found in any other
    operating system so far: For UDP sockets, it tries to
    distribute datagrams evenly, for TCP listening sockets, it
    tries to distribute incoming connect requests (those accepted
    by calling accept()) evenly across all the sockets that share
    the same address and port combination.  [...]

I'll try to turn off the so-reuseport option later today, and see
if that improves the situation.

Regards,

- Håvard