From: Nicholas Piggin <npiggin@gmail.com>
To: Jan Kara <jack@suse.cz>, Matthew Wilcox <willy@infradead.org>
Cc: linux-mm@kvack.org, mgorman@suse.de
Subject: Re: Truncate regression due to commit 69b6c1319b6
Date: Wed, 27 Feb 2019 16:03:25 +1000 [thread overview]
Message-ID: <1551246328.xx85zsmomm.astroid@bobo.none> (raw)
In-Reply-To: <20190226172744.GH11592@bombadil.infradead.org>
Matthew Wilcox's on February 27, 2019 3:27 am:
> On Tue, Feb 26, 2019 at 05:56:28PM +0100, Jan Kara wrote:
>> after some peripeties, I was able to bisect down to a regression in
>> truncate performance caused by commit 69b6c1319b6 "mm: Convert truncate to
>> XArray".
>
> [...]
>
>> I've gathered also perf profiles but from the first look they don't show
>> anything surprising besides xas_load() and xas_store() taking up more time
>> than original counterparts did. I'll try to dig more into this but any idea
>> is appreciated.
>
> Well, that's a short and sweet little commit. Stripped of comment
> changes, it's just:
>
> - struct radix_tree_node *node;
> - void **slot;
> + XA_STATE(xas, &mapping->i_pages, index);
>
> - if (!__radix_tree_lookup(&mapping->i_pages, index, &node, &slot))
> + xas_set_update(&xas, workingset_update_node);
> + if (xas_load(&xas) != entry)
> return;
> - if (*slot != entry)
> - return;
> - __radix_tree_replace(&mapping->i_pages, node, slot, NULL,
> - workingset_update_node);
> + xas_store(&xas, NULL);
>
> I have a few reactions to this:
>
> 1. I'm concerned that the XArray may generally be slower than the radix
> tree was. I didn't notice that in my testing, but maybe I didn't do
> the right tests.
>
> 2. The setup overhead of the XA_STATE might be a problem.
> If so, we can do some batching in order to improve things.
> I suspect your test is calling __clear_shadow_entry through the
> truncate_exceptional_pvec_entries() path, which is already a batch.
> Maybe something like patch [1] at the end of this mail.
One nasty thing about the XA_STATE stack object as opposed to just
passing the parameters (in the same order) down to children is that
you get the same memory accessed nearby, but in different ways
(different base register, offset, addressing mode etc). Which can
reduce effectiveness of memory disambiguation prediction, at least
in cold predictor case.
I've seen (on some POWER CPUs at least) flushes due to aliasing
access in some of these xarray call chains, although no idea if
that actually makes a noticable difference in microbenchmark like
this.
But it's not the greatest pattern to use for passing to low level
performance critical functions :( Ideally the compiler could just
do a big LTO pass right at the end and unwind it all back into
registers and fix everything, but that will never happen.
Thanks,
Nick
next prev parent reply other threads:[~2019-02-27 6:03 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-26 16:56 Jan Kara
2019-02-26 17:27 ` Matthew Wilcox
2019-02-27 6:03 ` Nicholas Piggin [this message]
2019-02-27 12:35 ` Matthew Wilcox
2019-02-28 9:31 ` Nicholas Piggin
2019-02-27 11:27 ` Jan Kara
2019-02-27 12:24 ` Matthew Wilcox
2019-02-27 16:55 ` Jan Kara
2019-02-28 22:53 ` Matthew Wilcox
2019-03-14 11:10 ` Jan Kara
2019-05-31 19:04 ` Matthew Wilcox
2019-08-27 13:29 ` Jan Kara
2019-08-29 11:59 ` Matthew Wilcox
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=1551246328.xx85zsmomm.astroid@bobo.none \
--to=npiggin@gmail.com \
--cc=jack@suse.cz \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=willy@infradead.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox