Hi,

I wanted to adjust sampling period using PERF_EVENT_IOC_PERIOD ioctl.
I modified the notify_group to change the period at runtime as follows.

diff --git a/perf_examples/notify_group.c b/perf_examples/notify_group.c
index 76869b0..d8ff5e1 100644
--- a/perf_examples/notify_group.c
+++ b/perf_examples/notify_group.c
@@ -54,6 +54,7 @@ sigio_handler(int n, struct siginfo *info, struct
sigcontext *sc)
       struct perf_event_mmap_page *hdr;
       struct perf_event_header ehdr;
       uint64_t ip;
+       uint64_t new_period;
       int id, ret;

       id = perf_fd2event(fds, num_fds, info->si_fd);
@@ -87,6 +88,11 @@ skip:
       /*
        * rearm the counter for one more shot
        */
+       new_period = SMPL_PERIOD * 2 ;
+       ret = ioctl(info->si_fd, PERF_EVENT_IOC_PERIOD, new_period);
+       if (ret == -1)
+               err(1, "cannot set");
+
       ret = ioctl(info->si_fd, PERF_EVENT_IOC_REFRESH, 1);
       if (ret == -1)
               err(1, "cannot refresh");

It, however, failed to do so as belows.

$ ./notify_group
i=0 disabled=0
i=1 disabled=1
i=2 disabled=1
Notification 1: 0x8048f63 fd=3 PERF_COUNT_HW_CPU_CYCLES
notify_group: cannot set: Invalid argument

Any idea?


BTW, I found an error in perf_event.h of libpfm4 which prevents compiling
the code.
The following diff is the fix.

diff --git a/include/perfmon/perf_event.h b/include/perfmon/perf_event.h
index cfddef0..7f2889e 100644
--- a/include/perfmon/perf_event.h
+++ b/include/perfmon/perf_event.h
@@ -13,7 +13,7 @@
 */
 #ifndef _LINUX_PERF_EVENT_H
 #define _LINUX_PERF_EVENT_H
-
+#include <linux/types.h>
 #include <sys/types.h>
 #include <inttypes.h>
 #ifndef PR_TASK_PERF_EVENTS_DISABLE
@@ -236,7 +236,7 @@ typedef struct perf_event_attr {
 #define PERF_EVENT_IOC_DISABLE         _IO ('$', 1)
 #define PERF_EVENT_IOC_REFRESH         _IO ('$', 2)
 #define PERF_EVENT_IOC_RESET           _IO ('$', 3)
-#define PERF_EVENT_IOC_PERIOD          _IOW('$', 4, u64)
+#define PERF_EVENT_IOC_PERIOD          _IOW('$', 4, __u64)
 #define PERF_EVENT_IOC_SET_OUTPUT      _IO ('$', 5)
 #define PERF_EVENT_IOC_SET_FILTER      _IOW('$', 6, char *)


- Heechul
------------------------------------------------------------------------------
Centralized Desktop Delivery: Dell and VMware Reference Architecture
Simplifying enterprise desktop deployment and management using
Dell EqualLogic storage and VMware View: A highly scalable, end-to-end
client virtualization framework. Read more!
http://p.sf.net/sfu/dell-eql-dev2dev
_______________________________________________
perfmon2-devel mailing list
perfmon2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel

Reply via email to