[bind10-dev] Multicore Auth

JINMEI Tatuya / 神明達哉 jinmei at isc.org
Fri Jul 15 01:15:06 UTC 2011


At Tue, 12 Jul 2011 23:52:06 +0200,
Michal 'vorner' Vaner <michal.vaner at nic.cz> wrote:

> I believe all of those could be implemented and serve our purpose. The question
> is, what of them look like simplest to you and what do you like? We probably
> should decide before we start implementing it. Or should this discussion be
> moved to some future sprint?

Overall your analysis seems reasonable.  Here are my comments:

- One key question is how often we want to be able to reflect changes.
  If we want to support, say, 1000 dynamic updates / sec and want to
  make the changes visible "instantly", I can hardly imagine any other
  approach than multi threads + locking (there may be a clever way to
  achieve the goal with, e.g., shared memory + multiple processes,
  still involving very few synchronization overhead, but I have no
  specific idea right now).  If we can allow some delay in propagating
  changes so that we can apply a set of changes at once and
  periodically (e.g., every 30sec), other approaches such as multi
  process + shared memory image can be a solution.  Do we have any
  specific goal/requirement regarding this question?

  (forgetting this big question for now...)

- I would first begin with 'multi process, separate in-memory data
  source', then 'multi process, shared in-memory data source'.  I
  suspect the overall memory footprint won't be a serious concern for
  BIND 10 so soon, so I'd prefer simplicity, stability, and gradual
  improvements.  In particular, the separate model would make the
  update implementation much simpler.

- I'd point out multi thread would not be as bad as we might think for
  authoritative only servers (with relatively stable zones).  It would
  be quite possible to rely on giant (and read-write) locks
  for the entire zone, and it doesn't involve heavy synchronization
  overhead.  That said, I'd still prefer multi process approach,
  because it would be more flexible (for example, it would be easier
  to run multiple processes with different configurations).  Also, we
  may hit other inter thread contention with multiple threads such as
  that within boost or ASIO.  And, even if we can use cheaper locks,
  locking still involves costs, and if we want to scale up to several
  tens of cores, the total costs may become non-negligible.

- For update support, I like the two copy approach Stephen mentioned.

- (Assuming performance is the major reason for supporting multi
  cores) I think we should keep in our mind implications with multi
  cores, but I suspect the development should be deferred until we
  support all major basic features (at least: full DNSSEC support for
  in-memory data source, dynamic update and IXFR) and we sufficiently
  improve single-core case.

- Another thing to be considered is how/whether to share hot spot
  cache between instances (threads/processes) running on different
  cores.  I've not fully thought about that, but I suspect we'd end up
  each instance having separate cache.  That would lead to increase
  total memory footprint, which may or may not be a big issue.  If
  it's substantial, we need to consider a nice way to deal with that.

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



More information about the bind10-dev mailing list