Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp1499543ybb; Thu, 9 Apr 2020 03:27:02 -0700 (PDT) X-Google-Smtp-Source: APiQypIFxuhTP+Vh9tWC2xfcPcK4frXs77or4tOhSeRG1PftSySbINlMm5/9aZ6XXYTpNMXewfUn X-Received: by 2002:aca:5d87:: with SMTP id r129mr5352889oib.144.1586428022173; Thu, 09 Apr 2020 03:27:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1586428022; cv=none; d=google.com; s=arc-20160816; b=C/l3NvSVIvK2pu+Rjw+lsbZVr06hHIxeSD3RhHiKUZOgXVZ3EbDJZ+Hg7L1nev26qm mBGYX5S/trnDPROyNEbK4akUJAOsnQMMN94CZNjUd4ryYIrzhMBVZNWjC6v+3zT7QYVa l7QyxqEPppnM3KHjDrrTDzTuVPz8Fj5vddcChO4b3gFp8wOkPKTORemG3cYjM0L2bdTf 332pqjcvmVbMtMQAhzzAdufO1LTEk8DsWPwr5QUx3TBpRLPlGVz+NibARnr7HYz9FsPK KWOJEuGB0lkmkmqc8KPaD6oLDApAkEm4IpuoILzIc65rz2Ho04RHjLXEdiIpU+OcAlI4 oWMA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=X3cKq7kG40fjPyxluXXodR6bfvCaAeRRCE0PrnpPhNk=; b=eUhZQPEy5T4d21U1O6gcT/P6Ua7uCeK4LnG9yaH/zNxzD20nCYdqif0kvewuF2XWYA VqP+B4DULKBVzzSwI0qBGRRQufingcJFCiHpcoG0X5VgTHYYPpBOCtddhKXhXwgvmMvE 22mpNzfal+trWwZa3PisthnKGe6KCtB2srXFlPI3XddhL2ihSaSyeDDoSWzrm61MYe4p Mz27Cv26eNCicutYeVbY7O6ccUQfB6y7emUDNnFeMKZHocRzgzCkJwrbeB1H0Rd26QyR N0SkW7K6hbL51Tl7I8OZREyl0FEgbkK4jlc6ntpaIyrthcd6ZF6nuCtxOFL0s23qMUcC 7+Hg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z14si4186859oom.72.2020.04.09.03.26.47; Thu, 09 Apr 2020 03:27:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726582AbgDIK0D (ORCPT + 99 others); Thu, 9 Apr 2020 06:26:03 -0400 Received: from foss.arm.com ([217.140.110.172]:48184 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725828AbgDIK0D (ORCPT ); Thu, 9 Apr 2020 06:26:03 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0A09C31B; Thu, 9 Apr 2020 03:26:03 -0700 (PDT) Received: from e107158-lin.cambridge.arm.com (e107158-lin.cambridge.arm.com [10.1.195.21]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 0F06D3F73D; Thu, 9 Apr 2020 03:26:00 -0700 (PDT) Date: Thu, 9 Apr 2020 11:25:58 +0100 From: Qais Yousef To: Dietmar Eggemann Cc: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Steven Rostedt , Luca Abeni , Daniel Bristot de Oliveira , Wei Wang , Quentin Perret , Alessio Balsini , Pavan Kondeti , Patrick Bellasi , Morten Rasmussen , Valentin Schneider , linux-kernel@vger.kernel.org Subject: Re: [PATCH 4/4] sched/deadline: Implement fallback mechanism for !fit case Message-ID: <20200409102557.h4humnsa5dlwvlym@e107158-lin.cambridge.arm.com> References: <20200408095012.3819-1-dietmar.eggemann@arm.com> <20200408095012.3819-5-dietmar.eggemann@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20200408095012.3819-5-dietmar.eggemann@arm.com> User-Agent: NeoMutt/20171215 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 04/08/20 11:50, Dietmar Eggemann wrote: > From: Luca Abeni > > When a task has a runtime that cannot be served within the scheduling > deadline by any of the idle CPU (later_mask) the task is doomed to miss > its deadline. > > This can happen since the SCHED_DEADLINE admission control guarantees > only bounded tardiness and not the hard respect of all deadlines. > In this case try to select the idle CPU with the largest CPU capacity > to minimize tardiness. > > Signed-off-by: Luca Abeni > Signed-off-by: Dietmar Eggemann > --- Outside of the scope of this series. But does it make sense to make sched_setattr() fail to create a new deadline task if the system will be overcommitted, hence causing some dl tasks to miss their deadlines? If some overcommitting is fine (some deadlines are soft and are okay to fail every once in a while), does it make sense for this to be a tunable of how much the system can be overcommitted before disallowing new DL tasks to be created? Just thinking out loudly. This fallback is fine, but it made me think why did we have to end up in a situation that we can fail in the first place since the same info is available when a new DL task is created, and being preventative might be a better approach.. Thanks -- Qais Yousef > kernel/sched/cpudeadline.c | 19 +++++++++++++++---- > 1 file changed, 15 insertions(+), 4 deletions(-) > > diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c > index 8630f2a40a3f..8525d73e3de4 100644 > --- a/kernel/sched/cpudeadline.c > +++ b/kernel/sched/cpudeadline.c > @@ -121,19 +121,30 @@ int cpudl_find(struct cpudl *cp, struct task_struct *p, > > if (later_mask && > cpumask_and(later_mask, cp->free_cpus, p->cpus_ptr)) { > - int cpu; > + unsigned long cap, max_cap = 0; > + int cpu, max_cpu = -1; > > if (!static_branch_unlikely(&sched_asym_cpucapacity)) > return 1; > > /* Ensure the capacity of the CPUs fits the task. */ > for_each_cpu(cpu, later_mask) { > - if (!dl_task_fits_capacity(p, cpu)) > + if (!dl_task_fits_capacity(p, cpu)) { > cpumask_clear_cpu(cpu, later_mask); > + > + cap = arch_scale_cpu_capacity(cpu); > + > + if (cap > max_cap) { > + max_cap = cap; > + max_cpu = cpu; > + } > + } > } > > - if (!cpumask_empty(later_mask)) > - return 1; > + if (cpumask_empty(later_mask)) > + cpumask_set_cpu(max_cpu, later_mask); > + > + return 1; > } else { > int best_cpu = cpudl_maximum(cp); > > -- > 2.17.1 >