Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp568905ybk; Wed, 20 May 2020 06:48:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzMJ2CudCzFUE7Yb9TnCP/0ccKIdIBOitLHw2YQBB0lo/ZRpQ8NVoJBGtP3krRsjw6CikXI X-Received: by 2002:a50:fd0c:: with SMTP id i12mr3403390eds.48.1589982484463; Wed, 20 May 2020 06:48:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589982484; cv=none; d=google.com; s=arc-20160816; b=GOoNU0/ZduWVeT9jsvlDp0tWNNAI0TCG4vkRZbPgAhfKSOzOwKDFc02+WHd/3baGXT ZsO0Z0XFoQv5Qr09hJjPLBqd94hbox22mVhkHe5nKZwqPoQgE1ngSR1W3gJ+yMD2hkHb lMiTRVl2W7jzJ14ItlvjlpLfrZj/jyEHF8yGc6R0K7kkyxYvOiJnRXyb0fJf07Fw7DnD yREHW+Q6T/afwxsKZ78SkaXS8f8pPvrZXppBhrs/pMvlFzRVuzQ2v8aJsXCrFXZgX/6F GnJNnVaZC/39dpjB2LXRaGlsHhXm4rkwHEm+zfmqcZH20dlynvBCx0+CpDFrifRNepEj HmIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=3OakKpNAU7KMk1GHtebx9Ydit/61tcy3oYFeLk6dVCU=; b=TU7bTdTDR4ap/m5KTikr739elNFw8lmGZgS8eux5Yn5Kj3TDlLbKNqWlsBQm/UC65y kE0mlis+Z1tW+BroY4/uQCpDivn340ALG68fNEWltDHq9Uv988Ht4YnPgyO1joGN3SPP Z125C5OTbbJxsTj/SnkEJFWZY9/BoO/ecI8coal7CNl4/LYZ3aDNJ0AOANmZzCRh8FIL iSOl0W46xrCO3YEcwYJe573B7/RV37jqkTIiA13jwFwwa/8NFC0HRpd188vtQ9SZq6v0 +FQ2Eo/NJI/HKUTo7WT1k5DaxUdqIo2t7BzdQb/1VG+KQo5gtQIl7orRgNf2u1cNC6ew Kuuw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o14si1678554eja.223.2020.05.20.06.47.41; Wed, 20 May 2020 06:48:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726899AbgETNn1 (ORCPT + 99 others); Wed, 20 May 2020 09:43:27 -0400 Received: from foss.arm.com ([217.140.110.172]:56584 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726875AbgETNnY (ORCPT ); Wed, 20 May 2020 09:43:24 -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 85D6C1424; Wed, 20 May 2020 06:43:23 -0700 (PDT) Received: from dell3630.arm.com (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 982613F52E; Wed, 20 May 2020 06:43:20 -0700 (PDT) From: Dietmar Eggemann To: Ingo Molnar , Peter Zijlstra , Juri Lelli Cc: Vincent Guittot , Steven Rostedt , Luca Abeni , Daniel Bristot de Oliveira , Wei Wang , Quentin Perret , Alessio Balsini , Pavan Kondeti , Patrick Bellasi , Morten Rasmussen , Valentin Schneider , Qais Yousef , linux-kernel@vger.kernel.org Subject: [PATCH v3 5/5] sched/deadline: Implement fallback mechanism for !fit case Date: Wed, 20 May 2020 15:42:43 +0200 Message-Id: <20200520134243.19352-6-dietmar.eggemann@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200520134243.19352-1-dietmar.eggemann@arm.com> References: <20200520134243.19352-1-dietmar.eggemann@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. Favor task_cpu(p) if it has max capacity of !fitting CPUs so that find_later_rq() can potentially still return it (most likely cache-hot) early. Signed-off-by: Luca Abeni Signed-off-by: Dietmar Eggemann --- kernel/sched/cpudeadline.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c index 8630f2a40a3f..8cb06c8c7eb1 100644 --- a/kernel/sched/cpudeadline.c +++ b/kernel/sched/cpudeadline.c @@ -121,19 +121,31 @@ 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 = capacity_orig_of(cpu); + + if (cap > max_cap || + (cpu == task_cpu(p) && 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