From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752790AbcERKCX (ORCPT ); Wed, 18 May 2016 06:02:23 -0400 Received: from mail-db3on0055.outbound.protection.outlook.com ([157.55.234.55]:53696 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751767AbcERKCV (ORCPT ); Wed, 18 May 2016 06:02:21 -0400 Authentication-Results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=nextfour.com; Subject: Re: [PATCH v2] sched/cputime: add steal time support to full dynticks CPU time accounting To: Wanpeng Li , , References: <1463560115-12962-1-git-send-email-wanpeng.li@hotmail.com> CC: Wanpeng Li , Ingo Molnar , "Peter Zijlstra (Intel)" , Rik van Riel , Thomas Gleixner , Frederic Weisbecker , Paolo Bonzini , Radim From: =?UTF-8?Q?Mika_Penttil=c3=a4?= Message-ID: <573C39F1.1020909@nextfour.com> Date: Wed, 18 May 2016 12:46:25 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 In-Reply-To: <1463560115-12962-1-git-send-email-wanpeng.li@hotmail.com> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-Originating-IP: [194.157.170.34] X-ClientProxiedBy: AM3PR01CA039.eurprd01.prod.exchangelabs.com (10.141.191.29) To AM4PR07MB1553.eurprd07.prod.outlook.com (10.165.249.9) X-MS-Office365-Filtering-Correlation-Id: 30725e82-a09c-4515-26fb-08d37f014a20 X-Microsoft-Exchange-Diagnostics: 1;AM4PR07MB1553;2:f45vHgaaNqbNhGCmTbhucZbHC+a/PSFMASq6m/OcnnTcESt7g1rFCReLIlU9hqS1LlNFRbNF3jri3RnwiPCxQ7Gcl978iyWOxx8d5WVajLjdu2eKwBsL/I68nbjRMN8BU2eonxOep5MqETTnz/22/6JPDvx39Eyamowg/NmAqWUPy19tstGZrK4jmFnwxOrO;3:XanhGRBjJtMs5qjG29fHFFFc7gMa6PppoZ4caMs76uswAYhuLtX9j+mFWMXekDyzq62h2fDXuc76MF9NyKprjAENoj+A5yvCEFcUUT5UqiQQvW1McM9MQAEygjLjSBwd X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM4PR07MB1553; X-Microsoft-Exchange-Diagnostics: 1;AM4PR07MB1553;25:pfcByNJmWx+nQC9VVg2hpfbEw/mLIFiY6mf2dXzz94cxLJvxxo26fPG1++Yh7HWrEjWYq7nafXeZsIH3rQufKHvSXjpwhW9jzg/3TX6+4MQ+6RupmQPEm4NMyULCwqhdBuKSMvVAd4wAR7Z8GBLgi+op5q1eIzLKJMsfoyIMtccWk/CHbERv4Ls6fc6uQl+68fZsUo6WRNjqicQxvIgTrTgcqPtox7CPUN7ayhFJDerw8Jv2/bF+gQsth8W08YyBlkvbEvjPGMyyDuKoBdoT8618MWmVw03IOBgaUE5JdA42LMSELMnKrRX6NgJ5TgNkJvwoU2Ye7Ic50VugNRwOAT8Rw0OWITu9E0CO/aX7/0GRQsrQDB6KYIOYGMRyHNvDo54TJzAi2yJWocGebMMBnKcLkMNr52Jfxbyv4zEJnuBNBkqpWUTWi31/8bnIHoZD7exo27D++xukpiRd2SU+ieuF3lESJpjrHRpIHq8MkGLQSCxMLpaQfRg7XWNyA8AiMs0k2tVV9tRD9eoKRdRZ7+v1i003RcSdPaxsKfRjLgP0up8BkyJEd4uW+RFvlYBHD8Xc+xYdGw8CIT2v4MyXfa0lXI5SSjOdDVgjU+7PW9cMUuRBNmd8UDZsO8JTb2hu2s/4dz194ustqX53UjexdC1dnyg4xkxNNFUa/J8DT3mD7jKhy/1UKP5uVpOPqpVam3sNzhbQPz0oQGfZf4VH9K7GJJHGjSEdw1vrBDg20k7M+ed6mZ+PVonjr7ViyzHZ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001);SRVR:AM4PR07MB1553;BCL:0;PCL:0;RULEID:;SRVR:AM4PR07MB1553; X-Microsoft-Exchange-Diagnostics: 1;AM4PR07MB1553;4:TGlMpjOQJWRjYwwbYRvnwGsvBJbCETZr71WYO7ADTrSH38Z0FwZYkqL6ltdoIvTT/AdQuvny5qjORT7Pq+8BB90STg3uWisPW41aNmyegPZevuLfMqHzWYMD+bvXkOSZdtpHlx++rzNxY0ZZsuq+ZlMFcEbz1sWnq+k8uEzqS5Hq3a8bu2Km6QV/3b+jpvfR4gVUOghILQ8KuM0+GRnc2FPbHUkCA5bNeep66/d4bF/hIJ3FBXlth6Wg5o3Np5zJBasIE+sAr8yw1SWz9D4rdM5uUS/8Vj7ZbItPKKEKucoPKZTd8jn3sbXUd/dhIciuVD6+ijZF4uuE7UYhRSOXI181qSO2PVyE8OW8urwl+AJ7pZ4aRF0ngCxTs9MwGBhN X-Forefront-PRVS: 0946DC87A1 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6049001)(24454002)(377454003)(8676002)(5001770100001)(42186005)(19580405001)(80316001)(59896002)(5008740100001)(64126003)(86362001)(189998001)(65956001)(66066001)(65806001)(36756003)(2950100001)(33656002)(77096005)(92566002)(50466002)(2201001)(47776003)(15650500001)(83506001)(50986999)(76176999)(54356999)(87266999)(19580395003)(81166006)(23746002)(586003)(65816999)(3846002)(6116002)(5004730100002)(2906002)(230700001);DIR:OUT;SFP:1101;SCL:1;SRVR:AM4PR07MB1553;H:[10.10.10.110];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;AM4PR07MB1553;23:yXvcMN3LoZJrTYltM7rLNTAZYcOpN0uwk5QLS?= =?Windows-1252?Q?55fs1NTTLmr3Zf5GcF5JNbtgkjAX8JDLB378W1sDdmBU+QZpNQCS+/xE?= =?Windows-1252?Q?KB2Jp/MQKC4pX/RIpEUhTVZi2zGifjHv7VhV21nBVcZmcb5relmlheMq?= =?Windows-1252?Q?x0Hz/2TvTMTlBlIHp8bdi1Ll7LPk2mZGVk/Y40fHzGOQ5Z5+M9ZrhRVZ?= =?Windows-1252?Q?iNVmcrQoXKCGSiLXYcBt3DvmJ8VBqCIZf8M+6myQy24JaMez9g//QdPl?= =?Windows-1252?Q?QOtaj+plOvNAXI9+7/zpl+f1vjyqgkPmWtyTzHZnGO7bzm6HXadYJ8+S?= =?Windows-1252?Q?pXBKc1VbwJ0LOGkrIZKfzyHZncaYDZ5hvXDUibVDe65SopTNQYgyDbIU?= =?Windows-1252?Q?ixJBMcgfuNzIzVHhtndfkuIlCg8Mf2ZibmgjzZjVc+pcK7ayxi6j+8Vr?= =?Windows-1252?Q?Ku5AevDxlI3B68q5gFuh8tWeUxc5yJeCtcUlY5BTlUmGhN6JKGxINOtg?= =?Windows-1252?Q?wZ0CXx5taY+rnnV8ulRVVX1aG+GT9N91wUsfwqJGEkihMs5pA3Gz4y9v?= =?Windows-1252?Q?NgvqjQWRVFjJO2OUsoNTFtkaI6uicF33lLupwcq51NijLEtEmpeRWXEB?= =?Windows-1252?Q?9ExM6W9PiOJbWKpoIL2KAWk2BwfjICqNH60sotoVHqBRkEf8ch8pXBuj?= =?Windows-1252?Q?O+5/Q8wg6+l3KKq+n+eWCwN+g2jYH7e6kKUWdjSorfS+YyX0BMBgy3Bq?= =?Windows-1252?Q?OTWbsTuXzZaftt7g76flrogSlZPzwFnsMJyz2fsx4a9VKj7u/PqG9WNK?= =?Windows-1252?Q?ZOztSg77VGigVUm3EQFPbPEb+q6kbUzL8YFQvVkwI1xhcjB7IsmdaVRS?= =?Windows-1252?Q?5ZEBBy4B3kHm09e9oVH3MPUndTB3gf8lOZSBpYLHQGg2ERjmCDQFsl9M?= =?Windows-1252?Q?KEf805RJ02/HkDKgpDLYtXHtqydk1uG7neSL+2HhwvWgCXfcjg8ZtMkN?= =?Windows-1252?Q?1ogjBsOk1OYa0ckZKJFLnWJ6m1tDGaJ+6ARayoeosKqIkeKyZkUaWGd0?= =?Windows-1252?Q?S12EZzPpJ01T0Iv5d4XkT5eYj93t60XugLOCe3zhrhw0gOpqq6iYIZEB?= =?Windows-1252?Q?R9jLsh1IFAv1GvGlHderZdgmRp6jtGC+bhwNEGExAUbddwONa35J/1fO?= =?Windows-1252?Q?RgjQNRDLCmAf2/nPaWz4+5h3T+rHgQ=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM4PR07MB1553;5:MYk/s17Biv3XvGTQl8ZQQMyRCMDKu8xShHiTRvOqTy7HHMD1vmRBc7Yk7dUFjTV4lVs3mgr8MrIAKmFiJnTnvoyBBt5SEQ3emTEur4zfRlFdrDMyVd9HLpiIvM0gYrRoaFBNpAZAgjQxDl3dynEYtw==;24:17YbuB7hZdyp3Zg63k0yreuKtctBampkDNv1Wl4K6rxrbFWVRgwqS1qbKcIhbgjdOhVegDbRXLUAcHTDwrLwaMMI26bJGo7D6FVwHX7y+js=;7:n7s4cwei27dfPj48OH17ZzTd7d1+9CtEJzxe4H4MbqztfkmAAP+qk7y3H+BQ1I8q1VXETdpLazdjBDyGVgTrmYkAf9YPH6TvRMdNdnT0o6vdRcz4Trk/Fuf3IZBe999SN31NE7TVAhtg+jiQ4w4zwCu5sPIdJLMpsrm6xLzot6JCOi6l7+mRDg6IBaLys0A/ SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nextfour.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2016 09:46:29.0624 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR07MB1553 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/18/2016 11:28 AM, Wanpeng Li wrote: > From: Wanpeng Li > > This patch adds steal guest time support to full dynticks CPU > time accounting. After 'commit ff9a9b4c4334 ("sched, time: Switch > VIRT_CPU_ACCOUNTING_GEN to jiffy granularity")', time is jiffy > based sampling even if it's still listened to ring boundaries, so > steal_account_process_tick() is reused to account how much 'ticks' > are steal time after the last accumulation. > > Suggested-by: Rik van Riel > Cc: Ingo Molnar > Cc: Peter Zijlstra (Intel) > Cc: Rik van Riel > Cc: Thomas Gleixner > Cc: Frederic Weisbecker > Cc: Paolo Bonzini > Cc: Radim > Signed-off-by: Wanpeng Li > --- > v1 -> v2: > * fix divide zero bug, thanks Rik > > kernel/sched/cputime.c | 13 +++++++++++-- > 1 file changed, 11 insertions(+), 2 deletions(-) > > diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c > index 75f98c5..bfa50a0 100644 > --- a/kernel/sched/cputime.c > +++ b/kernel/sched/cputime.c > @@ -257,7 +257,7 @@ void account_idle_time(cputime_t cputime) > cpustat[CPUTIME_IDLE] += (__force u64) cputime; > } > > -static __always_inline bool steal_account_process_tick(void) > +static __always_inline unsigned long steal_account_process_tick(void) > { > #ifdef CONFIG_PARAVIRT > if (static_key_false(¶virt_steal_enabled)) { > @@ -279,7 +279,7 @@ static __always_inline bool steal_account_process_tick(void) > return steal_jiffies; > } > #endif > - return false; > + return 0; > } > > /* > @@ -691,8 +691,12 @@ static cputime_t get_vtime_delta(struct task_struct *tsk) > > static void __vtime_account_system(struct task_struct *tsk) > { > + unsigned long steal_time = steal_account_process_tick(); > cputime_t delta_cpu = get_vtime_delta(tsk); > > + if (steal_time >= delta_cpu) > + return; > + delta_cpu -= steal_time; > account_system_time(tsk, irq_count(), delta_cpu, cputime_to_scaled(delta_cpu)); > } > > @@ -723,7 +727,12 @@ void vtime_account_user(struct task_struct *tsk) > write_seqcount_begin(&tsk->vtime_seqcount); > tsk->vtime_snap_whence = VTIME_SYS; > if (vtime_delta(tsk)) { > + unsigned long steal_time = steal_account_process_tick(); > delta_cpu = get_vtime_delta(tsk); afaik steal_account_process_tick() returns jiffies and get_vtime_delta() cputime, so can't mix them like this : ? > + > + if (steal_time >= delta_cpu) > + return; > + delta_cpu -= steal_time; > account_user_time(tsk, delta_cpu, cputime_to_scaled(delta_cpu)); > } > write_seqcount_end(&tsk->vtime_seqcount); > --Mika