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

Ingo Molnar
2009-06-15T21:01:59Z

* H. Peter Anvin <hpa@zytor.com> 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