Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp2240302rwd; Fri, 2 Jun 2023 06:55:37 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7FYSoMySGueJ0mjMme6i/VLs51RLsaOdje8BUfr4HU90wAel7LVVrnmrva/kEx//Tgs7Sy X-Received: by 2002:a05:6358:7e88:b0:123:5d3c:5a36 with SMTP id o8-20020a0563587e8800b001235d3c5a36mr7602183rwn.24.1685714137586; Fri, 02 Jun 2023 06:55:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685714137; cv=none; d=google.com; s=arc-20160816; b=OTiOrs0HPA3UHXrwNF/UaQTFjB4vFbXvTbrSplxtPKsP1CkHrqU7nqQdZJpagr8FZm PTKa4KtNqUHCDwf443lKOEhzZu/1JkY8aeEMDYAmI2NURAl5ZfzYv923H6YO+A6trk4S FTGUOijxsGuTlbhFgTD5h/+rowR/fAY6IbmwHZoUa/sl2FiEmzSZ2NkhXMWX0w+kcW+R kGhinKNIv60w4fVh9wA+2VCyXOPu8R7dX6k9Uff/Pny/jf6tZHfquu8pGbP4672ixZ2u lmahH8xaVvol4rccCSOvUJBpsNnZUis0/nP4/xNr239p/cTRhmx3uiAfwfsiw3s2QDld 49vg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=CM3eRbOi3TkUOXU+mIU5eWBw4sPK5X/8OHYMDjf2cns=; b=IVBJV+SsS7jgt3h5Di2DrjEXzk0/vIe2rrGh4YlZQO3YkwoYkAfoUZRoQvMxvZZPap A+X+Z2Wl5xEwvfiSEE+QAIbBgCiLZgO+N2SXW/IPg4fet3Y8ZNi7amdPNNxZ/O2P+m0s +CumpKjGyUp2TSphrI+gCrBhLz4ftB41cS6b370B+Om8EhxvD9OnJ/KC29W/4NgB9U7U b6L8LUT3nGM1Z3QF7mO+NwlGmB/LvONPSzLzVBKhajcJzyAFUisS0KvsPd+LNbZwGaSh dN4/UL5nW0fQXJNF3RcL5KYrO4EbwBysVIw+cDEWUD14ilZTrjrhysnqgc26TXzxXH4U tLgQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Bdbt5Jna; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d19-20020a17090ac25300b0025350783742si1135174pjx.5.2023.06.02.06.55.19; Fri, 02 Jun 2023 06:55:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Bdbt5Jna; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234965AbjFBNpd (ORCPT + 99 others); Fri, 2 Jun 2023 09:45:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48624 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234629AbjFBNpb (ORCPT ); Fri, 2 Jun 2023 09:45:31 -0400 Received: from mail-pg1-x531.google.com (mail-pg1-x531.google.com [IPv6:2607:f8b0:4864:20::531]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CF4FB136 for ; Fri, 2 Jun 2023 06:45:29 -0700 (PDT) Received: by mail-pg1-x531.google.com with SMTP id 41be03b00d2f7-53f832298acso1225301a12.0 for ; Fri, 02 Jun 2023 06:45:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1685713529; x=1688305529; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=CM3eRbOi3TkUOXU+mIU5eWBw4sPK5X/8OHYMDjf2cns=; b=Bdbt5JnaM8kNcrIXCCvACs+89yLNPiwSJ+zgyIg9k/Kf0oLzHXF6gzCBj2lX5IkNbR Jm2NSkGu/yvyFaShHO6uq+T6QJF272ZhGxlXRPJUjocLndQRPUQQnm0WU8Lxu3iLEePM WluCMbkU0KlGasvIeaIlNJn52BIHPOQxvYGN8R9InVzBeAuIqBDuNymKpBZvw34RN16k xLMf3e57oNWfdmvTvkSYpE398KIptRvagVN0Bc2JPYqJtnOYBET6LMubLVT0v38RjY4o P2myeHAmvB+J95wZjI8QJKV8JLNY+5Avkn+n0tuPDfLxj5QE9cTiNpeUFecMapgs1VNs 7cUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685713529; x=1688305529; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=CM3eRbOi3TkUOXU+mIU5eWBw4sPK5X/8OHYMDjf2cns=; b=UdIQPgxGCotFBthfRq7B96ve6Muhp4zEx3Enw9I66urTvfFS9dcmDnxM2AMsvYn67f Lzk3m1eQL8y4QASBEAx2FZ4lPVknexinbLTENJiijGZhha/i+7Nz9E45acYIv/JyEkO4 02KImkWfrc/Py2rX2AX+8LVDMkOWZvVJXLROS2lqWIlLkoFs2qpJElw2B87WjqtKrbPD MDxxtbLVspWM9o6EXcOvkbMwyDIWY4pkstgDqOuusiAEbv+B2XZm3YlaaPaO5k2zLGHb sAAdQ4x8zlLaJeeYLSk7KdrEK0MxX7h3+ANQUOoW2NM1T0kwIXLgMdlkV5KxNzYHGKGX jSMg== X-Gm-Message-State: AC+VfDzIdZosglSrWxlPVNoEXGrt1i3PE3d0UqUY4n/TZtn65DeZT1SP WUTRydq8RkDKo2HzQBL4SiSGYt/agsfT4Lj+dKkpqQ== X-Received: by 2002:a17:90a:358:b0:255:63e0:1248 with SMTP id 24-20020a17090a035800b0025563e01248mr83268pjf.0.1685713529220; Fri, 02 Jun 2023 06:45:29 -0700 (PDT) MIME-Version: 1.0 References: <20230531115839.089944915@infradead.org> <20230531124604.341527144@infradead.org> In-Reply-To: <20230531124604.341527144@infradead.org> From: Vincent Guittot Date: Fri, 2 Jun 2023 15:45:18 +0200 Message-ID: Subject: Re: [PATCH 11/15] sched/eevdf: Better handle mixed slice length To: Peter Zijlstra Cc: mingo@kernel.org, linux-kernel@vger.kernel.org, juri.lelli@redhat.com, dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, bristot@redhat.com, corbet@lwn.net, qyousef@layalina.io, chris.hyser@oracle.com, patrick.bellasi@matbug.net, pjt@google.com, pavel@ucw.cz, qperret@google.com, tim.c.chen@linux.intel.com, joshdon@google.com, timj@gnu.org, kprateek.nayak@amd.com, yu.c.chen@intel.com, youssefesmat@chromium.org, joel@joelfernandes.org, efault@gmx.de, tglx@linutronix.de Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 31 May 2023 at 14:47, Peter Zijlstra wrote: > > In the case where (due to latency-nice) there are different request > sizes in the tree, the smaller requests tend to be dominated by the > larger. Also note how the EEVDF lag limits are based on r_max. > > Therefore; add a heuristic that for the mixed request size case, moves > smaller requests to placement strategy #2 which ensures they're > immidiately eligible and and due to their smaller (virtual) deadline > will cause preemption. > > NOTE: this relies on update_entity_lag() to impose lag limits above > a single slice. > > Signed-off-by: Peter Zijlstra (Intel) > --- > kernel/sched/fair.c | 30 ++++++++++++++++++++++++++++++ > kernel/sched/features.h | 1 + > kernel/sched/sched.h | 1 + > 3 files changed, 32 insertions(+) > > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -642,6 +642,7 @@ avg_vruntime_add(struct cfs_rq *cfs_rq, > s64 key = entity_key(cfs_rq, se); > > cfs_rq->avg_vruntime += key * weight; > + cfs_rq->avg_slice += se->slice * weight; > cfs_rq->avg_load += weight; > } > > @@ -652,6 +653,7 @@ avg_vruntime_sub(struct cfs_rq *cfs_rq, > s64 key = entity_key(cfs_rq, se); > > cfs_rq->avg_vruntime -= key * weight; > + cfs_rq->avg_slice -= se->slice * weight; > cfs_rq->avg_load -= weight; > } > > @@ -4908,6 +4910,21 @@ static inline void update_misfit_status( > > #endif /* CONFIG_SMP */ > > +static inline bool > +entity_has_slept(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) > +{ > + u64 now; > + > + if (!(flags & ENQUEUE_WAKEUP)) > + return false; > + > + if (flags & ENQUEUE_MIGRATED) > + return true; > + > + now = rq_clock_task(rq_of(cfs_rq)); > + return (s64)(se->exec_start - now) >= se->slice; > +} > + > static void > place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) > { > @@ -4930,6 +4947,19 @@ place_entity(struct cfs_rq *cfs_rq, stru > lag = se->vlag; > > /* > + * For latency sensitive tasks; those that have a shorter than > + * average slice and do not fully consume the slice, transition > + * to EEVDF placement strategy #2. > + */ > + if (sched_feat(PLACE_FUDGE) && > + (cfs_rq->avg_slice > se->slice * cfs_rq->avg_load) && > + entity_has_slept(cfs_rq, se, flags)) { > + lag += vslice; > + if (lag > 0) > + lag = 0; This PLACE_FUDGE looks quite not a good heuristic because it breaks the better fair sharing of cpu bandwidth that EEVDF is supposed to bring. Furthermore, it breaks the isolation between cpu bandwidth and latency because playing with latency_nice will impact your cpu bandwidth > + } > + > + /* > * If we want to place a task and preserve lag, we have to > * consider the effect of the new entity on the weighted > * average and compensate for this, otherwise lag can quickly > --- a/kernel/sched/features.h > +++ b/kernel/sched/features.h > @@ -5,6 +5,7 @@ > * sleep+wake cycles. EEVDF placement strategy #1, #2 if disabled. > */ > SCHED_FEAT(PLACE_LAG, true) > +SCHED_FEAT(PLACE_FUDGE, true) > SCHED_FEAT(PLACE_DEADLINE_INITIAL, true) > > /* > --- a/kernel/sched/sched.h > +++ b/kernel/sched/sched.h > @@ -555,6 +555,7 @@ struct cfs_rq { > unsigned int idle_h_nr_running; /* SCHED_IDLE */ > > s64 avg_vruntime; > + u64 avg_slice; > u64 avg_load; > > u64 exec_clock; > >