Re: [tip:perfcounters/core] perf_counter: x86: Fix call-chainsupport to use NMI-safe methods

From: Ingo Molnar
Date: Mon Jun 15 2009 - 17:02:03 EST



* H. Peter Anvin <hpa@xxxxxxxxx> wrote:

> Mathieu Desnoyers wrote:
> >>>
> >> Writing control registers is serializing, so it's a lot more expensive
> >> than writing a normal register; my *guess* is that it will be on the
> >> order of 100-200 cycles.
> >>
> >> That is not based on any actual information.
> >>
> >
> > Then how about just writing to the cr2 register *if* it has changed
> > while the NMI handler was running ?
> >
> > if (unlikely(read_cr2() != saved_cr2)))
> > write_cr2(saved_cr2)
> >
> > Mathieu
> >
>
> That works fine, obviously, and although it's probably overkill
> it's also a trivially cheap optimization.

Writing cr2 costs 84 cycles so it's not overkill at all - it's a
nice optimization!

Btw., we dont have to re-read it - we actually _know_ when we got a
fault (the fault handler gives us back an error code).

So we can do this common optimization and avoid the cr2 write
usually. We only need the cr2 read.

Hm, tempting ...

Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/