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

[Xen-devel] [PATCH] xenpm: Fix reporting of C0 residence times



# HG changeset patch
# User Boris Ostrovsky <boris.ostrovsky@xxxxxxx>
# Date 1338309680 -7200
# Node ID 3d52d9fe62559ed6f90cb33a4b95f536ab5bc683
# Parent  53e0571f94e4bcc45270dcbd444c7c91166cef6d
xenpm: Fix reporting of C0 residence times

Idle state residence times as provided by pmstat_get_cx_stat() are not
reported precisely since remote core may be in idle state and therefore
has not updated its statistics at the time local core collected them.
This causes C0 residencies as calculated by xenpm to sometimes become
negative.

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxx>

diff -r 53e0571f94e4 -r 3d52d9fe6255 tools/misc/xenpm.c
--- a/tools/misc/xenpm.c        Fri May 25 08:21:25 2012 +0100
+++ b/tools/misc/xenpm.c        Tue May 29 18:41:20 2012 +0200
@@ -351,8 +351,12 @@ static void signal_int_handler(int signo
         for ( i = 0; i < max_cpu_nr; i++ )
             if ( !get_cxstat_by_cpuid(xc_handle, i, &cxstat_end[i]) )
                 for ( j = 0; j < cxstat_end[i].nr; j++ )
-                    sum_cx[i] += cxstat_end[i].residencies[j] -
-                                 cxstat_start[i].residencies[j];
+                {
+                    int64_t diff = (int64_t)cxstat_end[i].residencies[j] -
+                        (int64_t)cxstat_start[i].residencies[j];
+                    if ( diff >=0 )
+                        sum_cx[i] += diff;
+                }
     }
 
     if ( get_pxstat_by_cpuid(xc_handle, 0, NULL) != -ENODEV )
@@ -379,8 +383,10 @@ static void signal_int_handler(int signo
         {
             for ( j = 0; j < cxstat_end[i].nr; j++ )
             {
-                res = cxstat_end[i].residencies[j] -
-                    cxstat_start[i].residencies[j];
+                int64_t diff = (int64_t)cxstat_end[i].residencies[j] -
+                    (int64_t)cxstat_start[i].residencies[j];
+
+                res = ( diff >= 0 ) ? diff : 0;
                 triggers = cxstat_end[i].triggers[j] -
                     cxstat_start[i].triggers[j];
                 avg_res = (triggers==0) ? 0: (double)res/triggers/1000000.0;


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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