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

Re: [Xen-devel] [PATCH 3/3] xenpm: use new Cx statistics interface



On 03/05/2014 05:37 AM, Jan Beulich wrote:
@@ -331,7 +346,7 @@ void pxstat_func(int argc, char *argv[])
  }
static uint64_t usec_start, usec_end;
-static struct xc_cx_stat *cxstat, *cxstat_start, *cxstat_end;
+static struct xc_cx_stat_v2 *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;
@@ -482,25 +497,26 @@ static void signal_int_handler(int signo
              /* print out CC? and PC? */
              for ( i = 0; i < socket_nr; i++ )
              {
+                unsigned int n;
                  uint64_t res;
+
                  for ( j = 0; j <= info.max_cpu_index; j++ )
                  {
                      if ( cpu_to_socket[j] == socket_ids[i] )
                          break;
                  }
                  printf("\nSocket %d\n", socket_ids[i]);
-                res = cxstat_end[j].pc2 - cxstat_start[j].pc2;
-                printf("\tPC2\t%"PRIu64" ms\t%.2f%%\n",  res / 1000000UL,
-                       100UL * res / (double)sum_cx[j]);
-                res = cxstat_end[j].pc3 - cxstat_start[j].pc3;
-                printf("\tPC3\t%"PRIu64" ms\t%.2f%%\n",  res / 1000000UL,
-                       100UL * res / (double)sum_cx[j]);
-                res = cxstat_end[j].pc6 - cxstat_start[j].pc6;
-                printf("\tPC6\t%"PRIu64" ms\t%.2f%%\n",  res / 1000000UL,
-                       100UL * res / (double)sum_cx[j]);
-                res = cxstat_end[j].pc7 - cxstat_start[j].pc7;
-                printf("\tPC7\t%"PRIu64" ms\t%.2f%%\n",  res / 1000000UL,
-                       100UL * res / (double)sum_cx[j]);
+                for ( n = 0; n < MAX_PKG_RESIDENCIES; ++n )
+                {
+                    if ( n >= cxstat_end[j].nr_pc )
+                        continue;
+                    res = cxstat_end[j].pc[n];
+                    if ( n < cxstat_start[j].nr_pc )
+                        res -= cxstat_start[j].pc[n];

Is it possible to have  cxstat_end[j].nr_pc != cxstat_start[j].nr_pc ?

-boris

+                    printf("\tPC%u\t%"PRIu64" ms\t%.2f%%\n",
+                           n + 1, res / 1000000UL,
+                           100UL * res / (double)sum_cx[j]);
+                }
                  for ( k = 0; k < core_nr; k++ )
                  {
                      for ( j = 0; j <= info.max_cpu_index; j++ )
@@ -510,15 +526,17 @@ static void signal_int_handler(int signo
                              break;
                      }
                      printf("\t Core %d CPU %d\n", core_ids[k], j);
-                    res = cxstat_end[j].cc3 - cxstat_start[j].cc3;
-                    printf("\t\tCC3\t%"PRIu64" ms\t%.2f%%\n",  res / 1000000UL,
-                           100UL * res / (double)sum_cx[j]);
-                    res = cxstat_end[j].cc6 - cxstat_start[j].cc6;
-                    printf("\t\tCC6\t%"PRIu64" ms\t%.2f%%\n",  res / 1000000UL,
-                           100UL * res / (double)sum_cx[j]);
-                    res = cxstat_end[j].cc7 - cxstat_start[j].cc7;
-                    printf("\t\tCC7\t%"PRIu64" ms\t%.2f%%\n",  res / 1000000UL,
-                           100UL * res / (double)sum_cx[j]);
+                    for ( n = 0; n < MAX_CORE_RESIDENCIES; ++n )
+                    {
+                        if ( n >= cxstat_end[j].nr_cc )
+                            continue;
+                        res = cxstat_end[j].cc[n];
+                        if ( n < cxstat_start[j].nr_cc )
+                            res -= cxstat_start[j].cc[n];
+                        printf("\t\tCC%u\t%"PRIu64" ms\t%.2f%%\n",
+                               n + 1, res / 1000000UL,
+                               100UL * res / (double)sum_cx[j]);
+                    }
                  }
              }
          }
@@ -529,6 +547,8 @@ static void signal_int_handler(int signo
      {
          free(cxstat[i].triggers);
          free(cxstat[i].residencies);
+        free(cxstat[i].pc);
+        free(cxstat[i].cc);
          free(pxstat[i].trans_pt);
          free(pxstat[i].pt);
      }

_______________________________________________
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®.