A Linux Kernel Module For Reading/Writing MSRs
mindfruit.co.uk
mindfruit.co.uk
It sounds like you have some familiarity with this. If you have thoughts, I'd love to hear on the Likwid developers list: https://groups.google.com/forum/#!forum/likwid-developers
I think that is be much less overhead for profiling if possible.
But if your goal is to reduce overhead, you can read the performance counters with 'rdpmc', which can be configured to be usable from Ring 3 (user level). This is a route that I'm currently pursuing. More details in some of the messages here: https://groups.google.com/forum/#!forum/likwid-developers
This link about mapping PCI configuration space to be accessible to non-root users might be useful too: http://www.cs.usfca.edu/~cruse/cs698f11/uhci.c