From: Linus Torvalds <torvalds@linux-foundation.org>
To: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: Andrea Righi <righi.andrea@gmail.com>,
akpm@linux-foundation.org, linux-mm@kvack.org,
linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/1] mm: unify pmd_free() implementation
Date: Mon, 28 Jul 2008 09:45:14 -0700 (PDT) [thread overview]
Message-ID: <alpine.LFD.1.10.0807280937150.3486@nehalem.linux-foundation.org> (raw)
In-Reply-To: <1217261852.3503.89.camel@localhost.localdomain>
On Mon, 28 Jul 2008, James Bottomley wrote:
>
> Are you sure about this (the barrier)?
I'm sure. Try it. It perturbs the code quite a bit to have a function call
in the thing, because it
- clobbers all callee-clobbered registers.
This means that all functions that _used_ to be leaf functions and
needed no stack frame at all (because they were simple enough to use
only the callee-clobbered registers) are suddenly now going to be
significantly more costly.
Ergo: you get more stack movement with save/restore crud.
- it is a barrier wrt any variables that may be visible externally
(perhaps because they had their address taken), so it forces a flush to
memory for those.
- if it has arguments and return values, it also ends up forcing a
totally unnecessary argument setup (and all the fixed register crap
that involves, which means that you lost almost all your register
allocation freedom - not that you likely care, since most of your
registers are dead _anyway_ around the function call)
So empty functions calls are _deadly_ especially if the code was a leaf
function before, and suddenly isn't any more.
On the other hand, there are also many cases where function calls won't
matter much at all. If you had other function calls around that same area,
all the above issues essentially go away, since your registers are dead
anyway, and the function obviously wasn't a leaf function before the new
call.
So it does depend quite a bit on the pattern of use. And yes, function
argument setup can be a big part of it too.
Linus
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2008-07-28 16:45 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-28 15:51 Andrea Righi
2008-07-28 15:53 ` Linus Torvalds
2008-07-28 16:17 ` Andrea Righi
2008-07-28 16:27 ` KOSAKI Motohiro
2008-07-28 17:19 ` Andrea Righi
2008-07-28 20:30 ` Andrew Morton
2008-07-28 20:46 ` Jeremy Fitzhardinge
2008-07-28 22:53 ` [PATCH 1/1] mm: unify pmd_free() and __pmd_free_tlb() implementation Andrea Righi
2008-07-31 16:17 ` Ingo Molnar
2008-07-31 16:59 ` Andrea Righi
2008-07-28 16:17 ` [PATCH 1/1] mm: unify pmd_free() implementation James Bottomley
2008-07-28 16:45 ` Linus Torvalds [this message]
2008-07-28 16:58 ` James Bottomley
2008-07-28 17:10 ` Linus Torvalds
2008-07-28 20:08 ` [PATCH 1/1] mm: unify pmd_free() implementation -> instrumentation Mathieu Desnoyers
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=alpine.LFD.1.10.0807280937150.3486@nehalem.linux-foundation.org \
--to=torvalds@linux-foundation.org \
--cc=James.Bottomley@HansenPartnership.com \
--cc=akpm@linux-foundation.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=righi.andrea@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox