From nobody Wed Feb 5 20:31:29 2025 Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 662431854 for ; Mon, 23 Dec 2024 09:15:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734945326; cv=none; b=UMdQPROOLUIyepOn4jgiIOJzNYGaJRb2vsj3ugYybmlJIzEghxuqykrEOhdDL8gR1OAQzZb/mnytWMkgrn1N9iNWV0EKpUnums7R3icmLoCURPH6HrHPZkDsrg6JnpsZQWn33Fluw02SLKnJCXoXKZNEUVUr0EsDlr02oLp3bmg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734945326; c=relaxed/simple; bh=79ayLJjV1O8BKVY6+sVyy8dhdhBRi02XEq61IIgAm0Q=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=NSIhb8Yrv/UpEsa64c1EfHom/z40Z+OOt4+HVpi4rbaEWEpy0rKQoEOl3cTtpyydxINQt4IWKfOQFcy/NKoz+HdEL48gQ71Gk0fzjsDXLC4wv+l/CtGXVPDv9b9pV75SQPSlIrXzLL49wVZafMFLA3Bq6rU9uYp9L+wVaK1Qi5w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=SupL1mqy; arc=none smtp.client-ip=209.85.210.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SupL1mqy" Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-725ed193c9eso3377248b3a.1 for ; Mon, 23 Dec 2024 01:15:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734945323; x=1735550123; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=Bk+k3GlHH1p7eeFyK4ASYIfDMRgVy9CYsyZrVjJFdF0=; b=SupL1mqy0wPwemRQeFFB4QEzz+ym7GAM/+9t96XrBwPeu/a4uL6RAT0ULNlidLj1j1 uT4FCGr0dNokfp+W4toH+XH0o/lI0RBorHJxeFtlGl+bhpSFbyXCQhrDWKSLLeALwSlF il/zqOpcEnf0x6PpNIG/WPsCfc7bq8xwCTjGR+H7wCDYu1Rx5NyDBs7CqQoSBmbucLVk t3PFVl1yTNFHVN3ai9p3wiaIbgUf84OsEmKXRwhSclDJGortnbxAm0MTeJTIQqq6HQjQ vcu7VZZ9mI4dlyt8x77oOZ9xxjuDBcP2WYnQoVa0Y9uM/hnMDuO2YNx2dfHuBd10DmRn vlpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734945323; x=1735550123; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Bk+k3GlHH1p7eeFyK4ASYIfDMRgVy9CYsyZrVjJFdF0=; b=kz5rZ/K0ElbM/pgJWOB6iLK5ACvrl3FYH/+V8cxJxXqo96G9SCtLMd0N8phOhTL+Sg KD34H21AAGzMYi0BrjlF0letfotEfv/toKDMmGu/fmGaZXkEElpTTa4YiSyqkrlFc0cH 7CdMj/rQVDuCQnOTRnXfwT3m1+FjnJYup0hNb5mOarz+eGiT4UCSWlxKiRR35u9/IEmX ZrO5mzVuvhZfBYisOzupEGECA+Twx/AEO2FEAymV1UvLy5KhqUzNZKskIdc0mgoLYTjU w1M9vkMECFMz75o8GGOxMsSBaE0XtkgEy2G3zlSwTnjP3PS9Pqtcf1cSs0LgXVcq6Tpj t5sw== X-Gm-Message-State: AOJu0YxCb97h+7v8Ojji5c6Z4I8koecLwaNayd+/ZILMLUbxyHbM5ICv QWDtXi8P3nz6rH5lvMmW0uVwJ4ALo+avGR4g2/GKU8hL4g3uBIu8 X-Gm-Gg: ASbGncvaE/kJJ7Yip1w8ntHej/QMa6R0uSF9GwuX94LKjL1KJGgbgPJBsl4ILei+K/6 9ptbiF1e/iDCilTMqWlbc8q37IDwvBKbxGPkhEAVBlVCKU3qDYawuDP3lY/aIHzJ71JQ6ULN33T dKPs4nPgDbmvt0rTJRD7XmBNFF/jLnG4SwFp0E0CuyAl9ep/I6miO1ZRiyESDaE6jt7CCwKZXdL 1PEttmMxQSn/2ob4AaHF169cSjzIhpYykeSbxrjoltgTkYLwMHKURAdqhheSgK5WUOip/abcGah PvbUdCWQag== X-Google-Smtp-Source: AGHT+IERfJLxlOpa9YVUUAPG+pq0dWOr143cXdzNqyZcIMkAtJDjH4Rux8DV5RS0qOXxy7efDM5ilw== X-Received: by 2002:a05:6a00:414a:b0:725:f056:19b1 with SMTP id d2e1a72fcca58-72abddbe05emr18103639b3a.13.1734945323337; Mon, 23 Dec 2024 01:15:23 -0800 (PST) Received: from localhost.localdomain ([103.165.80.178]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-842dc1401dasm6881608a12.55.2024.12.23.01.15.19 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 23 Dec 2024 01:15:22 -0800 (PST) From: Hao Jia To: mingo@redhat.com, peterz@infradead.org, mingo@kernel.org, juri.lelli@redhat.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, vschneid@redhat.com Cc: linux-kernel@vger.kernel.org, Hao Jia Subject: [PATCH v2] sched/core: Prioritize migrating eligible tasks in sched_balance_rq() Date: Mon, 23 Dec 2024 17:14:46 +0800 Message-Id: <20241223091446.90208-1-jiahao.kernel@gmail.com> X-Mailer: git-send-email 2.39.2 (Apple Git-143) 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" From: Hao Jia When the PLACE_LAG scheduling feature is enabled and dst_cfs_rq->nr_queued is greater than 1, if a task is ineligible (lag < 0) on the source cpu runqueue, it will also be ineligible when it is migrated to the destination cpu runqueue. Because we will keep the original equivalent lag of the task in place_entity(). So if the task was ineligible before, it will still be ineligible after migration. So in sched_balance_rq(), we prioritize migrating eligible tasks, and we soft-limit ineligible tasks, allowing them to migrate only when nr_balance_failed is non-zero to avoid load-balancing trying very hard to balance the load. Below are some benchmark test results. From my test results, this patch shows a slight improvement on hackbench. Benchmark =3D=3D=3D=3D=3D=3D=3D=3D=3D All of the benchmarks are done inside a normal cpu cgroup in a clean environment with cpu turbo disabled, and test machine is: Single NUMA machine model is 13th Gen Intel(R) Core(TM) i7-13700, 12 Core/24 HT. Based on master b86545e02e8c. Results =3D=3D=3D=3D=3D=3D=3D hackbench-process-pipes vanilla patched Amean 1 0.5837 ( 0.00%) 0.5733 ( 1.77%) Amean 4 1.4423 ( 0.00%) 1.4503 ( -0.55%) Amean 7 2.5147 ( 0.00%) 2.4773 ( 1.48%) Amean 12 3.9347 ( 0.00%) 3.8880 ( 1.19%) Amean 21 5.3943 ( 0.00%) 5.3873 ( 0.13%) Amean 30 6.7840 ( 0.00%) 6.6660 ( 1.74%) Amean 48 9.8313 ( 0.00%) 9.6100 ( 2.25%) Amean 79 15.4403 ( 0.00%) 14.9580 ( 3.12%) Amean 96 18.4970 ( 0.00%) 17.9533 ( 2.94%) hackbench-process-sockets vanilla patched Amean 1 0.6297 ( 0.00%) 0.6223 ( 1.16%) Amean 4 2.1517 ( 0.00%) 2.0887 ( 2.93%) Amean 7 3.6377 ( 0.00%) 3.5670 ( 1.94%) Amean 12 6.1277 ( 0.00%) 5.9290 ( 3.24%) Amean 21 10.0380 ( 0.00%) 9.7623 ( 2.75%) Amean 30 14.1517 ( 0.00%) 13.7513 ( 2.83%) Amean 48 24.7253 ( 0.00%) 24.2287 ( 2.01%) Amean 79 43.9523 ( 0.00%) 43.2330 ( 1.64%) Amean 96 54.5310 ( 0.00%) 53.7650 ( 1.40%) tbench4 Throughput vanilla patched Hmean 1 255.97 ( 0.00%) 275.01 ( 7.44%) Hmean 2 511.60 ( 0.00%) 544.27 ( 6.39%) Hmean 4 996.70 ( 0.00%) 1006.57 ( 0.99%) Hmean 8 1646.46 ( 0.00%) 1649.15 ( 0.16%) Hmean 16 2259.42 ( 0.00%) 2274.35 ( 0.66%) Hmean 32 4725.48 ( 0.00%) 4735.57 ( 0.21%) Hmean 64 4411.47 ( 0.00%) 4400.05 ( -0.26%) Hmean 96 4284.31 ( 0.00%) 4267.39 ( -0.39%) Signed-off-by: Hao Jia Suggested-by: Peter Zijlstra (Intel) --- Previous discussion link: https://lore.kernel.org/all/20241128084858.25220-= 1-jiahao.kernel@gmail.com Link to v1: https://lore.kernel.org/all/20241218080203.80556-1-jiahao.kerne= l@gmail.com v1 to v2: - Modify dst_cfs_rq->nr_running to dst_cfs_rq->nr_queued to resolve conflicts with commit 736c55a02c47 ("sched/fair: Rename cfs_rq.nr_running into nr_queued"). kernel/sched/fair.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 5599b0c1ba9b..c884bf631e66 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -9396,6 +9396,30 @@ static inline int migrate_degrades_locality(struct t= ask_struct *p, } #endif =20 +/* + * Check whether the task is ineligible on the destination cpu + * + * When the PLACE_LAG scheduling feature is enabled and + * dst_cfs_rq->nr_queued is greater than 1, if the task + * is ineligible, it will also be ineligible when + * it is migrated to the destination cpu. + */ +static inline int task_is_ineligible_on_dst_cpu(struct task_struct *p, int= dest_cpu) +{ + struct cfs_rq *dst_cfs_rq; + +#ifdef CONFIG_FAIR_GROUP_SCHED + dst_cfs_rq =3D task_group(p)->cfs_rq[dest_cpu]; +#else + dst_cfs_rq =3D &cpu_rq(dest_cpu)->cfs; +#endif + if (sched_feat(PLACE_LAG) && dst_cfs_rq->nr_queued && + !entity_eligible(task_cfs_rq(p), &p->se)) + return 1; + + return 0; +} + /* * can_migrate_task - may task p from runqueue rq be migrated to this_cpu? */ @@ -9420,6 +9444,16 @@ int can_migrate_task(struct task_struct *p, struct l= b_env *env) if (throttled_lb_pair(task_group(p), env->src_cpu, env->dst_cpu)) return 0; =20 + /* + * We want to prioritize the migration of eligible tasks. + * For ineligible tasks we soft-limit them and only allow + * them to migrate when nr_balance_failed is non-zero to + * avoid load-balancing trying very hard to balance the load. + */ + if (!env->sd->nr_balance_failed && + task_is_ineligible_on_dst_cpu(p, env->dst_cpu)) + return 0; + /* Disregard percpu kthreads; they are where they need to be. */ if (kthread_is_per_cpu(p)) return 0; --=20 2.34.1