public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andi Kleen <ak@suse.de>
To: eranian@hpl.hp.com
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH 10/17] 2.6.17.1 perfmon2 patch for review: PMU context switch
Date: 30 Jun 2006 14:59:05 +0200	[thread overview]
Message-ID: <p73bqsax0iu.fsf@verdi.suse.de> (raw)
In-Reply-To: <20060630123629.GA22381@frankl.hpl.hp.com>

Stephane Eranian <eranian@hpl.hp.com> writes:

> Andi,
> 
> Thanks for your feedback. I will make the changes you
> requested.
> 
> About the context switch code, what about I do the following
> in __switch_to():
> 
> __kprobes struct task_struct *
> __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
> {
>         struct thread_struct *prev = &prev_p->thread,
>                                  *next = &next_p->thread;
>         int cpu = smp_processor_id();
>         struct tss_struct *tss = &per_cpu(init_tss, cpu);
> 
>         if (unlikely(__get_cpu_var(pmu_ctx) || next_p->pfm_context))
>                 __pfm_ctxswout(prev_p, next_p);
> 
>         /*
>          * Reload esp0, LDT and the page table pointer:
>          */
>         tss->rsp0 = next->rsp0;
> 
> There is now a single hook and a conditional branch.
> this is similar to what you have with the debug registers.

It's still more than there was before. Also __get_cpu_var 
is quite a lot of instructions.

I would suggest you borrow some bits in one of the process
or thread info flags and then do a single test

if (unlikely(thr->flags & (DEBUG|PERFMON)) != 0) { 
        if (flags & DEBUG)
                ... do debug ...
        if (flags & PERFMON)
                ... do perfmon ...
}

[which you're at it you can probably add ioports in there too -
improving existing code is always a good thing]

Ideally flags is in some cache line that is already 
touched during context switch. If not you might need
to change the layout.

It's ok to put the do_perfmon stuff into a separate noinline
function because that will disturb the register allocation
in the caller less.

I would suggest doing this in separate preparing patches that
first just do it for existing facilities.

-Andi

P.S.: My comments probably apply to the i386 versions too
although I haven't read them.

  reply	other threads:[~2006-06-30 12:59 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-23  9:13 [PATCH 10/17] 2.6.17.1 perfmon2 patch for review: PMU context switch Stephane Eranian
2006-06-30 12:27 ` Andi Kleen
2006-06-30 12:36   ` Stephane Eranian
2006-06-30 12:59     ` Andi Kleen [this message]
2006-06-30 13:29       ` Stephane Eranian
2006-06-30 13:41         ` Andi Kleen
2006-06-30 14:12           ` Stephane Eranian
2006-06-30 14:33             ` Andi Kleen
2006-06-30 16:02               ` Stephane Eranian
2006-06-30 17:08                 ` Andi Kleen
2006-06-30 20:47                   ` Stephane Eranian
2006-07-03  9:49       ` Stephane Eranian
2006-07-03 19:25         ` Andi Kleen
2006-07-03 19:22           ` Stephane Eranian
2006-07-03 19:36             ` Andi Kleen
  -- strict thread matches above, loose matches on Subject: below --
2006-06-30 18:33 Chuck Ebbert
2006-06-30 18:42 ` Andi Kleen
2006-06-30 18:43 ` Stephane Eranian
2006-06-30 20:40 ` Stephane Eranian
2006-06-30 19:17 Chuck Ebbert
2006-06-30 19:37 ` Andi Kleen
2006-07-01 15:21 Chuck Ebbert
2006-07-04 15:28 ` Stephane Eranian
2006-07-06 17:30 Chuck Ebbert
2006-07-06 20:16 ` Stephane Eranian

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=p73bqsax0iu.fsf@verdi.suse.de \
    --to=ak@suse.de \
    --cc=eranian@hpl.hp.com \
    --cc=linux-kernel@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox