From aa037dc9d3e09850f8a0e4ba9fba8e487f8a64cc Mon Sep 17 00:00:00 2001 From: Malcolm Crossley Date: Tue, 19 Jan 2016 11:27:56 +0000 Subject: [PATCH] xenpm: Add option to report average CPU frequency The average is calculated over the period of time from the last xenpm report of the average CPU frequency. Reporting the average CPU frequency helps confirm the level of turbo boost being achieved per CPU. Signed-off-by: Malcolm Crossley Acked-by: Ian Campbell --- tools/misc/xenpm.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tools/misc/xenpm.c b/tools/misc/xenpm.c index 08f2242650..a2edee5e01 100644 --- a/tools/misc/xenpm.c +++ b/tools/misc/xenpm.c @@ -45,6 +45,8 @@ void show_help(void) "xenpm command list:\n\n" " get-cpuidle-states [cpuid] list cpu idle info of CPU or all\n" " get-cpufreq-states [cpuid] list cpu freq info of CPU or all\n" + " get-cpufreq-average [cpuid] average cpu frequency since last invocation\n" + " for CPU or all\n" " get-cpufreq-para [cpuid] list cpu freq parameter of CPU or all\n" " set-scaling-maxfreq [cpuid] set max cpu frequency on CPU \n" " or all CPUs\n" @@ -343,6 +345,40 @@ void pxstat_func(int argc, char *argv[]) show_pxstat_by_cpuid(xc_handle, cpuid); } +static int show_cpufreq_by_cpuid(xc_interface *xc_handle, int cpuid) +{ + int ret = 0; + int average_cpufreq; + + ret = get_avgfreq_by_cpuid(xc_handle, cpuid, &average_cpufreq); + if ( ret ) + return ret; + + printf("cpu id : %d\n", cpuid); + printf("average cpu frequency: %d\n", average_cpufreq); + printf("\n"); + return 0; +} + +void cpufreq_func(int argc, char *argv[]) +{ + int cpuid = -1; + + if ( argc > 0 ) + parse_cpuid(argv[0], &cpuid); + + if ( cpuid < 0 ) + { + /* show average frequency on all cpus */ + int i; + for ( i = 0; i < max_cpu_nr; i++ ) + if ( show_cpufreq_by_cpuid(xc_handle, i) == -ENODEV ) + break; + } + else + show_cpufreq_by_cpuid(xc_handle, cpuid); +} + 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; @@ -1129,6 +1165,7 @@ struct { { "help", help_func }, { "get-cpuidle-states", cxstat_func }, { "get-cpufreq-states", pxstat_func }, + { "get-cpufreq-average", cpufreq_func }, { "start", start_gather_func }, { "get-cpufreq-para", cpufreq_para_func }, { "set-scaling-maxfreq", scaling_max_freq_func }, -- 2.39.5