All of lore.kernel.org
 help / color / mirror / Atom feed
From: Denys Vlasenko <dvlasenk@redhat.com>
To: Ingo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	Thomas Graf <tgraf@suug.ch>,
	"David S. Miller" <davem@davemloft.net>,
	Bart Van Assche <bvanassche@acm.org>,
	Peter Zijlstra <peterz@infradead.org>,
	David Rientjes <rientjes@google.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Oleg Nesterov <oleg@redhat.com>,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] force inlining of spinlock ops
Date: Tue, 12 May 2015 13:02:21 +0200	[thread overview]
Message-ID: <5551DDBD.9010803@redhat.com> (raw)
In-Reply-To: <20150512074443.GA724@gmail.com>

On 05/12/2015 09:44 AM, Ingo Molnar wrote:
> 
> * Denys Vlasenko <dvlasenk@redhat.com> wrote:
> 
>> With both gcc 4.7.2 and 4.9.2, sometimes gcc mysteriously doesn't inline
>> very small functions we expect to be inlined. In particular,
>> with this config: http://busybox.net/~vda/kernel_config
>> there are more than a thousand copies of tiny spinlock-related functions:
> 
> That's an x86-64 allyesconfig AFAICS, right?

Close, but I disabled options which are clearly "heavy debugging" stuff.
IOW: many developers run their work machines with lock debugging etc,
but few would constantly use something which slows kernel down by a factor of 3!

So, CONFIG_KASAN is off. CONFIG_STAGING is also off. And a few others I forgot.

I'm using this config to see which inlines should be deinlined.
For that, I need to cover all callsites of each inline.
Thus, I need ~allyesconfig.

The discovery that there also exists the opposite problem (wrongly
*un*inlined functions) was accidental.


> It's not mysterious, but an effect of -Os plus allowing GCC to do 
> inlining heuristics:
> 
>   CONFIG_CC_OPTIMIZE_FOR_SIZE=y
>   CONFIG_OPTIMIZE_INLINING=y
> 
> Does the problem go away if you unset of these config options?

With CONFIG_CC_OPTIMIZE_FOR_SIZE off,
problem greatly diminishes, but is not eliminated.
Testing allyesconfig would take too long, so I just took defconfig.

On defconfig kernel, the following functions below 16 bytes
of machine code are auto-deinlined:

#Calls_ Size(hex)_______   Name____________________
      7 000000000000000b t hweight_long
      5 000000000000000f t init_once
      4 000000000000000d t cpumask_set_cpu
      4 000000000000000b t udp_lib_close
      4 0000000000000006 t udp_lib_hash
      3 000000000000000a t nofill
      3 0000000000000006 t sg_set_page.part.7
      2 000000000000000f t udplite_sk_init
      2 000000000000000f t ct_seq_next
      2 000000000000000e t encode_cookie
      2 000000000000000d t ktime_get_real
      2 000000000000000b t spin_lock
      2 000000000000000b t device_create_release
      2 000000000000000b t cpu_smt_flags
      2 000000000000000b t cpu_core_flags
      2 0000000000000009 t default_write_file
      2 0000000000000008 t __initcall_pl_driver_init6
      2 0000000000000008 t __initcall_nf_defrag_init6
      2 0000000000000008 t __initcall_hid_init6
      2 0000000000000008 t __initcall_ch_driver_init6
      2 0000000000000008 t default_read_file
      2 0000000000000006 t wiphy_to_rdev.part.4
      2 0000000000000006 t s_stop
      2 0000000000000006 t sg_set_page.part.3
      2 0000000000000006 t generic_print_tuple
      2 0000000000000006 t exp_seq_stop
      2 0000000000000006 t ct_seq_stop
      2 0000000000000006 t ct_cpu_seq_stop

In particular, one of the functions from my patches,
spin_lock(), has been auto-deinlined:

ffffffff8108adb0 <spin_lock>:
ffffffff8108adb0:       55                      push   %rbp
ffffffff8108adb1:       48 89 e5                mov    %rsp,%rbp
ffffffff8108adb4:       e8 37 db 81 00          callq  ffffffff818a88f0 <_raw_spin_lock>
ffffffff8108adb9:       5d                      pop    %rbp
ffffffff8108adba:       c3                      retq


> Furtermore, what is the size win on x86 defconfig with these options 
> set?

CONFIG_OPTIMIZE_INLINING=y is in defconfig.

Size difference for CC_OPTIMIZE_FOR_SIZE:

    text    data     bss      dec    hex filename
12335864 1746152 1081344 15163360 e75fe0 vmlinux.CC_OPTIMIZE_FOR_SIZE=y
10373764 1684200 1077248 13135212 c86d6c vmlinux.CC_OPTIMIZE_FOR_SIZE=n

Decrease by about 19%.

-- 
vda


  reply	other threads:[~2015-05-12 11:03 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-11 17:57 [PATCH] force inlining of spinlock ops Denys Vlasenko
2015-05-11 18:53 ` Josh Triplett
2015-05-11 22:19 ` Andrew Morton
2015-05-12  8:16   ` Hagen Paul Pfeifer
2015-05-12  9:44   ` Denys Vlasenko
2015-05-12  9:48     ` Ingo Molnar
2015-05-12  7:44 ` Ingo Molnar
2015-05-12 11:02   ` Denys Vlasenko [this message]
2015-05-12 11:43     ` Ingo Molnar
2015-05-12 13:13       ` Denys Vlasenko
2015-05-13 10:17         ` Ingo Molnar
2015-05-13 10:28           ` Denys Vlasenko
2015-05-13 10:43             ` Ingo Molnar
2015-05-13 14:09               ` Denys Vlasenko
2015-05-15  7:20                 ` Heiko Carstens
  -- strict thread matches above, loose matches on Subject: below --
2015-07-13 18:31 Denys Vlasenko

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=5551DDBD.9010803@redhat.com \
    --to=dvlasenk@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=bvanassche@acm.org \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=rientjes@google.com \
    --cc=tgraf@suug.ch \
    --cc=torvalds@linux-foundation.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.