[bind10-dev] Receptionist experiment

JINMEI Tatuya / 神明達哉 jinmei at isc.org
Thu Feb 28 18:24:02 UTC 2013


At Thu, 28 Feb 2013 15:06:17 +0100,
Michal 'vorner' Vaner <michal.vaner at nic.cz> wrote:

> I did a little experiment with receptionist approach for #2776. I slightly
> modified auth and put another process in front of it.
[...]
> Anyway, I believe that it is possible to write the receptionist without much
> performance penalty and it seems to me to be the most flexible approach we
> thought about. I'd propose going the receptionist path (there are some
> pros/cons of each approach in git).

As an overall conclusion, if it works reasonably fast, I have no
objection to this proposal.

I have some comments on details:

- I'd like to keep each auth and resolver workable without
  receptionist; ignoring the counter-intuitive benchmark results, the
  additional overhead regarding the receptionist inevitably makes the
  entire throughput lower, and the introduction of the additional
  process and IPC makes the system less stable.  Since the hybrid mode
  of auth and resolver is generally a discouraged operation, I want to
  ensure others can run without it.
- I wonder how it would work for xfrout and DDNS.  auth cannot forward
  the FD to them any more, so this should be done by the receptionist.
  This means the receptionist needs to validate/inspect the incoming
  messages more intensively and also needs to have the ability of
  forwarding the FD.
- What should happen if the query has the RD bit but matches an
  authoritative zone?
- I've not looked into the code, but how does the receptionist
  determine the client addresses to return the answer?  Does it keep a
  state?
- Some of the above seem to suggest the receptionist would have to
  share a non negligible amount of features of auth, so I wonder we
  might want to extract some part of request handling of auth into an
  internal library and share it between them, or even provide the
  receptionist feature as a hook for auth.
- I don't know what the double-m version of recvmmsg and sendmmsg do,
  but if the goal is to exchange multiple memory regions between
  processes at once, normal recvmsg and sendmsg seem to suffice.
- We might want to be more careful about measuring the deviation of RTTs.
- as for the benchmark, I'd make sure the auth server is really busy
  utilizing near-100% CPU time, while queryperf runs with a safety
  margin.  Since queryperf can only use a single core, sometimes that
  can be the bottleneck, not the measurement target.  (Depending on
  the actual machine power) that's often the case at a very high query
  rate like over 100Kqps.  Also, in that sense, I'd rather test a
  single instance of b10-auth; in this context I don't think the total
  performance using multi-core is not of the main concern because
  contention overhead is less likely.

---
JINMEI, Tatuya
Internet Systems Consortium, Inc.


More information about the bind10-dev mailing list