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



* Ingo Molnar (mingo@xxxxxxx) wrote:

* 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).


Just for the sake of making NMI handlers less tricky, supporting page
faults caused by faulting kernel instructions (rather than only
supporting explicit faulting from get_user_pages_inatomic) would be
rather nice design-wise if it only costs 2-3 cycles.

And I would not want to touch the page fault handler itself to write the
saved cr2 value before the handler exits, because this would add a
branch on a very hot path.

Mathieu

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

Hm, tempting ...

Ingo

--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
--
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/



Relevant Pages

  • Re: [BUG] IO-APIC + timer doesnt work!
    ... Could you try if writing 'delta' a second time makes any difference on ... value register needs to reset as well. ... I've provided a patch to partially ...
    (Linux-Kernel)
  • Re: [BUG] IO-APIC + timer doesnt work!
    ... Could you try if writing 'delta' a second time makes any difference on ... value register needs to reset as well. ... Software Clears the main counter by writing a value of 00000000h to it. ...
    (Linux-Kernel)
  • Re: Threading Issues (If you can answer this, Ill kiss you.)
    ... a new thread that does nothing but register for the system event. ... > When you register for a SystemEvent a window is created to receive the OS ... > process exits a threadpool thread then calls your event handler. ... > specifically to handle the broadcast messages. ...
    (microsoft.public.dotnet.languages.vb)
  • linker magic: dynamic meta handlers...
    ... dealing with my compiler doing funky codegen magic at link time. ... register allocator/codegen, ...). ... If the handler builds a code fragment which exports the given symbol name, ... The request may also be passed arguments, ...
    (comp.compilers)
  • Re: [BUG] IO-APIC + timer doesnt work!
    ... Could you try if writing 'delta' a second time makes any difference on ... value register needs to reset as well. ... I've provided a patch to partially ...
    (Linux-Kernel)