From nobody Mon Feb 9 17:36:58 2026 Received: from mail-10627.protonmail.ch (mail-10627.protonmail.ch [79.135.106.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A862F1EEA4A for ; Wed, 23 Apr 2025 00:20:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.135.106.27 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745367633; cv=none; b=r6ak/ZM8u43Sdqr/nzHT+jbfOhOLmsjQq1BlEZsBXr8wdWLyRG6USjqtCwkU6gA8X1tR4B7osVD+JfxvJeWln535c7ddkTL+Q1vxH6EmTayls9pslHQFDjrGyxpQ+p4ocP6BrhmLQkiFE3KXhf7dygjDI4zE2kiQDHMtYfl3hiE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745367633; c=relaxed/simple; bh=Rj+1L7wiGc50aCgbicmrIfLIlsPYyFqQnB3WkNjAi7w=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=rLFaSEFjrVgBXzmlPB3w9ECYiRxOvlER3fdxRCLfvtH7OZqAduGEmwhUisROeENyHH9YDZ/Bstjd30iBYb79qsH29JaKg6TAiCyntKoESVS8wuxfXnv9u3roNiZrlx2SP6lUg+DuPsvzo+XL2uHNAJFAGN9wo5YA9IlUyK3jLfI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gianis.ca; spf=pass smtp.mailfrom=gianis.ca; dkim=pass (2048-bit key) header.d=gianis.ca header.i=@gianis.ca header.b=hFgYO+g1; arc=none smtp.client-ip=79.135.106.27 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gianis.ca Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gianis.ca Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gianis.ca header.i=@gianis.ca header.b="hFgYO+g1" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gianis.ca; s=protonmail; t=1745367629; x=1745626829; bh=qWMVyorMyU7WrTA+bky3Xgb1ylZ1FY0Pzqsqe9JTPKI=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post; b=hFgYO+g17Z7f0z7U1SH712Qf0n/1MSMi9uNpqT1n0hSAFpeyxvN+c9R1CVG5WSvHG QzuhCt9hAdkw6g7HB5o1eEIHuKmYX6MTY+i8UfgJU7QL4vIvMHnz2vaVPOvwAKWVVq ZXsX8kXSLjNLevDd4YHuDABEgOorG4NdfreLWCGL9G8rhsqAV6mhrlBW14spEcI3fY vTz/qQ+J8HBCPII1Qk9zGTZW/MDlIEt60nOhX5LHg7yY6B+09AisDu5IOkPZqd1RX9 FvHN1fQavk4CU8gFsl8lOxlgGB8pd57JzDEQlDwUEiTZUPUnz38+RC52Y0fV8if8u7 hoC+2jJlbN8EA== Date: Wed, 23 Apr 2025 00:20:22 +0000 To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider From: "Dhaval Giani (AMD)" Cc: linux-kernel@vger.kernel.org, Dhaval Giani , Gautham Shenoy , K Prateek Nayak , "Dhaval Giani (AMD)" Subject: [PATCH 2/3] sched/fair: Add a test to test that a task selected to run has positive lag Message-ID: <20250422-b4-eevdf-tests-v1-post-v1-2-35d158254c72@gianis.ca> In-Reply-To: <20250422-b4-eevdf-tests-v1-post-v1-0-35d158254c72@gianis.ca> References: <20250422-b4-eevdf-tests-v1-post-v1-0-35d158254c72@gianis.ca> Feedback-ID: 128275035:user:proton X-Pm-Message-ID: a9caaeb7b2dd126acf537f9ed036f7b74efe0297 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Lemma 1 from the original EEVDF paper says that any task that has a positive lag is eligible to run. This test tests the opposite - any task that is picked to run must have a positive lag for it to be eligible to run. To: Ingo Molnar To: Peter Zijlstra To: Juri Lelli To: Vincent Guittot To: Dietmar Eggemann To: Steven Rostedt To: Ben Segall To: Mel Gorman To: Valentin Schneider Cc: linux-kernel@vger.kernel.org Cc: Dhaval Giani Cc: Gautham Shenoy Cc: K Prateek Nayak Signed-off-by: Dhaval Giani (AMD) --- kernel/sched/eevdf-tests.c | 41 +++++++++++++++++++++++++++++++++++++++++ kernel/sched/fair.c | 2 ++ kernel/sched/sched.h | 2 ++ 3 files changed, 45 insertions(+) diff --git a/kernel/sched/eevdf-tests.c b/kernel/sched/eevdf-tests.c index 3bc016d3025733e53f586e30fcd31f650156d47e..8532330769bcc93dbf9cd98ebba= 75c838f62c045 100644 --- a/kernel/sched/eevdf-tests.c +++ b/kernel/sched/eevdf-tests.c @@ -18,10 +18,51 @@ =20 #ifdef CONFIG_SCHED_EEVDF_TESTING =20 +/* + * Test parameters + */ +bool eevdf_positive_lag_test; +u8 eevdf_positive_lag_count =3D 10; + static struct dentry *debugfs_eevdf_testing; void debugfs_eevdf_testing_init(struct dentry *debugfs_sched) { debugfs_eevdf_testing =3D debugfs_create_dir("eevdf-testing", debugfs_sch= ed); =20 + debugfs_create_bool("eevdf_positive_lag_test", 0700, + debugfs_eevdf_testing, &eevdf_positive_lag_test); + debugfs_create_u8("eevdf_positive_lag_test_count", 0600, + debugfs_eevdf_testing, &eevdf_positive_lag_count); + } + +void test_eevdf_positive_lag(struct cfs_rq *cfs, struct sched_entity *se) +{ + static int eevdf_positive_lag_test_counter; + u64 eevdf_average_vruntime; + + if (!eevdf_positive_lag_test) + return; + + if (!se || !cfs) + return; + + eevdf_average_vruntime =3D avg_vruntime(cfs); + eevdf_positive_lag_test_counter++; + + if (se->vruntime > eevdf_average_vruntime) { + trace_printk("FAIL: Lemma 1 failed - selected task has negative lag\n"); + eevdf_positive_lag_test =3D 0; + eevdf_positive_lag_test_counter =3D 0; + return; + } + + if (eevdf_positive_lag_test_counter > eevdf_positive_lag_count) { + eevdf_positive_lag_test =3D 0; + eevdf_positive_lag_test_counter =3D 0; + trace_printk("PASS: At least %u selected tasks had positive lag\n", + eevdf_positive_lag_count); + } +} + #endif /* CONFIG_SCHED_EEVDF_TESTING */ diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index eb5a2572b4f8b6b5517befc299312b6ae7476e88..924d9d35c2aa937bc0f4ca9565b= a774397b90f77 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -980,6 +980,8 @@ static struct sched_entity *pick_eevdf(struct cfs_rq *c= fs_rq) if (!best || (curr && entity_before(curr, best))) best =3D curr; =20 + test_eevdf_positive_lag(cfs_rq, best); + return best; } =20 diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 09cefe2aa871bbd533a413c76026895e969a58e7..5ad5e033e1c81167b712ab176d4= d55e6b5d82d06 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -3990,8 +3990,10 @@ void sched_enq_and_set_task(struct sched_enq_and_set= _ctx *ctx); =20 #ifdef CONFIG_SCHED_EEVDF_TESTING void debugfs_eevdf_testing_init(struct dentry *debugfs_sched); +void test_eevdf_positive_lag(struct cfs_rq *cfs, struct sched_entity *se); #else /* CONFIG_SCHED_EEVDF_TESTING */ static inline void init_eevdf_testing_debugfs(struct dentry *debugfs_sched= ) {} +static inline void test_eevdf_positive_lag(struct cfs_rq *cfs, struct sche= d_entity *se) {} #endif /* CONFIG_SCHED_EEVDF_TESTING */ =20 #endif /* _KERNEL_SCHED_SCHED_H */ --=20 2.49.0