[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20090524113315.GA16151@elte.hu>
Date: Sun, 24 May 2009 13:33:15 +0200
From: Ingo Molnar <mingo@...e.hu>
To: mingo@...hat.com, hpa@...or.com, paulus@...ba.org, acme@...hat.com,
linux-kernel@...r.kernel.org, a.p.zijlstra@...llo.nl,
mtosatti@...hat.com, tglx@...utronix.de,
cjashfor@...ux.vnet.ibm.com
Cc: linux-tip-commits@...r.kernel.org
Subject: Re: [tip:perfcounters/core] perf_counter: Optimize context switch
between identical inherited contexts
* tip-bot for Paul Mackerras <paulus@...ba.org> wrote:
> @@ -885,6 +934,16 @@ void perf_counter_task_sched_out(struct task_struct *task, int cpu)
>
> regs = task_pt_regs(task);
> perf_swcounter_event(PERF_COUNT_CONTEXT_SWITCHES, 1, 1, regs, 0);
> +
> + next_ctx = next->perf_counter_ctxp;
> + if (next_ctx && context_equiv(ctx, next_ctx)) {
> + task->perf_counter_ctxp = next_ctx;
> + next->perf_counter_ctxp = ctx;
> + ctx->task = next;
> + next_ctx->task = task;
> + return;
> + }
there's one complication that this trick is causing - the migration
counter relies on ctx->task to get per task migration stats:
static inline u64 get_cpu_migrations(struct perf_counter *counter)
{
struct task_struct *curr = counter->ctx->task;
if (curr)
return curr->se.nr_migrations;
return cpu_nr_migrations(smp_processor_id());
}
as ctx->task is now jumping (while we keep the context), the
migration stats are out of whack.
Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists