All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: "Ondřej Bílka" <neleai@seznam.cz>,
	"Linus Torvalds" <torvalds@linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>, gcc <gcc@gcc.gnu.org>,
	"Ingo Molnar" <mingo@kernel.org>,
	"H. Peter Anvin" <hpa@linux.intel.com>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"David Daney" <ddaney.cavm@gmail.com>,
	"Behan Webster" <behanw@converseincode.com>,
	"Peter Zijlstra" <peterz@infradead.org>,
	"Herbert Xu" <herbert@gondor.hengli.com.au>
Subject: Re: [RFC] gcc feature request: Moving blocks into sections
Date: Wed, 7 Aug 2013 12:03:36 -0400	[thread overview]
Message-ID: <20130807160336.GA1336@Krystal> (raw)
In-Reply-To: <1375887730.6848.7.camel@gandalf.local.home>

* Steven Rostedt (rostedt@goodmis.org) wrote:
> On Wed, 2013-08-07 at 07:06 +0200, Ondřej Bílka wrote:
> 
> > Add short_counter,long_counter and before increment counter before each
> > jump. That way we will know how many short/long jumps were taken. 
> 
> That's not trivial at all. The jump is a single location (in an asm
> goto() statement) that happens to be inlined through out the kernel. The
> assembler decides if it will be a short or long jump. How do you add a
> counter to count the difference?

You might want to try creating a global array of counters (accessible
both from C for printout and assembly for update).

Index the array from assembly using:   (2f - 1f)

1:
        jmp ...;
2:

And put an atomic increment of the counter. This increment instruction
should be located prior to the jmp for obvious reasons.

You'll end up with the sums you're looking for at indexes 2 and 5 of the
array.

Thanks,

Mathieu

> 
> The output I gave is from the boot up code that converts the jmp back to
> a nop (or in this case, the default nop to the ideal nop). It knows the
> size by reading the op code. This is a static analysis, not a running
> one. It's no trivial task to have a counter for each jump.
> 
> There is a way though. If we enable all the jumps (all tracepoints, and
> other users of jumplabel), record the trace and then compare the trace
> to the output that shows which ones were short jumps, and all others are
> long jumps.
> 
> I'll post the patches soon and you can have fun doing the compare :-)
> 
> Actually, I'm working on the 4 patches of the series that is more about
> clean ups and safety checks than the jmp conversion. That is not
> controversial, and I'll be posting them for 3.12 soon.
> 
> After that, I'll post the updated patches that have the conversion as
> well as the counter, for RFC and for others to play with.
> 
> -- Steve
> 
> 

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com

  reply	other threads:[~2013-08-07 16:03 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-05 16:55 [RFC] gcc feature request: Moving blocks into sections Steven Rostedt
2013-08-05 17:02 ` H. Peter Anvin
2013-08-05 17:24   ` Steven Rostedt
2013-08-05 17:12 ` Linus Torvalds
2013-08-05 17:15   ` Linus Torvalds
2013-08-05 17:55   ` Steven Rostedt
2013-08-05 18:11     ` Steven Rostedt
2013-08-05 18:17     ` H. Peter Anvin
2013-08-05 18:23       ` Steven Rostedt
2013-08-05 18:29         ` H. Peter Anvin
2013-08-05 18:49           ` Steven Rostedt
2013-08-05 18:51             ` H. Peter Anvin
2013-08-05 19:01               ` Linus Torvalds
2013-08-05 19:54                 ` Mathieu Desnoyers
2013-08-05 19:57                   ` Linus Torvalds
2013-08-05 20:02                     ` Steven Rostedt
2013-08-05 21:28                     ` Mathieu Desnoyers
2013-08-05 21:43                       ` H. Peter Anvin
2013-08-06  4:14                         ` Mathieu Desnoyers
2013-08-06  4:28                           ` H. Peter Anvin
2013-08-06 16:15                         ` Steven Rostedt
2013-08-06 16:19                           ` H. Peter Anvin
2013-08-06 16:26                             ` Steven Rostedt
2013-08-06 16:29                               ` H. Peter Anvin
2013-08-05 21:44                       ` Steven Rostedt
2013-08-05 22:08                         ` Mathieu Desnoyers
2013-08-05 19:09               ` Steven Rostedt
2013-08-05 18:20     ` Linus Torvalds
2013-08-05 18:24       ` Linus Torvalds
2013-08-05 18:34         ` Linus Torvalds
2013-08-05 18:38           ` H. Peter Anvin
2013-08-05 19:04           ` Steven Rostedt
2013-08-05 19:40           ` Marek Polacek
2013-08-05 19:56             ` Linus Torvalds
2013-08-05 19:57             ` Jason Baron
2013-08-05 20:35               ` Richard Henderson
2013-08-06  2:26                 ` Jason Baron
2013-08-06  3:03                   ` Steven Rostedt
2013-08-05 18:33       ` H. Peter Anvin
2013-08-05 18:39       ` Steven Rostedt
2013-08-05 18:49         ` Linus Torvalds
2013-08-05 19:39           ` Steven Rostedt
2013-08-06 14:19           ` Steven Rostedt
2013-08-06 17:48             ` Linus Torvalds
2013-08-06 17:58               ` Steven Rostedt
2013-08-06 20:33                 ` Mathieu Desnoyers
2013-08-06 20:43                   ` Steven Rostedt
2013-08-07  0:45                     ` Steven Rostedt
2013-08-07  0:56                       ` Steven Rostedt
2013-08-07  5:06                         ` Ondřej Bílka
2013-08-07 15:02                           ` Steven Rostedt
2013-08-07 16:03                             ` Mathieu Desnoyers [this message]
2013-08-07 16:11                               ` Steven Rostedt
2013-08-07 23:22                                 ` Mathieu Desnoyers
2013-08-05 20:06         ` Jason Baron
2013-08-05 19:04 ` Andi Kleen
2013-08-05 19:16   ` Steven Rostedt
2013-08-05 19:30     ` Xinliang David Li
2013-08-05 19:25   ` Linus Torvalds
2013-08-12  9:17 ` Peter Zijlstra
2013-08-12 14:56   ` H. Peter Anvin
2013-08-12 16:02     ` Andi Kleen
2013-08-12 16:11       ` Peter Zijlstra
2013-08-12 16:09     ` Peter Zijlstra
2013-08-12 17:47       ` H. Peter Anvin
2013-08-13  7:50         ` Peter Zijlstra
2013-08-13 14:46           ` H. Peter Anvin
2013-08-13 14:52             ` Steven Rostedt

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=20130807160336.GA1336@Krystal \
    --to=mathieu.desnoyers@efficios.com \
    --cc=behanw@converseincode.com \
    --cc=ddaney.cavm@gmail.com \
    --cc=gcc@gcc.gnu.org \
    --cc=herbert@gondor.hengli.com.au \
    --cc=hpa@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=neleai@seznam.cz \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --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.