From: Wido den Hollander <wido@widodh.nl>
To: Mark Kampe <mark.kampe@dreamhost.com>
Cc: Sage Weil <sage@newdream.net>, ceph-devel@vger.kernel.org
Subject: Re: The costs of logging and not logging
Date: Mon, 21 Nov 2011 20:56:13 +0100 [thread overview]
Message-ID: <4ECAACDD.8080400@widodh.nl> (raw)
In-Reply-To: <4ECAA71C.10202@dreamhost.com>
Hi,
On 11/21/2011 08:31 PM, Mark Kampe wrote:
> I'm a big believer in asynchronous flushes of an in-memory
> ring-buffer. For user-mode processes a core-dump-grave
> robber can reliably pull out all of the un-flushed entries
> ... and the same process will also work for the vast majority
> of all kernel crashes.
>
> String logging is popular because:
> 1. It trivial to do (in the instrumented code)
> 2. It is trivial to read (in the recovered logs)
> 3. It is easily usable by grep/perl/etc type tools
>
> But binary logging:
> 1. is much (e.g. 4-10x) smaller (especially for standard header info)
> 2. is much faster to take (no formatting, less data to copy)
> 3. is much faster to process (no re-parsing)
> 4. is smaller to store on disk and faster to ship for diagnosis
I'm a fan of this concept as well. In our hosting environments we use
Varnish a lot to speed up HTTP traffic. This reverse proxy also uses a
in-memory ring-buffer for logging.
Varnish logs everything into the ring and with processes like
"varnishlog" you can grab the data you want, filter out whatever you
want or what you don't want.
You can use varnishncsa to generate a NCSA formatted logfile out of the
same buffer, without suffering performance in the proxy itself.
A ring-buffer can also be used for statistics, if you'd log a entry into
the buffer for every operation the OSD does, you would also be able to
generate statistics out of this, something Ceph is still lacking.
If you are logging to disk and you run into disk I/O problems (or
network I/O) you'd only loose logging entries.
Wido
>
> and a log dumper can quickly produce output that
> is identical to what the strings would have been
>
> So I also prefer binary logs ... even though they require
> the importation of additional classes. But ...
>
> (a) the log classes must be kept upwards compatible so
> that old logs can be ready by newer tools.
>
> (b) the binary records should glow-in-the-dark, so that
> they can be recovered even from corrupted ring-buffers
> and blocks whose meta-data has been lost.
>
>> I see two main issues with the slowness of the current logs:
>>
>> - all of the string rendering in the operator<<()'s is slow. things like
>> prefixing every line with a dump of the pg state is great for debugging,
>> but makes the overhead very high. we could scale all of that back, but
>> it'd be a big project.
>> - the logging always goes to a file, synchronously. we could write to a
>> ring buffer and either write it out only on crash, or (at the very least)
>> write it async.
>
>> I wonder, though, if something different might work. gcc lets you
>> arbitrarily instrument function calls with -finstrument-functions.
>> Something that logs function calls and arguments to an in-memory ring
>> buffer and dumps that out on crash could potentially have a low overhead
>> (if we restrict it to certain code) and would give us lots of insight
>> into
>> what happend leading up to the crash.
>
> This does have the advantage of being automatic ... but it is much more
> information, perhaps without much more value. My experience with
> logging is that you don't have to capture very much information,
> and that in fact we often go back to weed out no-longer-interesting
> information. Not only does too much information take cycles and
> space, but it also makes it hard to find "the good stuff". I think that
> human architects can make very good decisions about what
> information should be captured, and when.
> --
> To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2011-11-21 19:56 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-21 16:29 The costs of logging and not logging Mark Kampe
2011-11-21 18:54 ` Sage Weil
2011-11-21 19:31 ` Mark Kampe
2011-11-21 19:56 ` Wido den Hollander [this message]
2011-11-21 20:08 ` Noah Watkins
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4ECAACDD.8080400@widodh.nl \
--to=wido@widodh.nl \
--cc=ceph-devel@vger.kernel.org \
--cc=mark.kampe@dreamhost.com \
--cc=sage@newdream.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.