From patchwork Wed Aug 24 20:49:42 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tim Gardner X-Patchwork-Id: 662532 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id 3sKKGL384yz9sRZ; Thu, 25 Aug 2016 06:51:06 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical-com.20150623.gappssmtp.com header.i=@canonical-com.20150623.gappssmtp.com header.b=JQgFkSOg; dkim-atps=neutral Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.76) (envelope-from ) id 1bcf8Y-0004eh-V9; Wed, 24 Aug 2016 20:51:02 +0000 Received: from mail-it0-f44.google.com ([209.85.214.44]) by huckleberry.canonical.com with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1bcf7i-00046Z-97 for kernel-team@lists.ubuntu.com; Wed, 24 Aug 2016 20:50:10 +0000 Received: by mail-it0-f44.google.com with SMTP id n128so56565534ith.1 for ; Wed, 24 Aug 2016 13:50:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=RVpMkZu7zR5ZjOPfH/CdGLl1M8DPyz2J7VbVH3QKZSA=; b=JQgFkSOgren6hUC1R1ePOZIm4CyqvDMQTxTdp05TlwFFwIgmguff1XbKN+/+d8pzMR 7PwxVCY3/6nQEdD8RPHD7TdnpGLduv8Qni+Lr0S14CG/A99v5IOoOkKXUR24Sq1DwYBn EQXB2CuMSjyS/zIbnIIWK/1cMZtGkDwg99GW1GlOpfk68T2HDRQ2ue7g1q0untX+symO HkbxTGHRTavlDDaLXsfDu7NEaFWCgRijIGdNKlnMlWMPCiIicQ77wQqnHTpW4hoUT0Vh PmvgLSrWsRmd0uZZ0wDDLSbUtXzUGNK72wUHqHanH56UeERsW6mk5noSThXAOLjUHN7U S8tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=RVpMkZu7zR5ZjOPfH/CdGLl1M8DPyz2J7VbVH3QKZSA=; b=hyoBD8WrEU4R9UkisZ84/28xhJKHDsDnxvixbDO1h85tTTFtOOulrR4wiXpTcQpTo1 fi76T+6kVd5gFvUQA/DS8rl/nSCbjIc3MqTqHUJA/DwS20iElzfi2u/ByFcBBpZhXli8 kzBLY/jSPf9oBZv2Cx+iYDcvQ0KFZi/oOL5njufCC2cxS7mF0WWgikLb4SG+2XQVlXho 1rICsCfQqeyRUNiX6koNaYFHYZbSzXaXsJyOT6yvTGLaKPSqlCWGFqOyQ6kYPCfBP3y+ qqk9n259+EIEm5sfjwGYHKzm3sD0Pk8PIeuVferwqq1g50GphXFKnbmMnJm2zoI0Fk3e GpXA== X-Gm-Message-State: AEkoousp6aYBbToK4La6ZYZhUfyt9fQVD1Dj/x7DZl4SajB880j0PZZI6DDehF7L4vDLUSMx X-Received: by 10.36.239.197 with SMTP id i188mr932998ith.71.1472071808982; Wed, 24 Aug 2016 13:50:08 -0700 (PDT) Received: from gbyte.rtg.local (host-174-45-44-32.hln-mt.client.bresnan.net. [174.45.44.32]) by smtp.gmail.com with ESMTPSA id o5sm12310706ith.20.2016.08.24.13.50.08 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 24 Aug 2016 13:50:08 -0700 (PDT) From: Tim Gardner To: kernel-team@lists.ubuntu.com Subject: [PATCH 13/24] tools/power turbostat: show GFXMHz Date: Wed, 24 Aug 2016 14:49:42 -0600 Message-Id: <1472071793-9500-14-git-send-email-tim.gardner@canonical.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1472071793-9500-1-git-send-email-tim.gardner@canonical.com> References: <1472071793-9500-1-git-send-email-tim.gardner@canonical.com> X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.14 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: kernel-team-bounces@lists.ubuntu.com From: Len Brown BugLink: http://bugs.launchpad.net/bugs/1591802 Under the column "GFXMHz", show a snapshot of this attribute: /sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz This is an instantaneous snapshot of what sysfs presents at the end of the measurement interval. turbostat does not average or otherwise perform any math on this value. Signed-off-by: Len Brown (cherry picked from commit 27d47356b6dfa92042a17a0b474f08910d4c8e8f) Signed-off-by: Tim Gardner --- tools/power/x86/turbostat/turbostat.c | 50 ++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c index c679326..d599f91 100644 --- a/tools/power/x86/turbostat/turbostat.c +++ b/tools/power/x86/turbostat/turbostat.c @@ -90,6 +90,8 @@ char *output_buffer, *outp; unsigned int do_rapl; unsigned int do_dts; unsigned int do_ptm; +unsigned int do_gfx_mhz; +unsigned int gfx_cur_mhz; unsigned int tcc_activation_temp; unsigned int tcc_activation_temp_override; double rapl_power_units, rapl_time_units; @@ -183,6 +185,7 @@ struct pkg_data { unsigned long long pkg_any_core_c0; unsigned long long pkg_any_gfxe_c0; unsigned long long pkg_both_core_gfxe_c0; + unsigned int gfx_mhz; unsigned int package_id; unsigned int energy_pkg; /* MSR_PKG_ENERGY_STATUS */ unsigned int energy_dram; /* MSR_DRAM_ENERGY_STATUS */ @@ -311,7 +314,7 @@ int get_msr(int cpu, off_t offset, unsigned long long *msr) /* * Example Format w/ field column widths: * - * Package Core CPU Avg_MHz Bzy_MHz TSC_MHz IRQ SMI Busy% CPU_%c1 CPU_%c3 CPU_%c6 CPU_%c7 CoreTmp PkgTmp Pkg%pc2 Pkg%pc3 Pkg%pc6 Pkg%pc7 PkgWatt CorWatt GFXWatt + * Package Core CPU Avg_MHz Bzy_MHz TSC_MHz IRQ SMI Busy% CPU_%c1 CPU_%c3 CPU_%c6 CPU_%c7 CoreTmp PkgTmp GFXMHz Pkg%pc2 Pkg%pc3 Pkg%pc6 Pkg%pc7 PkgWatt CorWatt GFXWatt * 12345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678 */ @@ -362,6 +365,9 @@ void print_header(void) if (do_ptm) outp += sprintf(outp, " PkgTmp"); + if (do_gfx_mhz) + outp += sprintf(outp, " GFXMHz"); + if (do_skl_residency) { outp += sprintf(outp, " Totl%%C0"); outp += sprintf(outp, " Any%%C0"); @@ -608,6 +614,10 @@ int format_counters(struct thread_data *t, struct core_data *c, if (do_ptm) outp += sprintf(outp, "%8d", p->pkg_temp_c); + /* GFXMHz */ + if (do_gfx_mhz) + outp += sprintf(outp, "%8d", p->gfx_mhz); + /* Totl%C0, Any%C0 GFX%C0 CPUGFX% */ if (do_skl_residency) { outp += sprintf(outp, "%8.2f", 100.0 * p->pkg_wtd_core_c0/t->tsc); @@ -746,6 +756,8 @@ delta_package(struct pkg_data *new, struct pkg_data *old) old->pc10 = new->pc10 - old->pc10; old->pkg_temp_c = new->pkg_temp_c; + old->gfx_mhz = new->gfx_mhz; + DELTA_WRAP32(new->energy_pkg, old->energy_pkg); DELTA_WRAP32(new->energy_cores, old->energy_cores); DELTA_WRAP32(new->energy_gfx, old->energy_gfx); @@ -909,6 +921,8 @@ void clear_counters(struct thread_data *t, struct core_data *c, struct pkg_data p->rapl_pkg_perf_status = 0; p->rapl_dram_perf_status = 0; p->pkg_temp_c = 0; + + p->gfx_mhz = 0; } int sum_counters(struct thread_data *t, struct core_data *c, struct pkg_data *p) @@ -961,6 +975,8 @@ int sum_counters(struct thread_data *t, struct core_data *c, average.packages.energy_cores += p->energy_cores; average.packages.energy_gfx += p->energy_gfx; + average.packages.gfx_mhz = p->gfx_mhz; + average.packages.pkg_temp_c = MAX(average.packages.pkg_temp_c, p->pkg_temp_c); average.packages.rapl_pkg_perf_status += p->rapl_pkg_perf_status; @@ -1176,6 +1192,9 @@ int get_counters(struct thread_data *t, struct core_data *c, struct pkg_data *p) return -17; p->pkg_temp_c = tcc_activation_temp - ((msr >> 16) & 0x7F); } + if (do_gfx_mhz) + p->gfx_mhz = gfx_cur_mhz; + return 0; } @@ -1825,6 +1844,30 @@ int snapshot_proc_interrupts(void) } return 0; } +/* + * snapshot_gfx_mhz() + * + * record snapshot of + * /sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz + * + * return 1 if config change requires a restart, else return 0 + */ +int snapshot_gfx_mhz(void) +{ + static FILE *fp; + int retval; + + if (fp == NULL) + fp = fopen_or_die("/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz", "r"); + else + rewind(fp); + + retval = fscanf(fp, "%d", &gfx_cur_mhz); + if (retval != 1) + err(1, "GFX MHz"); + + return 0; +} /* * snapshot /proc and /sys files @@ -1836,6 +1879,9 @@ int snapshot_proc_sysfs_files(void) if (snapshot_proc_interrupts()) return 1; + if (do_gfx_mhz) + snapshot_gfx_mhz(); + return 0; } @@ -3111,6 +3157,8 @@ void process_cpuid() if (has_skl_msrs(family, model)) calculate_tsc_tweak(); + do_gfx_mhz = !access("/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz", R_OK); + return; }