From: Dave Chinner <david@fromorbit.com>
To: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Rob van der Heij <rvdheij@gmail.com>,
Mel Gorman <mgorman@suse.de>,
Andrew Morton <akpm@linux-foundation.org>,
Yannick Brosseau <yannick.brosseau@gmail.com>,
stable@vger.kernel.org, LKML <linux-kernel@vger.kernel.org>,
"lttng-dev@lists.lttng.org" <lttng-dev@lists.lttng.org>
Subject: Re: [-stable 3.8.1 performance regression] madvise POSIX_FADV_DONTNEED
Date: Tue, 25 Jun 2013 11:56:48 +1000 [thread overview]
Message-ID: <20130625015648.GO29376@dastard> (raw)
In-Reply-To: <20130620122016.GA12700@Krystal>
On Thu, Jun 20, 2013 at 08:20:16AM -0400, Mathieu Desnoyers wrote:
> * Rob van der Heij (rvdheij@gmail.com) wrote:
> > Wouldn't you batch the calls to drop the pages from cache rather than drop
> > one packet at a time?
>
> By default for kernel tracing, lttng's trace packets are 1MB, so I
> consider the call to fadvise to be already batched by applying it to 1MB
> packets rather than indivitual pages. Even there, it seems that the
> extra overhead added by the lru drain on each CPU is noticeable.
>
> Another reason for not batching this in larger chunks is to limit the
> impact of the tracer on the kernel page cache. LTTng limits itself to
> its own set of buffers, and use the page cache for what is absolutely
> needed to perform I/O, but no more.
I think you are doing it wrong. This is a poster child case for
using Direct IO and completely avoiding the page cache altogether....
> > Your effort to help Linux mm seems a bit overkill,
>
> Without performing this, I have a situation similar as yours, where
> LTTng fills up the page cache very quickly, until it gets to a point
> where memory pressure level increase enough that the consumerd is
> blocked until some pages are reclaimed. I really don't care about making
> the consumerd "as fast as possible for a while" if it means its
> throughput will drop when the page cache is filled. I prefer a constant
> slower pace to a short burst followed by slower throughput.
>
> > and you don't want every application to do it like that himself.
>
> Indeed, tracing has always been slightly odd in the sense that it's not
> the workload the system is meant to run, but rather a tool that should
> have the smallest impact on the usual system's run when it is used.
>
> > The
> > fadvise will not even work when the page is still to be flushed out.
> > Without the patch that started the thread, it would 'at random' not work
> > due to SMP race condition (not multi-threading).
>
> This is why the lttng consumerd calls:
>
> sync_file_range with flags:
> SYNC_FILE_RANGE_WAIT_BEFORE
> SYNC_FILE_RANGE_WRITE
> SYNC_FILE_RANGE_WAIT_AFTER
>
> on the page range. The purpose of this call is to flush the pages to
> disk before calling fadvise(POSIX_FADV_DONTNEED) on the page range.
Yup, you're emulating direct IO semantics with buffered IO.
This seems to be an emerging trend I'm seeing a lot of over the past
few months - I'm hearing about it because of all the wierd corner
case behaviours it causes because sync_file_range() doesn't provide
data integrity guarantees and fadvise(DONTNEED) can randomly issue
lots of IO, block for long periods of time, silently do nothing,
remove pages from the page cache and/or some or all of the above.
Direct IO is a model of sanity compared to that mess....
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2013-06-25 1:56 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <51BE1828.3060206@gmail.com>
2013-06-17 14:13 ` [-stable 3.8.1 performance regression] madvise POSIX_FADV_DONTNEED Mathieu Desnoyers
2013-06-17 21:24 ` Andrew Morton
2013-06-17 21:39 ` Raphaël Beamonte
[not found] ` <CAE_Gge34HCroSgNgiXL1j7Le3CNKRXR=7TZQhJSmY+wfWniKug@mail.gmail.com>
2013-06-17 21:57 ` [lttng-dev] " Andrew Morton
2013-06-18 2:15 ` Mathieu Desnoyers
2013-06-18 2:44 ` Andrew Morton
2013-06-18 9:29 ` Mel Gorman
2013-06-18 10:11 ` Mel Gorman
2013-06-19 19:25 ` Mathieu Desnoyers
2013-06-20 6:36 ` Rob van der Heij
[not found] ` <CAJCc=kijujORhPUmPvzHj-MMdyVbf-iHEK0Jx-VHbTO8q4ESFA@mail.gmail.com>
2013-06-20 12:20 ` Mathieu Desnoyers
2013-06-25 1:56 ` Dave Chinner [this message]
2013-07-02 13:58 ` Mathieu Desnoyers
2013-07-03 0:55 ` Mathieu Desnoyers
2013-07-03 8:47 ` Mel Gorman
2013-07-03 14:53 ` Jeff Moyer
2013-07-03 14:53 ` Jeff Moyer
2013-07-04 0:03 ` Dave Chinner
2013-07-04 0:31 ` Mathieu Desnoyers
2013-07-04 21:11 ` Rob van der Heij
2013-07-05 1:42 ` Dave Chinner
2013-07-05 2:34 ` Mathieu Desnoyers
2013-07-03 18:47 ` Yannick Brosseau
2013-07-05 14:18 ` Mel Gorman
2013-07-05 14:18 ` Mel Gorman
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=20130625015648.GO29376@dastard \
--to=david@fromorbit.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lttng-dev@lists.lttng.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mgorman@suse.de \
--cc=rvdheij@gmail.com \
--cc=stable@vger.kernel.org \
--cc=yannick.brosseau@gmail.com \
/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.