06 Dec, 2015

1 commit

  • For debugging low level code interacting with the CPU it is often
    useful to trace the MSR read/writes. This gives a concise summary of
    PMU and other operations.

    perf has an ad-hoc way to do this using trace_printk, but it's
    somewhat limited (and also now spews ugly boot messages when enabled)

    Instead define real trace points for all MSR accesses.

    This adds three new trace points: read_msr and write_msr and rdpmc.

    They also report if the access faulted (if *_safe is used)

    This allows filtering and triggering on specific MSR values, which
    allows various more advanced debugging techniques.

    All the values are well defined in the CPU documentation.

    The trace can be post processed with
    Documentation/trace/postprocess/decode_msr.py to add symbolic MSR
    names to the trace.

    I only added it to native MSR accesses in C, not paravirtualized or in
    entry*.S (which is not too interesting)

    Originally the patch kit moved the MSRs out of line. This uses an
    alternative approach recommended by Steven Rostedt of only moving the
    trace calls out of line, but open coding the access to the jump label.

    Signed-off-by: Andi Kleen
    Signed-off-by: Peter Zijlstra (Intel)
    Acked-by: Steven Rostedt
    Cc: Arnaldo Carvalho de Melo
    Cc: Jiri Olsa
    Cc: Linus Torvalds
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Stephane Eranian
    Cc: Thomas Gleixner
    Cc: Vince Weaver
    Link: http://lkml.kernel.org/r/1449018060-1742-3-git-send-email-andi@firstfloor.org
    Signed-off-by: Ingo Molnar

    Andi Kleen