I have recently applied the 2.6.29 perfmon2 patches to the Fedora 11 2.6.29
kernel (plus a few other patch sets). They seemed to go in pretty well and
the kernel rebuilt and booted without problems. I have also installed
copies of libpfm, papi and HPCToolkit on this system.
Papi seems to work fine and hpcrun-flat also produces good results. But
when I use hpcrun it executes but never collects any samples. Using the
hpcrun and papi debug information (plus some messages I added), I think I
have identified why no samples are collected. The traces show that the
hpcrun overflow event handler is being called each time that an overflow
occurs. It is passed an overflow_vector which has a value of 0x20000 and
then passes this overflow_vector to the PAPI function '
PAPI_get_overflow_event_index'. This PAPI function gives back a successful
return but an event count of zero so the handler never calls the code to
record the event. I also have a test system which has perfctr installed in
the kernel and hpcrun works correctly on this system. The debug data on
that system shows an overflow_vector of 0x1 which causes the above
mentioned PAPI function to return an event count of one.
The overflow_vector is obtained (at least in the perfmon PAPI substrate)
from a message returned by a read on the PMU fd.
So I decided the next place to look would be in the perfmon2 debug messages
which I have found before in the kernel message buffer. I ran 'pfdbg --on
--ovfl-on' and it set the file /sys/kernel/perfmon/debug to 3 to enable
debug prints. I ran my test again but no messages in the dmesg output. So
I went looking at the perfmon define macros and found that they require
'CONFIG_PERFMON_DEBUG' to be set. So I looked in my kernel config and
found this value set to 'y'. I then noticed that the perfmon macros use
'pr_debug' so I went and found that in the file 'include/linux/kernel.h'.
It is defined as follows:
#if defined(DEBUG)
#define pr_debug(fmt, ...) \
printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#elif defined(CONFIG_DYNAMIC_PRINTK_DEBUG)
#define pr_debug(fmt, ...) do { \
dynamic_pr_debug(pr_fmt(fmt), ##__VA_ARGS__); \
} while (0)
#else
#define pr_debug(fmt, ...) \
({ if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); 0; })
#endif
So I added a '#define DEBUG 1' to the front of file perfmon_kern.h in the
patch file and rebuilt my kernel again. This did not help, I still do not
get any perfmon2 kernel debug messages.
What have I missed ???
Thanks
Gary
------------------------------------------------------------------------------
_______________________________________________
perfmon2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel