[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] Add cpufreq actual average freq information to xenpm tools



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1237538957 0
# Node ID 2a373e32b04d05b64048d26c8faf152026ec93b5
# Parent  0fc0de02856acae11dcea4b38a2fde9ece03a02a
Add cpufreq actual average freq information to xenpm tools

Signed-off-by: Liu, Jinsong <jinsong.liu@xxxxxxxxx>
---
 tools/misc/xenpm.c |   32 ++++++++++++++++++++++++++++++++
 1 files changed, 32 insertions(+)

diff -r 0fc0de02856a -r 2a373e32b04d tools/misc/xenpm.c
--- a/tools/misc/xenpm.c        Fri Mar 20 08:48:57 2009 +0000
+++ b/tools/misc/xenpm.c        Fri Mar 20 08:49:17 2009 +0000
@@ -222,6 +222,20 @@ static int get_pxstat_by_cpuid(int xc_fd
     return 0;
 }
 
+/* show cpu actual average freq information on CPU cpuid */
+static int get_avgfreq_by_cpuid(int xc_fd, int cpuid, int *avgfreq)
+{
+    int ret = 0;
+
+    ret = xc_get_cpufreq_avgfreq(xc_fd, cpuid, avgfreq);
+    if ( ret )
+    {
+        return errno;
+    }
+
+    return 0;
+}
+
 static int show_pxstat_by_cpuid(int xc_fd, int cpuid)
 {
     int ret = 0;
@@ -263,6 +277,7 @@ static uint64_t usec_start, usec_end;
 static uint64_t usec_start, usec_end;
 static struct xc_cx_stat *cxstat, *cxstat_start, *cxstat_end;
 static struct xc_px_stat *pxstat, *pxstat_start, *pxstat_end;
+static int *avgfreq;
 static uint64_t *sum, *sum_cx, *sum_px;
 
 static void signal_int_handler(int signo)
@@ -297,6 +312,9 @@ static void signal_int_handler(int signo
                     sum_px[i] += pxstat_end[i].pt[j].residency -
                                  pxstat_start[i].pt[j].residency;
     }
+
+    for ( i = 0; i < max_cpu_nr; i++ )
+        get_avgfreq_by_cpuid(xc_fd, i, &avgfreq[i]);
 
     printf("Elapsed time (ms): %"PRIu64"\n", (usec_end - usec_start) / 1000UL);
     for ( i = 0; i < max_cpu_nr; i++ )
@@ -329,6 +347,7 @@ static void signal_int_handler(int signo
                         res / 1000000UL, 100UL * res / (double)sum_px[i]);
             }
         }
+        printf("  Avg freq\t%d\tKHz\n", avgfreq[i]);
     }
 
     /* some clean up and then exits */
@@ -342,6 +361,7 @@ static void signal_int_handler(int signo
     free(cxstat);
     free(pxstat);
     free(sum);
+    free(avgfreq);
     xc_interface_close(xc_fd);
     exit(0);
 }
@@ -384,9 +404,18 @@ void start_gather_func(int argc, char *a
         free(cxstat);
         return ;
     }
+    avgfreq = malloc(sizeof(int) * max_cpu_nr);
+    if ( avgfreq == NULL )
+    {
+        free(sum);
+        free(cxstat);
+        free(pxstat);
+        return ;
+    }
     memset(sum, 0, sizeof(uint64_t) * 2 * max_cpu_nr);
     memset(cxstat, 0, sizeof(struct xc_cx_stat) * 2 * max_cpu_nr);
     memset(pxstat, 0, sizeof(struct xc_px_stat) * 2 * max_cpu_nr);
+    memset(avgfreq, 0, sizeof(int) * max_cpu_nr);
     sum_cx = sum;
     sum_px = sum + max_cpu_nr;
     cxstat_start = cxstat;
@@ -405,6 +434,7 @@ void start_gather_func(int argc, char *a
     {
         get_cxstat_by_cpuid(xc_fd, i, &cxstat_start[i]);
         get_pxstat_by_cpuid(xc_fd, i, &pxstat_start[i]);
+        get_avgfreq_by_cpuid(xc_fd, i, &avgfreq[i]);
     }
 
     if (signal(SIGINT, signal_int_handler) == SIG_ERR)
@@ -413,6 +443,7 @@ void start_gather_func(int argc, char *a
         free(sum);
         free(pxstat);
         free(cxstat);
+        free(avgfreq);
         return ;
     }
 
@@ -424,6 +455,7 @@ void start_gather_func(int argc, char *a
             free(sum);
             free(pxstat);
             free(cxstat);
+            free(avgfreq);
             return ;
         }
         alarm(timeout);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.