Showing posts with label programming. Show all posts
Showing posts with label programming. Show all posts

Thursday, February 4, 2016

Making oprofile work again with recent kernels

I've been using oprofile for profiling programs for a while now (and especially QSoas, because it doesn't require specific compilation options, and doesn't make your program run much more slowly (like valgrind does, which can also be used to some extent for profiling). It's a pity the Debian package was dropped long ago, but the ubuntu packages work out of the box on Debian. But, today, while trying to see what takes so long in some fits I'm running, here's what I get:
~ operf QSoas
Unexpected error running operf: Permission denied

Looking further using strace, I could see that what was not working was the first call to perf_event_open.
It took me quite a long time to understand why it stopped working and how to get it working again, so here's for those of you who googled the error and couldn't find any answer (including me, who will probably have forgotten the anwser in a couple of months). The reason behing the change is that, for security reason, non-privileged users do not have the necessary privileges since Debian kernel 4.1.3-1; here's the relevant bit from the changelog:

  * security: Apply and enable GRKERNSEC_PERF_HARDEN feature from Grsecurity,
    disabling use of perf_event_open() by unprivileged users by default
    (sysctl: kernel.perf_event_paranoid)

The solution is simple, just run as root:
~ sysctl kernel.perf_event_paranoid=1

(the default value seems to be 3, for now). Hope it helps !

Saturday, November 22, 2008

Doxygen and Ruby...

I've been using Doxygen for a while now, and, no surprises, I find it fantastic ! The only thing that is really missing there is a decent support for Ruby... Allright, Ruby already has a documentation system, rdoc, but using only one for everything has its charms, and Doxygen is doubtlessly much more evolved than rdoc. Maybe when I have time, I'll have a look at writing it. (but that won't be before a long time...).

Update: I finally had some time to write and publish this patch. It is available on github