From: Hagen Paul Pfeifer <hagen@jauu.net>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org, Ingo Molnar <mingo@redhat.com>,
"H. Peter Anvin" <hpa@zytor.com>,
"David S. Miller" <davem@davemloft.net>,
x86@kernel.org
Subject: Re: [PATCH] enforce function inlining for hot functions
Date: Sat, 25 Apr 2015 01:10:56 +0200 [thread overview]
Message-ID: <20150424231056.GA6321@virgo.local> (raw)
In-Reply-To: <20150424201340.GD5561@linux.vnet.ibm.com>
* Paul E. McKenney | 2015-04-24 13:13:40 [-0700]:
>Hmmm... allyesconfig would have PROVE_RCU=y, which would mean that the
>above two would contain lockdep calls that might in some cases defeat
>inlining. With the more typical production choice of PROVE_RCU=n, I would
>expect these to just be a call instruction, which should get inlined.
Ok, here are the results:
with PROVE_RCU=y:
rcu_read_lock: 383 duplicates
with PROVE_RCU=n:
rcu_read_lock: 114 duplicates
If you look at the function anatomy of rcu_read_lock you often see the
following definitions:
<rcu_read_lock>:
55 push %rbp
48 89 e5 mov %rsp,%rbp
48 c7 c7 50 64 e7 85 mov $0xffffffff85e76450,%rdi
e8 ce ff ff ff callq ffffffff816af206 <rcu_lock_acquire>
5d pop %rbp
c3 retq
but sometimes rcu_read_lock looks:
<rcu_read_lock>:
55 push %rbp
48 89 e5 mov %rsp,%rbp
50 push %rax
68 83 1e 1c 81 pushq $0xffffffff811c1e83
b9 02 00 00 00 mov $0x2,%ecx
31 d2 xor %edx,%edx
45 31 c9 xor %r9d,%r9d
45 31 c0 xor %r8d,%r8d
31 f6 xor %esi,%esi
48 c7 c7 50 64 e7 85 mov $0xffffffff85e76450,%rdi
e8 86 4c f9 ff callq ffffffff81156b2e <lock_acquire>
5a pop %rdx
59 pop %rcx
c9 leaveq
c3 retq
Means rcu_lock_acquire() is inlined here - but not in every compilation unit.
Don't know exactly what forces gcc to inline not everywhere. Maybe register
pressure in the function unit, or at least gcc is think that. I don't know.
At the end you may notice that gcc inlining decisions are not always perfect
and a little bit fuzzy (sure, they have their metric/scoring system). And
sometimes the inlining should be enforced - as this patch do for some important
functions. But as I said we should not enforce it everywhere, rather we should
pray for better heuristics and let the compiler choose the best strategy (and
incorporate -Os/-O2 decisions too). I think this is the best compromise here.
Cheers, Hagen
next prev parent reply other threads:[~2015-04-24 23:11 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-23 21:40 [PATCH] enforce function inlining for hot functions Hagen Paul Pfeifer
2015-04-24 19:49 ` Andrew Morton
2015-04-24 20:13 ` Paul E. McKenney
2015-04-24 20:44 ` Hagen Paul Pfeifer
2015-04-24 23:10 ` Hagen Paul Pfeifer [this message]
2015-04-25 10:31 ` Paul E. McKenney
2015-04-25 13:26 ` Hagen Paul Pfeifer
2015-04-25 13:51 ` Paul E. McKenney
2015-04-24 20:39 ` Hagen Paul Pfeifer
2015-04-25 10:53 ` Markus Trippelsdorf
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=20150424231056.GA6321@virgo.local \
--to=hagen@jauu.net \
--cc=akpm@linux-foundation.org \
--cc=davem@davemloft.net \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=x86@kernel.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 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.