Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752923AbbHaNKn (ORCPT ); Mon, 31 Aug 2015 09:10:43 -0400 Received: from mail-bn1on0066.outbound.protection.outlook.com ([157.56.110.66]:1056 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752792AbbHaNKl convert rfc822-to-8bit (ORCPT ); Mon, 31 Aug 2015 09:10:41 -0400 Authentication-Results: spf=none (sender IP is 165.204.84.222) smtp.mailfrom=amd.com; alien8.de; dkim=none (message not signed) header.d=none;alien8.de; dmarc=permerror action=none header.from=amd.com;alien8.de; dkim=none (message not signed) header.d=none;alien8.de; dmarc=permerror action=none header.from=amd.com; X-WSS-ID: 0NTY79M-08-HNH-02 X-M-MSG: Date: Mon, 31 Aug 2015 21:11:07 +0800 From: Huang Rui To: Guenter Roeck CC: Borislav Petkov , Jean Delvare , "Andy Lutomirski" , Andreas Herrmann , Thomas Gleixner , "Peter Zijlstra" , Ingo Molnar , "Rafael J. Wysocki" , Len Brown , John Stultz , =?iso-8859-1?Q?Fr=E9d=E9ric?= Weisbecker , , , , Andreas Herrmann , Aravind Gopalakrishnan , Borislav Petkov , "Fengguang Wu" , Aaron Lu , Tony Li Subject: Re: [PATCH 12/15] hwmon, fam15h_power: introduce a cpu accumulated power reporting algorithm Message-ID: <20150831131107.GB15543@hr-slim.amd.com> References: <1440662866-28716-1-git-send-email-ray.huang@amd.com> <1440662866-28716-13-git-send-email-ray.huang@amd.com> <20150827173043.GB27452@roeck-us.net> <20150828104525.GD4191@hr-slim.amd.com> <55E06A99.7070800@roeck-us.net> <20150831041607.GA15543@hr-slim.amd.com> <55E3D864.6090500@roeck-us.net> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline In-Reply-To: <55E3D864.6090500@roeck-us.net> User-Agent: Mutt/1.5.21 (2010-09-15) Content-Transfer-Encoding: 8BIT X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:165.204.84.222;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(3050300001)(199003)(164054003)(377454003)(24454002)(189002)(479174004)(64706001)(561924002)(87936001)(4001540100001)(62966003)(19580395003)(92566002)(4001350100001)(77156002)(19580405001)(47776003)(5001860100001)(101416001)(2950100001)(50466002)(189998001)(23676002)(5007970100001)(54356999)(110136002)(76176999)(83506001)(86362001)(5001830100001)(93886004)(50986999)(5003600100002)(68736005)(97736004)(33656002)(53416004)(105586002)(106466001)(77096005)(46102003);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR12MB0719;H:atltwp02.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0719;2:51eEGPjoEHRgyaS1/D3lWTOZ77itbc6GiKByWZKvx3mWM+N5ln4yYXJlh1+qaZ/T/UrDpVKKHrLEmvxzu2zf+pCnHOy07juoCALmculyzCwEMDJC6z3yR0mmM+6OsjCbzkP0bz+BRY3L+cKFoipmq2+VgJHzu+1U3vs8COxJZnc=;3:9CPv0AuBFL6Ua+QkOz3LfrATqSenIKwp7aK9fF4z2RH/R8QbFZWw4xRupOc97lEcX/9EqPfWqZbYBeWgqsJ/kcTviXGP8VGR7DUfpoPus6hcrMhI5tLM7iVjrHHFFskWab402SDpJbrPrWaD+F33Lq+SAnWRfCfmTEg0+0q1RF65bmnboEhZTfJDED5/SObOtJDLiYbJYM3EKV/abZwSsqDEfnuZpafVmOuDNzevRhXOfkr+ArvlaqtoQ7RmNb0q;25:Gt5dddZIEoZs5xENmFmJKHft5FGTxRRxwSFG43EytXYQhDC2anWs8C1exZHceq5t4Cgd4bUHUz8eitKcFrA4u5S7kcXK9hmi9+U5V/4aY4IQf4JgPHvVKiCUENMHsqYDI3utygPxVh7AoN5+MtSMXXXDwzEJic9qpjZehRmvk7wBcEi/KD2rXtEv4gA3oHhpd7WLeUXzc0LenR3DuApsYMm5d2kXu46xFQU9OY59Crzx1xoFg6uRIjBQYz9u78gy8aG7B6VynCu8I7AdU+NTvQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0719;UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0766; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0719;20:LGQxqwIhOJnaQas9VH4NDcI/2/xOoOn3ZzFa+6Hw3j0AgHVRaXddBstR7cZVlM38imeOzuMpbLHj3+J9Khx+4sdyKAMz34oa2+xWCCXf0px5QoKfQC5XkzLZpgr6NnSrtKJrC90VyjUGvneHcyULfeyCohmCQUc/uDbbH3bC10UpBob+nMS4WyPjJRl05dYj2L/bTBqC6e8VgGHnt0CMfE4qtCYKGVsxbi+S8dy1+PvF6p3OqmfbIbLnfW5FlHxQqkbBgYIY92+cyhkKUBjGuF4SShadSYEwjrFKJTP9JkfRppGserpOFWPzb2rxtDH8y12x9N8kGMt8FZ7J/9TWriUwJ2SDiVppj9gcM6FsGXChh7j9c5m6wpe/GyTU46q6zncT3X5Jj6xGjulaSrbn1HMKFslRQIF5amKVOKzfhQ85tkcbTnogs9AuYgIu5zuPkDThrW/Gc3jgcztOxhLMO2MnSqnZfQm5tGpZAgYFCh487bqh8MQ1CopNW8Lr3Omk;4:VhTl9G6WbiPk1d9ITKj/+tHH6mc5w71G2NAk3kjy9mbfaCJmKYexjIAIDpyVngn1T9QU0uMw41+O/p2/hXp6UNcFvknDsGgkh8cBtFVXOOvg30Ee7SXw1x8VySyQwMTa4Aomq7mf2XYqpWeSvIh/V+j83/ni0gLPoSbsUFJ2+JApX7HfagmAYWmUSOMjWcJ1Dxr0jHckxGJ1kGjk1OQ0ZMUA5PIiurlY4TvSkyDlBuu4sCnPPJQnbqoGBpIAClatt3e1nE9UoTHDdybkfU8UYWf0bJme853bGV1y5yIQJ4XkqtcWX48Y+wRR5QFtCgaP6+Gki25FFcDGXSqRTj3vUA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(8121501046)(5005006)(3002001);SRVR:SN1PR12MB0719;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0719; X-Forefront-PRVS: 0685122203 X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtTTjFQUjEyTUIwNzE5OzIzOnIvWnVtaHltWEVnVmxBRUU0MFlYSVA3aUl3?= =?utf-8?B?M1FnbmE5TU5DZ05BV05IbTkyMjg4Y1pWdG9pejZ6T1lOSXpMUmNnRHFFT0hr?= =?utf-8?B?MGF6bVhTVkRTckdFdjJHSnBSNUliZkdZbmlrRVFTbGtSczVMaEp3dW02endO?= =?utf-8?B?WXdIcS9aNlJXZkZlcGJGcElLRjRhbjdKR1k5Z21ESzFENEtOMlNNM2NWaHpH?= =?utf-8?B?SHJ2b0lSTGlxbndUemQ3dnI5VDBOTXJXNmlXd1dHQTdoNzMwcDgyc2ZKc0ll?= =?utf-8?B?dDdrY2xRYkpSOEZiZHk2eDZZOVFLQ0UrRERibXBTa0ZGUEkrVmZ1ZDcyQTVB?= =?utf-8?B?dUFabnVmMlhIcFlHOWdPUyt5TS9CNGpkNUswZ0dLVUVMbXFKYmdYNVVRdDFK?= =?utf-8?B?NFB2WWFkaEM0U2tGeUdkMTRBUW82WENKTFRtNXRRd0NJa1drazM4eGN0Z0g5?= =?utf-8?B?SnNyVEVWNjFGM2VzUjJua1RYSXRWc2pUaTVjNERYa3ZCZy9LS2lpSGlHeUpx?= =?utf-8?B?U1BxQTRJdmZMMGpVem5zVmV3emlWSFV2a09XNTQrTWsxSURaSXFPeVF1TWJx?= =?utf-8?B?enUvYXU1ZVJZdWNnemNobXNlMUFLTjBNVTFGbW1UTVMza1h0Ty9PTmVRK2xU?= =?utf-8?B?M2Q4TlBJaFpZNFZYM2hYelM0dnNLdkNDQkJDOXVKNHVaZ2NEQ0o0UDMrRlJ4?= =?utf-8?B?TytXRzBVSTd0ZzFFYnQzd1VZZEFsdXVKcDN2MndQTnh6NDRJRXo2SWh0Z05T?= =?utf-8?B?Y0NDMGgzTExaWEozQTZ6MXk3OHdqb2pVbE1FNUM3WFc2MDhxM0h1UGhNa0hF?= =?utf-8?B?cUNPclhUNytlaTAwbi9SS2tiRFJ5QnBoelJ5L3YwNFREbHpCaGwzSTlnWnh0?= =?utf-8?B?VnMxRmhiS3VTcDQvaVVtMVdjc0J1SUpON0V1S0w1ZEVaeXB4YUtkbXcvdXlF?= =?utf-8?B?aXZkU3EwOXZ5NlQvdlI1bllyQURTeWQyN0VMcE9KN2Yzejh3V1pOelBqR1dy?= =?utf-8?B?NnlqNmF5UVVHTHBCOXA5L1Q1U3BmQmZGam5GUUwwNDZlbURobC9MSWFhc0lW?= =?utf-8?B?a0tLU3hLZitoMjJSN2hkN0RPam1zRUxIbDFGR1Q4ZFJieWNJa01CbEhQaWJm?= =?utf-8?B?WjFtMFZkdExCL3FUc3dTTm1tL2x3akxEZUJiYmg0U3BzTWhZalFhRGxWd2ll?= =?utf-8?B?cmhFcG45TG51V1JrY1hsa1lraWtsbDQ3bmU5a1ZmWTFCVVBMNTRxcXhndm5n?= =?utf-8?B?ZVp2TEtDQjJ0anpyS1dOYW5JZ1pVRGE1a25Ycm5xSXUxeXJmWE5zUGJqMmcy?= =?utf-8?B?Mk9LZ1Fia0dLUjcrcjdXZnA4QW1yYkxINk4xZCswc20zOVJscWhna0l0STRT?= =?utf-8?B?MXd0N2FsbzEwc3hwZkdQSGg2MlVJanphS2lFQUVQWkd3bFVUWUdVbTVoMWZt?= =?utf-8?B?M0dIK1dpYTZqaFFlaU83MzgxTTRXeXJzdHg2WWoxdmZTTWkvbGJEMlFtZzZl?= =?utf-8?B?YjhtQlA1eVRoeFRvV09WRUxocVZJcWNNemxHRm1LU2lMVjRjN25oWHNkbWE0?= =?utf-8?B?VVYvZ0FscUo4YnBJSG8xTkprSm1Ld0w5S3QydGNUTXVwUjRvVENyTFN3enpw?= =?utf-8?B?VzFrckdweFdUZDBjL1VzWnRwVklGTzhBRDhKWjl5UEsrUDVoVldCajV3PT0=?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0719;5:GJo3FbDCj8olagFBAMUnrxDEIaZo1plXfWhSqm0h7INh8m1eQQw5cSxf2lCns9J2EyXn1Py6bDGiV/iQy35GO3WD1SVvwbM8Lod0cyG93oytNuIRDQ8rCnopg6nGAaA71SejivS+KWEhIiwl/Oh9Xw==;24:nQpJIEp5l9yus/IMzMOm3JzHk9j64nM/eoZGQJVzchbanrEzoUtAlFYPK+jZiCmA/I5/zNpO725uJMC6c7k0senTndLBANJraV4kt1eRoF0=;20:G8+Ma1IE6/O622YCiXPk6KIX1JxqijDcjKOFOOZNTzKd34BHh7kbL2bxsYPqM1d9hYc4irGhFSxffrKRepJ0uA== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2015 13:10:36.3437 (UTC) X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.222];Helo=[atltwp02.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0719 X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0766;2:UIGSjB18VksjXYxfXc6+ptvxAh8X4KlKPFDVYEXavRnBs4zVofsJDwLUp/HpbBa+wQogtiyfDYWGwgc+W8Sxbj66YnJrVxXa3LYt67DhiaEq2l0T3aRRmvr+tG88G/pYYF72P9a442cLS+DzXV/3st7tuWWrPEXn2rhhNTriI4o=;3:C8nBsceIZseFIYA3Av7Y0a6m5me2Dy7EinJqb7mwqT+qddJa59kibRDwvZiZzCeCYyJH+hwq/6lvdKUCWOQBWGXbPVotaBBumtmVya1/jVb3AezhCPObfmgt1diUfE6Zz2rP/xGeg0fGZM1gdCxH/2x+PyJoMsIn5NwH8aXoQzHp/ou2AztyL0tRW9TL3VogESS8+zUi6iR1pKfYylzmyFp+BAwoVWmKRcsRAqnHH9q2jhG8Yri4rRsa3o/7npvA;25:fFymer+dD/E+SGOIyEePVyguI9jZHMRMeJprM0hQEsiqpSCNRFE2A55UdZgpGcclj5sXHvKTce9CyOek8tqqGyRNV8Cw9uO88pQYVZSrDd51VPBngs60b0RUxZrlFhCX+RwmM+49vGGDGFyDtGe3JUSsgC6cF5XgGyGbhDu3szLfEGYN4sTPS3S7II3/8BYlsLJm1jo+CVvN02PAZ1Ghn45RqjzivzmmuQv1R+63V4Tfibd1ZLysL3ELbCmUJaQarJlxNI7kVXgYJN9PeVuJTQ==;23:zDh/kbOMZ7l+DMyBT0p1ZG1RcuPNjmotjcpTibyXZ3ltPvnbTg2trWV3rFPLxwuVKpnQ1eW46lkoZrOOs9DR+xyp4LknkHvIbRTOGYcrK99WJkKQvGa0bMbKxqv1lkV9D7VLtDMqSXqI9kQ37BLutgVHgHNIWHExgAhSyd8ZvCtEJiLKpv0ojVC/bUMmfAvW X-OriginatorOrg: amd.com Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5575 Lines: 135 On Sun, Aug 30, 2015 at 09:30:28PM -0700, Guenter Roeck wrote: > On 08/30/2015 09:16 PM, Huang Rui wrote: > >On Fri, Aug 28, 2015 at 07:05:13AM -0700, Guenter Roeck wrote: > >>On 08/28/2015 03:45 AM, Huang Rui wrote: > >>>On Thu, Aug 27, 2015 at 10:30:43AM -0700, Guenter Roeck wrote: > >>>>On Thu, Aug 27, 2015 at 04:07:43PM +0800, Huang Rui wrote: > >>>>>This patch introduces an algorithm that computes the average power by > >>>>>reading a delta value of “core power accumulator” register during > >>>>>measurement interval, and then dividing delta value by the length of > >>>>>the time interval. > >>>>> > >>>>>User is able to use power1_acc entry to measure the processor power > >>>>>consumption and power1_acc just needs to be read twice with an needed > >>>>>interval in-between. > >>>>> > >>>>>A simple example: > >>>>> > >>>>>$ cat /sys/bus/pci/devices/0000\:00\:18.4/hwmon/hwmon0/power1_acc > >>>>>$ sleep 10000s > >>>>>$ cat /sys/bus/pci/devices/0000\:00\:18.4/hwmon/hwmon0/power1_acc > >>>>> > >>>>>The result is current average processor power consumption in 10000 > >>>>>seconds. The unit of the result is uWatt. > >>>>> > >>>>>Signed-off-by: Huang Rui > >>>>>--- > >>>>> drivers/hwmon/fam15h_power.c | 62 ++++++++++++++++++++++++++++++++++++++++++++ > >>>>> 1 file changed, 62 insertions(+) > >>>>> > >>>>>diff --git a/drivers/hwmon/fam15h_power.c b/drivers/hwmon/fam15h_power.c > >>>>>index d529e4b..3bab797 100644 > >>>>>--- a/drivers/hwmon/fam15h_power.c > >>>>>+++ b/drivers/hwmon/fam15h_power.c > >>>>>@@ -60,6 +60,7 @@ struct fam15h_power_data { > >>>>> u64 cu_acc_power[MAX_CUS]; > >>>>> /* performance timestamp counter */ > >>>>> u64 cpu_sw_pwr_ptsc[MAX_CUS]; > >>>>>+ struct mutex acc_pwr_mutex; > >>>>> }; > >>>>> > >>>>> static ssize_t show_power(struct device *dev, > >>>>>@@ -121,17 +122,74 @@ static DEVICE_ATTR(power1_crit, S_IRUGO, show_power_crit, NULL); > >>>>> static struct attribute_group fam15h_power_group; > >>>>> __ATTRIBUTE_GROUPS(fam15h_power); > >>>>> > >>>>>+static ssize_t show_power_acc(struct device *dev, > >>>>>+ struct device_attribute *attr, char *buf) > >>>>>+{ > >>>>>+ int cpu, cu, cu_num, cores_per_cu; > >>>>>+ u64 curr_cu_acc_power[MAX_CUS], > >>>>>+ curr_ptsc[MAX_CUS], jdelta[MAX_CUS]; > >>>>>+ u64 tdelta, avg_acc; > >>>>>+ struct fam15h_power_data *data = dev_get_drvdata(dev); > >>>>>+ > >>>>>+ cores_per_cu = amd_get_cores_per_cu(); > >>>>>+ cu_num = boot_cpu_data.x86_max_cores / cores_per_cu; > >>>>>+ > >>>>>+ for (cpu = 0, avg_acc = 0; cpu < cu_num * cores_per_cu; cpu += cores_per_cu) { > >>>>>+ cu = cpu / cores_per_cu; > >>>>>+ if (rdmsrl_safe_on_cpu(cpu, MSR_F15H_PTSC, &curr_ptsc[cu])) { > >>>>>+ pr_err("Failed to read PTSC counter MSR on core%d\n", > >>>>>+ cpu); > >>>>>+ return 0; > >>>>>+ } > >>>>>+ > >>>>>+ if (rdmsrl_safe_on_cpu(cpu, MSR_F15H_CU_PWR_ACCUMULATOR, > >>>>>+ &curr_cu_acc_power[cu])) { > >>>>>+ pr_err("Failed to read compute unit power accumulator MSR on core%d\n", > >>>>>+ cpu); > >>>>>+ return 0; > >>>>>+ } > >>>>>+ > >>>>>+ if (curr_cu_acc_power[cu] < data->cu_acc_power[cu]) { > >>>>>+ jdelta[cu] = data->max_cu_acc_power + curr_cu_acc_power[cu]; > >>>>>+ jdelta[cu] -= data->cu_acc_power[cu]; > >>>>>+ } else { > >>>>>+ jdelta[cu] = curr_cu_acc_power[cu] - data->cu_acc_power[cu]; > >>>>>+ } > >>>>>+ tdelta = curr_ptsc[cu] - data->cpu_sw_pwr_ptsc[cu]; > >>>>>+ jdelta[cu] *= data->cpu_pwr_sample_ratio * 1000; > >>>>>+ do_div(jdelta[cu], tdelta); > >>>>>+ > >>>>>+ mutex_lock(&data->acc_pwr_mutex); > >>>>>+ data->cu_acc_power[cu] = curr_cu_acc_power[cu]; > >>>>>+ data->cpu_sw_pwr_ptsc[cu] = curr_ptsc[cu]; > >>>>>+ mutex_unlock(&data->acc_pwr_mutex); > >>>>>+ > >>>>>+ /* the unit is microWatt */ > >>>>>+ avg_acc += jdelta[cu]; > >>>>>+ } > >>>>>+ > >>>>>+ return sprintf(buf, "%u\n", (unsigned int) avg_acc); > >>>>>+} > >>>>>+static DEVICE_ATTR(power1_acc, S_IRUGO, show_power_acc, NULL); > >>>> > >>>>I am not really a friend of introducing a non-standard attribute. > >>>>Does the energy attribute not work here ? > >>>> > >>> > >>>You're right. Non-standard attribute might not be good. Could you > >>>please give me some hints if I use "energy" instead? > >>> > >>1 Joule = 1 Watt-second. > >> > >>Something else, though - did you make sure that your code doesn't overflow ? > >>Even though you calculate the average in an u64, you display it as unsigned. > >> > > > >Thanks to your reminder. It should not be overflow. The maximum power > >consumption of processor (AMD CZ and future 15h) is about 15 Watts = > >15,000,000 uWatts = 0xE4E1C0 uWatts, the size is 24 < 32 < 64 bits. > > > >Actually, the unit of jdelta is not Joule. Because the tdelta is the > >loops (cycles) that PTSC counter (the freqency is about 100 MHz) > >counts not seconds. > > > >So avg_acc is the average power consumption not the accumulated energy. > > > > Would power1_average then be better suitable for the attribute ? > There is also power1_average_interval which could be used to make > the interval configurable. > power1_average and power1_average_interval looks better except we might use a conversion that make interval from milliseconds to PTSC cycles instead of "cat-ting" the sysfs file twice, right? Thanks, Rui -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/