From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752978AbbGSL5Y (ORCPT ); Sun, 19 Jul 2015 07:57:24 -0400 Received: from mail-wi0-f180.google.com ([209.85.212.180]:38296 "EHLO mail-wi0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751057AbbGSL5W (ORCPT ); Sun, 19 Jul 2015 07:57:22 -0400 Message-ID: <1437307034.3520.108.camel@gmail.com> Subject: Re: [PATCH v3] sched: modify how to compute a slice and check a preemptability From: Mike Galbraith To: byungchul.park@lge.com Cc: mingo@kernel.org, peterz@infradead.org, linux-kernel@vger.kernel.org Date: Sun, 19 Jul 2015 13:57:14 +0200 In-Reply-To: <1437297060-25378-1-git-send-email-byungchul.park@lge.com> References: <1437297060-25378-1-git-send-email-byungchul.park@lge.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.12.11 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, 2015-07-19 at 18:11 +0900, byungchul.park@lge.com wrote: > @@ -3226,6 +3226,12 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) > struct sched_entity *se; > s64 delta; > > + /* > + * Ensure that a task executes at least for sysctl_sched_min_granularity > + */ > + if (delta_exec < sysctl_sched_min_granularity) > + return; > + Think about what this does to a low weight task, or any task in a low weight group. The scheduler equalizes runtimes for a living, there is no free lunch. Any runtime larger than fair share that you graciously grant to random task foo doesn't magically appear out of the vacuum, it comes out of task foo's wallet. If you drag that hard coded minimum down into the depths of group scheduling, yeah, every task will get a nice juicy slice of CPU.. eventually, though you may not live to see it. (yeah, overrun can and will happen at all depths due to tick granularity, but you guaranteed it, so I inflated severity a bit;) > ideal_runtime = sched_slice(cfs_rq, curr); > delta_exec = curr->sum_exec_runtime - curr->prev_sum_exec_runtime; > if (delta_exec > ideal_runtime) { > @@ -3243,9 +3249,6 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) > * narrow margin doesn't have to wait for a full slice. > * This also mitigates buddy induced latencies under load. > */ > - if (delta_exec < sysctl_sched_min_granularity) > - return; > - That was about something entirely different. Feel free to remove it after verifying that it has outlived it's original purpose, but please don't just move it about at random. -Mike