From nobody Sun Oct 5 05:31:09 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (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 7E3651DE3BE for ; Sat, 9 Aug 2025 05:08:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754716112; cv=none; b=PThukVAMb7sFuKxVcgD3wTM4phVJ8rI9r7+ebpAt9DmMUXFw/IDfhBgJzVDETnMraJUzTpjxdg0CH+MqsJFdZpG0+0YGabzIwZ03oS5dGUCpiuwcqMBi79EXkvVi691ZUTMUjUdIFwJpzWnQscUTpYi1EC8GJgP4BnZ2xG+wmR8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754716112; c=relaxed/simple; bh=LDYuA5WJyjvULccdhS0DHdWu2p7tGoJ/eeAWhiaAlrg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=bj8SEXlQMrLRUboVVGnQOu9JBe5g36Sf1XMNZ4Fxig9ZZalYOFEmmdY0+oe5Ky5U018MFmBrwaWfJieFQcobideyIOiTbWBmhitES6gj23mv2S9buVmE5umygmQde5ClZGVf904vuEv77RefIPDld9g1BbkRQFkgRCwN1dgJYBw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Yz3P0As2; arc=none smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Yz3P0As2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754716109; x=1786252109; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=LDYuA5WJyjvULccdhS0DHdWu2p7tGoJ/eeAWhiaAlrg=; b=Yz3P0As2P7sAAeLgT7nQe+nKKbEUL/+9rKdSGXrRCerJoyPyZVJiAIca rTCc2mIWo0r7xKXHBwJCzl+lhPLNxfq7ThXFDqw/086ptM6gsSmcdBYFy 0XG6Bpx4G8F6WIlomNDg2uKFh3+Gf6iv4ohkTrkI1AR9d2HRIWlbSXqPg gjIc3qKxMHdoEmw84F/oRaqsVQVLHKyRLGcXSUZ869pJdp3tCl5EFYIHx RipzC73I4/a7J8WSfr1XW9s1QojcqMVZE0c1LndRlkFmT99Paa711cvo0 L3/AK8mOeiqf6B9FcyzKS+XWq8jtfhVABayP9NRmDhXta4Wem5Y5cg2O/ Q==; X-CSE-ConnectionGUID: 1ql6YZT/RpyNFYw0G8nvRg== X-CSE-MsgGUID: Py+W8Q8/QNGIYDmbtHMFoQ== X-IronPort-AV: E=McAfee;i="6800,10657,11515"; a="57019866" X-IronPort-AV: E=Sophos;i="6.17,278,1747724400"; d="scan'208";a="57019866" Received: from fmviesa005.fm.intel.com ([10.60.135.145]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Aug 2025 22:08:29 -0700 X-CSE-ConnectionGUID: IcQ9RT+CQgWiji82ikx4LA== X-CSE-MsgGUID: ojuGhmoFTkKNKnNcd1Z5hA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,278,1747724400"; d="scan'208";a="169704810" Received: from chenyu-dev.sh.intel.com ([10.239.62.107]) by fmviesa005.fm.intel.com with ESMTP; 08 Aug 2025 22:08:23 -0700 From: Chen Yu To: Peter Zijlstra , Ingo Molnar , K Prateek Nayak , "Gautham R . Shenoy" Cc: Vincent Guittot , Juri Lelli , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Libo Chen , Madadi Vineeth Reddy , Hillf Danton , Shrikanth Hegde , Jianyong Wu , Yangyu Chen , Tingyin Duan , Vern Hao , Len Brown , Tim Chen , Aubrey Li , Zhao Liu , Chen Yu , Chen Yu , linux-kernel@vger.kernel.org Subject: [RFC PATCH v4 05/28] sched: Add hysteresis to switch a task's preferred LLC Date: Sat, 9 Aug 2025 13:02:18 +0800 Message-Id: X-Mailer: git-send-email 2.25.1 In-Reply-To: References: 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: Tim Chen Switching a process's preferred LLC generates lots of task migrations across LLCs. To avoid frequent switches of home LLC, implement the following policy: 1. Require a 2x occ change threshold to switch preferred LLC 2. Don't discard preferred LLC for a task Signed-off-by: Tim Chen --- kernel/sched/fair.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index a7be5c5ecba3..9e3c6f0eb934 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -1175,6 +1175,14 @@ static s64 update_curr_se(struct rq *rq, struct sche= d_entity *curr) #define EPOCH_PERIOD (HZ/100) /* 10 ms */ #define EPOCH_OLD 5 /* 50 ms */ =20 +static int llc_id(int cpu) +{ + if (cpu < 0) + return -1; + + return per_cpu(sd_llc_id, cpu); +} + void mm_init_sched(struct mm_struct *mm, struct mm_sched __percpu *_pcpu_s= ched) { unsigned long epoch; @@ -1307,6 +1315,7 @@ static void __no_profile task_cache_work(struct callb= ack_head *work) struct task_struct *p =3D current; struct mm_struct *mm =3D p->mm; unsigned long m_a_occ =3D 0; + unsigned long last_m_a_occ =3D 0; int cpu, m_a_cpu =3D -1; cpumask_var_t cpus; =20 @@ -1345,11 +1354,13 @@ static void __no_profile task_cache_work(struct cal= lback_head *work) per_cpu(sd_llc_id, i), occ, m_occ, m_cpu, nr); } =20 - a_occ /=3D nr; + // a_occ /=3D nr; if (a_occ > m_a_occ) { m_a_occ =3D a_occ; m_a_cpu =3D m_cpu; } + if (llc_id(cpu) =3D=3D llc_id(mm->mm_sched_cpu)) + last_m_a_occ =3D a_occ; =20 trace_printk("(%d) a_occ: %ld m_a_occ: %ld\n", per_cpu(sd_llc_id, cpu), a_occ, m_a_occ); @@ -1363,13 +1374,10 @@ static void __no_profile task_cache_work(struct cal= lback_head *work) } } =20 - /* - * If the max average cache occupancy is 'small' we don't care. - */ - if (m_a_occ < (NICE_0_LOAD >> EPOCH_OLD)) - m_a_cpu =3D -1; - - mm->mm_sched_cpu =3D m_a_cpu; + if (m_a_occ > (2 * last_m_a_occ)) { + /* avoid the bouncing of mm_sched_cpu */ + mm->mm_sched_cpu =3D m_a_cpu; + } =20 free_cpumask_var(cpus); } --=20 2.25.1