aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorYang Zhang <yang.z.zhang@intel.com>2011-10-25 16:46:47 +0100
committerYang Zhang <yang.z.zhang@intel.com>2011-10-25 16:46:47 +0100
commit56d1d85a0c580aa20ca7d4b15f19ace899bb5b36 (patch)
tree998d74328d65747ce4bb4b1c69182b6edc2ffb9d /tools
parent82017fad0d77cee9d4568146a63d97789fd6907e (diff)
downloadxen-56d1d85a0c580aa20ca7d4b15f19ace899bb5b36.tar.gz
xen-56d1d85a0c580aa20ca7d4b15f19ace899bb5b36.tar.bz2
xen-56d1d85a0c580aa20ca7d4b15f19ace899bb5b36.zip
x86 pm: provide CC7/PC2 residency
Sandy bridge introduces new MSR to get cc7/pc2 residency (core C-state 7/package C-state 2). Print the cc7/pc2 residency when on sandy bridge platform. Signed-off-by: Yang Zhang <yang.z.zhang@intel.com> Committed-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'tools')
-rw-r--r--tools/libxc/xc_pm.c2
-rw-r--r--tools/libxc/xenctrl.h2
-rw-r--r--tools/misc/xenpm.c18
3 files changed, 18 insertions, 4 deletions
diff --git a/tools/libxc/xc_pm.c b/tools/libxc/xc_pm.c
index 590e15d623..fa9b246c9d 100644
--- a/tools/libxc/xc_pm.c
+++ b/tools/libxc/xc_pm.c
@@ -155,11 +155,13 @@ int xc_pm_get_cxstat(xc_interface *xch, int cpuid, struct xc_cx_stat *cxpt)
cxpt->nr = sysctl.u.get_pmstat.u.getcx.nr;
cxpt->last = sysctl.u.get_pmstat.u.getcx.last;
cxpt->idle_time = sysctl.u.get_pmstat.u.getcx.idle_time;
+ cxpt->pc2 = sysctl.u.get_pmstat.u.getcx.pc2;
cxpt->pc3 = sysctl.u.get_pmstat.u.getcx.pc3;
cxpt->pc6 = sysctl.u.get_pmstat.u.getcx.pc6;
cxpt->pc7 = sysctl.u.get_pmstat.u.getcx.pc7;
cxpt->cc3 = sysctl.u.get_pmstat.u.getcx.cc3;
cxpt->cc6 = sysctl.u.get_pmstat.u.getcx.cc6;
+ cxpt->cc7 = sysctl.u.get_pmstat.u.getcx.cc7;
unlock_2:
xc_hypercall_bounce_post(xch, residencies);
diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h
index 3ff943ff32..ad94f46b9d 100644
--- a/tools/libxc/xenctrl.h
+++ b/tools/libxc/xenctrl.h
@@ -1733,11 +1733,13 @@ struct xc_cx_stat {
uint64_t idle_time; /* idle time from boot */
uint64_t *triggers; /* Cx trigger counts */
uint64_t *residencies; /* Cx residencies */
+ uint64_t pc2;
uint64_t pc3;
uint64_t pc6;
uint64_t pc7;
uint64_t cc3;
uint64_t cc6;
+ uint64_t cc7;
};
typedef struct xc_cx_stat xc_cx_stat_t;
diff --git a/tools/misc/xenpm.c b/tools/misc/xenpm.c
index d8192fe3ae..82784c552a 100644
--- a/tools/misc/xenpm.c
+++ b/tools/misc/xenpm.c
@@ -92,13 +92,17 @@ static void print_cxstat(int cpuid, struct xc_cx_stat *cxstat)
printf(" residency [%020"PRIu64" ms]\n",
cxstat->residencies[i]/1000000UL);
}
- printf("pc3 : [%020"PRIu64" ms]\n"
+ printf("pc2 : [%020"PRIu64" ms]\n"
+ "pc3 : [%020"PRIu64" ms]\n"
"pc6 : [%020"PRIu64" ms]\n"
"pc7 : [%020"PRIu64" ms]\n",
- cxstat->pc3/1000000UL, cxstat->pc6/1000000UL, cxstat->pc7/1000000UL);
+ cxstat->pc2/1000000UL, cxstat->pc3/1000000UL,
+ cxstat->pc6/1000000UL, cxstat->pc7/1000000UL);
printf("cc3 : [%020"PRIu64" ms]\n"
- "cc6 : [%020"PRIu64" ms]\n",
- cxstat->cc3/1000000UL, cxstat->cc6/1000000UL);
+ "cc6 : [%020"PRIu64" ms]\n"
+ "cc7 : [%020"PRIu64" ms]\n",
+ cxstat->cc3/1000000UL, cxstat->cc6/1000000UL,
+ cxstat->cc7/1000000UL);
printf("\n");
}
@@ -458,6 +462,9 @@ static void signal_int_handler(int signo)
break;
}
printf("Socket %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]);
@@ -482,6 +489,9 @@ static void signal_int_handler(int signo)
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]);
printf("\n");
}