[Dnsmasq-discuss] excessive cpu consumption in 2.39rc1

Simon Kelley simon at thekelleys.org.uk
Mon Apr 16 15:26:45 BST 2007

Carlos Carvalho wrote:
> Simon Kelley (simon at thekelleys.org.uk) wrote on 14 April 2007 09:08:
>  >Carlos Carvalho wrote:
>  >> I really have a problem with this new code. The server is loaded and
>  >> dnsmasq takes a long time to answer. I've got some angry users
>  >> today...
>  >
>  >Dnsmasq tries to limit queue overflows by delaying  in the log() routine 
>  >for longer and longer times as the queue length increases. That would 
>  >explain the long query times, but it's rather strange that it's worse 
>  >than with log-max=0, since the queue will only build up (thus causing 
>  >delays) when syslogd is slow, and if syslogd is slow, then logging will 
>  >block in the log-max=0 case, so that should be slow too.....
> I don't know if it was worse, it looked as bad. I had to restore
> service quickly, so I just turned logging off.
>  >> I tried log-max=1000 to no avail. I had to disable logging to restore
>  >> the service (make it fast enough).
>  >
>  >I recall that you do lots of logging: log-queries and log-dhcp? Is it 
>  >faster with log-max=0?
> No, that's why I had to turn off logging.

OK, just to be clear: when your sever is loaded, is it too slow to have
 logging on with 2.38 too? I hope so, otherwise there's an effect here
which I don't understand.
>  >> It seems that log-max is limited to 25. This shouldn't happen...
>  >> 
>  >> Another alternative would be to disable the new code. In my case
>  >> there's no risk of deadlock because the server that runs syslog (and
>  >> dnsmasq) doesn't use dnsmasq itself, it's only for the clients.
>  >> However setting log-max high enough should have the same effect.
>  >> 
>  >
>  >log-max=0 does effectively disable the new behaviour, and I'm starting 
>  >to thing that would be a better default, for precisely this sort of reason.
> In summary, the new code seems to be working correctly. Thanks for it.
> However I have two requests. First, the limiting of log-max to 25 is
> against my principles. One must not change a user setting if the
> implementation doesn't require it, and if it's done it must be
> documented in BIG LETTERS.
> Second, the increasing delays when there are queued log messages
> should be documented and only happen above a certain fraction of
> log-max queue usage. This is so that one can set a large log-max to
> have fast response even with transient slow logging; that's what I
> tried putting log-max=1000.

Ok, I've put up


which makes basically these changes.

1) async logging is off by default, it can be enabled with --log-async
2) When enabled, the queue defaults to 5, but can be increased with
   --log-async=<queue size>
3) The queue size is now limited to 100 (I still contend that very large
   queues are useless.) the actual queue in use and sync/async are
   logged at startup.
4) The delay is tuned as you suggest: it only starts when the last 8
   queue entries are used.

Thanks, Carlos, for the useful suggestions. Everybody please test.



More information about the Dnsmasq-discuss mailing list