From patchwork Tue Jan 19 11:27:56 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Malcolm Crossley X-Patchwork-Id: 8060801 Return-Path: X-Original-To: patchwork-xen-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id D8D27BEEE5 for ; Tue, 19 Jan 2016 11:31:03 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 0C7FE203A9 for ; Tue, 19 Jan 2016 11:31:03 +0000 (UTC) Received: from lists.xen.org (lists.xenproject.org [50.57.142.19]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0866F20397 for ; Tue, 19 Jan 2016 11:31:02 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xen.org) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1aLUSA-0005sN-LU; Tue, 19 Jan 2016 11:28:02 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1aLUS9-0005sI-N0 for xen-devel@lists.xen.org; Tue, 19 Jan 2016 11:28:01 +0000 Received: from [85.158.137.68] by server-6.bemta-3.messagelabs.com id E5/07-08479-0CD1E965; Tue, 19 Jan 2016 11:28:00 +0000 X-Env-Sender: prvs=819a4078d=malcolm.crossley@citrix.com X-Msg-Ref: server-9.tower-31.messagelabs.com!1453202879!885950!1 X-Originating-IP: [66.165.176.63] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n, received_headers: No Received headers X-StarScan-Received: X-StarScan-Version: 7.35.1; banners=-,-,- X-VirusChecked: Checked Received: (qmail 53601 invoked from network); 19 Jan 2016 11:28:00 -0000 Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63) by server-9.tower-31.messagelabs.com with RC4-SHA encrypted SMTP; 19 Jan 2016 11:28:00 -0000 X-IronPort-AV: E=Sophos;i="5.22,317,1449532800"; d="scan'208";a="332370759" From: Malcolm Crossley To: , , , Date: Tue, 19 Jan 2016 11:27:56 +0000 Message-ID: <1453202876-27356-1-git-send-email-malcolm.crossley@citrix.com> X-Mailer: git-send-email 1.7.12.4 MIME-Version: 1.0 X-DLP: MIA2 Cc: Malcolm Crossley , xen-devel@lists.xen.org Subject: [Xen-devel] [PATCHv2] xenpm: Add option to report average CPU frequency X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 --- tools/misc/xenpm.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tools/misc/xenpm.c b/tools/misc/xenpm.c index 08f2242..a2edee5 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 },