Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752207AbbH1KrP (ORCPT ); Fri, 28 Aug 2015 06:47:15 -0400 Received: from mail-bl2on0057.outbound.protection.outlook.com ([65.55.169.57]:36964 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751445AbbH1KrM convert rfc822-to-8bit (ORCPT ); Fri, 28 Aug 2015 06:47:12 -0400 Authentication-Results: spf=none (sender IP is 165.204.84.221) smtp.mailfrom=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: 0NTSGMC-07-4IX-02 X-M-MSG: Date: Fri, 28 Aug 2015 18:45:25 +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: <20150828104525.GD4191@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> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline In-Reply-To: <20150827173043.GB27452@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.221;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(3050300001)(24454002)(199003)(189002)(164054003)(2950100001)(54356999)(23676002)(4001540100001)(5001860100001)(76176999)(50986999)(106466001)(5007970100001)(105586002)(97736004)(5001830100001)(19580405001)(19580395003)(62966003)(46102003)(53416004)(77156002)(64706001)(83506001)(87936001)(101416001)(92566002)(68736005)(50466002)(33656002)(5001920100001)(110136002)(189998001)(47776003)(77096005)(4001350100001)(86362001)(5003600100002);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR12MB0711;H:atltwp01.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0711;2:9MBhVxYB4lCggPJYevAMvL2HxrHjVnbBCtsTVqXYlYPfxGin5se02DIxADlYMNKH85kLthjO6W30mxKV8wlyy/4NZGcFJeCOvr6gequijfJMuBoBeoOZQfULLRLzw7mllRVWuTEMtr35/P5AROqLH3zFLN3GA2pMcDxOC6Hgk5Y=;3:eVOAya1zccJGVxXMD/ncFQFWKjmQ95rc70Bpp80/In4O0MrXWrN8T9KuvfX7PuHiUEp+TfTzI0XmCH1BeNQ9SwL3RrEF2os72/bs7aFubVabm6+etaO0nwYpG+n/LOD4KR48FbtZ22ECltiiSL6vYMuNmFpfBRkPVf0zuawMQrwJNCZYZkP//IyScbzZk2y+fUrrN4U3e65GXuTrA4cStOLokRZCPIsHA6cAlRsARPMMck3bA0qAkSMVI3MLhNK9;25:ogeK5zCBt81fjQLJk7FCDmYXps9pTSsyGrcEPw5IZ6yRPA4ZBlteAFYuCI5C2TQewfx94SH3q3GUwuKbDYd/eL11oV/qer0JF1hledWI7je2lj7ZGNjdm0OD/fUtnu2P6fTkIUh2jgLBfgxKDe01a6Ls6NzGjb0J+HfkxqEzMUmTG+5xa1h7wbAlyddmugevx0q4c1OqObRoIDsGybjkNFz/qVJxYdd046k7O5XsxyvL0KTxTIgVbHPH8ddb0/YYE6zzRhxKNxZfPv00Eo4bLw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR12MB0711; X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0711;20:FCaa0WMrdj9rtl1xFzvc1657dER87b1XvJwi/g0PmK0dQWt/u/xK55zQtWnEZVDLlFLMgvos4TWgS7vJCPjAcymLnJD6rAx1hHZWtSfVVH2AYWO3dVBeN4fwS1aDOSnSfvJn+IePkHoJaiJe7yAb8XqweN4745+FIJoAAquJEio8uwayjezn34MFKH3JB/IpYTwoGZOa2QAbO8aPDTq2/Vi8y57p5C8epn3LZLLmgp68Sm/7tr4mJAUmr0Ly+CUjC1x4RBPNrrbBTYUyIOgx89vEdTahOEG8g8U6VpouCCJFD70YIXnFkOxl0dthZiWiOWwjy2ttUYWTsc6R/hA+cpYRtugWDukUkV08ATN/5O8ZraQB1UQ+q24rwei90oxrI7DPjls8Eu/OXcDwzgbqsmD6ZyTC0LjRz59aqWVI/yrZH31sj5UzzyJ3DjQR6ynA3eGOSv8oyD53rl/UkW7Km+fuGPHXeIhLq4hYdydzwbNX1e5m09yRJ8D6pqF3ElJE;4:gRnfrFUOPfCqtz4zYlxV+N/rPTuKffRV7j0FXnBlc4dT61VAiyNAIXLgYEH+7E9KwhrHZRC7PHv1pV5UeyGGh/z9anmwGNKD9GjQjpm+2qo4zt7ah9HmUWHCNF3PL7c7xcj08wZIX0BKQkRg85akLoBxXKE1dVxn8z+/ilKx23XwVaPLiyIEUc2KkMlfi4Nw2eKOqX8mepwwL3yqpGzH7NpvvSs9Y68hMRtlRpBfq0WSV1U/QMTRez977QwfpIVKjKxdm/PnPj5419pcnptBmxRkrYu5yaQbhzA6u4UhlzNQeSlwFpxSjx6zsz4zYLaM X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(8121501046)(3002001);SRVR:BY2PR12MB0711;BCL:0;PCL:0;RULEID:;SRVR:BY2PR12MB0711; X-Forefront-PRVS: 0682FC00E8 X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTJQUjEyTUIwNzExOzIzOldKUW15WmJzT3lXQ29YbHd4Zm5aWFYySS9l?= =?utf-8?B?bjdJSmhEaGdlRkpOTHE5YnV0MzdBUC8wTGJUM1JSdkF3NDhqbnpEYjkyRC8z?= =?utf-8?B?dkVES1JjSDFYZ3J5Q1huekgwejFJWTA5ekZxT2xJL3M1MDEyZ3NNc2NkY09z?= =?utf-8?B?aWRxYS9pQ3R2MFZSanBDQVljZjM4Q1E4TExwcnd2dDJRU053bXN0Q0UwZTNY?= =?utf-8?B?YVBsZTVyRzN2OXVuZFZKYWQ5K0RZdXk0eHl5SHVDeEJQbUJCYk5iS3pHZHlC?= =?utf-8?B?L3orVEtKVkhqdXlyM2twcCtQUnRNQmxRa2szZEdBenVFRnNKQ1RtcXlFcU13?= =?utf-8?B?Uk5qZHQxVXJhOFdNWW9jVWIrNFlVWVkzZDE4MS93Qi8zMnF6TS9SK3pFQU94?= =?utf-8?B?N25mWkNwMG1QaWc1VXpuUXJ3ck0xODRPdUVCQTJ2Q0RmZjFpQWZZaG9hNFRB?= =?utf-8?B?Y2pVZTAranRmMFZLVk9FVjkxc1RZK1FQa25nTHFiQnFjWFhGeW5jeklibWsz?= =?utf-8?B?K2hjOVdoeDBxSFZDeUcwS2RORjBPK0gxVnlpRFZwclpiQlZMbXQvUjhYSVh5?= =?utf-8?B?QnRuMDFqSjd0K2UzNXdmV0YyU3FVK1Axd1QySitmdkZEZmVhWldQNUpIcE5R?= =?utf-8?B?ZGRzdkwxcDZDcDBBVFE4RHJpalp2UEYxbkpkdWZHeTZueit3ZGF3VWNqQTI2?= =?utf-8?B?R0dmQ25EekxUMmd4NGRVeHFUU1RzaTR3STBxTUkrMTUrVDVoYXllVG9CZFdT?= =?utf-8?B?ano5M2pabDlmd2xncTkwZ1hOY3l0cDVORFlEWmdJd1dNTm5kZDZQa2NBK2FH?= =?utf-8?B?NzVZeFV6QllhTmJHU251NFJKaTZmcVRjMFNTSUZaNFpkMkFvZWJ5czAyN2JS?= =?utf-8?B?QjVjSUhBYU9ZVk5uTUtneVJzVHJLU1lhclMwQlNzTzNGZ2hCV3lwazBxT2hD?= =?utf-8?B?M1NwV0tOZmdBRFVFTCtQb0l6Z0ExSXRrNmhQYUJGV2Q5eDlSL1hnb0lJUGtI?= =?utf-8?B?VjRXajN3S0lSQ0dmbWlXYVE1S0VLNEFSaG9iRWZxMklGdUtJUDhJREpYTDNk?= =?utf-8?B?UXYrRW81SllONUpFbzFmMEZNQkd2Uy9xOGlndGp4QTF6dUN5WGdOTXJYQldo?= =?utf-8?B?bkpreng1WEdKSm50TWJFekd4Yzl2TStjekE1eWd6QU4vejFUZlZ0anBoOVhE?= =?utf-8?B?NFdvMXc2UVpJd3FBMDh5amZ4YUpKWjJxNUgxVDRMelJ1bEZIV1lqR0c1SHh2?= =?utf-8?B?bmx0NDNvN0JvZ3VZZmlscFZkU0lRSndMeHVSMnRBWXZSNzlmTkYvQW9MSnRx?= =?utf-8?B?WTZXbE5qOVY0Skt0RGJaZDNGZzY4OXVocjROR1VJSWdwNjZDQTJVbUNLcDZt?= =?utf-8?B?UlBBVnhtZ280OXpkUVJ5cFRzcXRXM3hWM0drV0l3WG5qNG9ER3ZVV3RaUHZ6?= =?utf-8?B?MEo2UUNjd05PMEI5T091bTlWLzlZMHdVdnlLbTZuVmduc2QvU21sNmlZeElq?= =?utf-8?B?SisyVkcvaGpTeHdNZGZ4eTgzWTFheDJKWWsxL1dpODZ3dGY3U1JxQ2R0dDlx?= =?utf-8?B?R2Y2ankrRFM4WW9XdERJdXJQTlA5eEE9PQ==?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0711;5:UaBnY7TeSzGP+2KfJYjfADd71NkfuTTuJtyveG9QelD9LizHIOSXDzmcDm1iUO6oTyvYR4av0tt/QWGnPGw7qylHDsvLLM8PPHWqSRyyq63G6PJ6iQpNFLOt/w615CnF1AzYioIBP/a9Q+6+O96cbw==;24:Bunh99cMtSErstYPIEtWZ6D69/LH6Qt3rYQZKpytyNSCNtfyCPBUVmBtg00JxqbSNycTF7hjSC9RdZCZoY8X6g/NtxakDK4Ew4Z+bk9mD7k=;20:BJbHcc3Wk5IOVJ7I1nxlmUddJ0cUKqlD46wZv6imk/RBGVnt5R3P8SbVrX+5+QUI++/5/amdHYTFelu+cwVZsg== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2015 10:47:01.0662 (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.221];Helo=[atltwp01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR12MB0711 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4006 Lines: 105 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? 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/