From nobody Sun Dec 14 08:08:29 2025 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) (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 C0E341DE881 for ; Thu, 16 Jan 2025 15:16:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.60.130.6 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737040576; cv=none; b=N/7jRsEoDTUgU3bjNQL1erQElhita+OX8opjDGSLCTCaVWpQR/e58goY8JJTgByBx98Cd8yks1EqUFx67Q7M9AnJofa3Uqgeqaq/KhlnW9zFWGuRAgi1QHW0+47ShlR9etdZRXCVaPOxK0k3QwSEDglRmeIhgh8nIPIERAhZVfY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737040576; c=relaxed/simple; bh=CxMFrxvZdD1BG0L9lhwrCPLt9CZkWaxxeARItpXOieI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jUBG9tCkIpqC9+k91iXcORl1VXHJ4CdfmgTXMATXkcvAoiRsnfQ5ghyNwuKiMzyphQSBcsKsIIjSSu/5jYzGsKbDp18Jwrnhp9FNMuu6yFDjswMXUGjnMav1StARbpROK2h7jq9pWYpTlpGu0Xayj2lRfGnstvSMBYIzrMBzZgI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=W5CeqspK; arc=none smtp.client-ip=178.60.130.6 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="W5CeqspK" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=mlc6rEdNoEBbfgryDkesgjOBU4Rz+ZCzdTQtrqYi2Aw=; b=W5CeqspKMYEGaNFwYA2keyXfiG w/qS+On7D3nx8qVKC+PPKHGEPEDJR2HQk6Zkv8P+L4WS4qNzPwL7OfAGZOQM+HSOOkHT12HHPUtTU 2CgHMvh8J8fiQEPcu5N1oNBlZ6Qr6QyBn2nkFJh+iUP36FcnNepAEl2Kgl7KKIz8Of/BvtKqgwGTf i/YJkShgCc5ukdrHrtfmZvCqwb9uwthqX5IIqAg4CLcA/gzjI0m1dk6+VpTzJ5J9KEggRV+CkmA1D XRkhVjRpa0vHpXoYNseKa6FIaQeITY2pYL7ex0vpputMIK3ligd6+fYzWjfFVYDRjNQmddxGk/+Jo FwVfvSng==; Received: from [58.29.143.236] (helo=localhost) by fanzine2.igalia.com with utf8esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1tYRbJ-00Gi0e-3e; Thu, 16 Jan 2025 16:16:05 +0100 From: Changwoo Min To: tj@kernel.org, void@manifault.com, arighi@nvidia.com Cc: kernel-dev@igalia.com, linux-kernel@vger.kernel.org, Changwoo Min Subject: [PATCH 1/7] sched_ext: Implement event counter infrastructure and add an event Date: Fri, 17 Jan 2025 00:15:37 +0900 Message-ID: <20250116151543.80163-2-changwoo@igalia.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250116151543.80163-1-changwoo@igalia.com> References: <20250116151543.80163-1-changwoo@igalia.com> 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" Collect the statistics of specific types of behavior in the sched_ext core, which are not easily visible but still interesting to an scx scheduler. Also, add a core event, SCX_EVENT_INVAL_SELECT_CPU, which represents how many times ops.select_cpu() returns a CPU that the task can't use. Signed-off-by: Changwoo Min --- kernel/sched/ext.c | 120 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 118 insertions(+), 2 deletions(-) diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c index 0bcdd1a31676..7e12d5b8322e 100644 --- a/kernel/sched/ext.c +++ b/kernel/sched/ext.c @@ -1458,6 +1458,66 @@ static struct task_struct *scx_task_iter_next_locked= (struct scx_task_iter *iter) return p; } =20 +/* + * Collection of event counters. + */ +struct scx_event_stat { + /* + * If ops.select_cpu() returns a CPU which can't be used by the task, + * the core scheduler code silently picks a fallback CPU. + */ + u64 INVAL_SELECT_CPU; +}; + +#define SCX_EVENT_IDX(e) (offsetof(struct scx_event_stat, e)/sizeof(u64)) +#define SCX_EVENT_END_IDX() (sizeof(struct scx_event_stat)/sizeof(u64)) +#define SCX_EVENT_DEFINE(e) SCX_EVENT_##e =3D SCX_EVENT_IDX(e) + +/* + * Types of event counters. + */ +enum scx_event_kind { + SCX_EVENT_BEGIN =3D 0, + SCX_EVENT_DEFINE(INVAL_SELECT_CPU), + SCX_EVENT_END =3D SCX_EVENT_END_IDX(), +}; + +static const char *scx_event_stat_str[] =3D { + [SCX_EVENT_INVAL_SELECT_CPU] =3D "invalid_select_cpu", +}; + +/* + * The event counter is organized by a per-CPU variable to minimize the + * accounting overhead without synchronization. A system-wide view on the + * event counter is constructed when requested by scx_bpf_get_event_stat(). + */ +static DEFINE_PER_CPU(struct scx_event_stat, event_stats); + +/** + * scx_add_event - Increase an event counter for 'name' by 'cnt' + * @name: an event name defined in struct scx_event_stat + * @cnt: the number of the event occured + */ +#define scx_add_event(name, cnt) ({ \ + struct scx_event_stat *__e; \ + __e =3D get_cpu_ptr(&event_stats); \ + WRITE_ONCE(__e->name, __e->name+ (cnt)); \ + put_cpu_ptr(&event_stats); \ +}) + + +/** + * scx_read_event_kind - Read an event from 'e' with 'kind' + * @e: a pointer to an event collected by scx_bpf_event_stat() + * @kine: an event type defined in scx_event_kind + */ +#define scx_read_event_kind(e, kind) ({ \ + u64 *__e64 =3D (u64 *)(e); \ + __e64[kind]; \ +}) + +static void scx_bpf_event_stat(struct scx_event_stat *event, size_t event_= _sz); + static enum scx_ops_enable_state scx_ops_enable_state(void) { return atomic_read(&scx_ops_enable_state_var); @@ -3607,8 +3667,10 @@ static int select_task_rq_scx(struct task_struct *p,= int prev_cpu, int wake_flag *ddsp_taskp =3D NULL; if (ops_cpu_valid(cpu, "from ops.select_cpu()")) return cpu; - else + else { + scx_add_event(INVAL_SELECT_CPU, 1); return prev_cpu; + } } else { bool found; s32 cpu; @@ -5053,6 +5115,15 @@ static void scx_ops_disable_workfn(struct kthread_wo= rk *work) scx_rq_clock_invalidate(rq); } =20 + /* + * Clear event counters so the next scx scheduler always gets + * fresh event counter values. + */ + for_each_possible_cpu(cpu) { + struct scx_event_stat *e =3D per_cpu_ptr(&event_stats, cpu); + memset(e, 0, sizeof(*e)); + } + /* no task is on scx, turn off all the switches and flush in-progress cal= ls */ static_branch_disable(&__scx_ops_enabled); for (i =3D SCX_OPI_BEGIN; i < SCX_OPI_END; i++) @@ -5309,9 +5380,10 @@ static void scx_dump_state(struct scx_exit_info *ei,= size_t dump_len) .at_jiffies =3D jiffies, }; struct seq_buf s; + struct scx_event_stat event; unsigned long flags; char *buf; - int cpu; + int cpu, kind; =20 spin_lock_irqsave(&dump_lock, flags); =20 @@ -5417,6 +5489,16 @@ static void scx_dump_state(struct scx_exit_info *ei,= size_t dump_len) rq_unlock(rq, &rf); } =20 + dump_newline(&s); + dump_line(&s, "Event counters"); + dump_line(&s, "--------------"); + + scx_bpf_event_stat(&event, sizeof(event)); + for (kind =3D SCX_EVENT_BEGIN; kind < SCX_EVENT_END; kind++) { + dump_line(&s, "%25s : %llu", scx_event_stat_str[kind], + scx_read_event_kind(&event, kind)); + } + if (seq_buf_has_overflowed(&s) && dump_len >=3D sizeof(trunc_marker)) memcpy(ei->dump + dump_len - sizeof(trunc_marker), trunc_marker, sizeof(trunc_marker)); @@ -7720,6 +7802,39 @@ __bpf_kfunc u64 scx_bpf_now(void) return clock; } =20 +/* + * scx_bpf_event_stat - Get a system-wide event counter to + * @event: output buffer from a BPF program + * @event__sz: @event len, must end in '__sz'' for the verifier + */ +__bpf_kfunc void scx_bpf_event_stat(struct scx_event_stat *event, + size_t event__sz) +{ + struct scx_event_stat *e; + u64 *event64, *e64; + int cpu, kind, event_end; + + /* + * We cannot entirely trust a BPF-provided size since a BPF program + * might be compiled against a different vmlinux.h, of which + * scx_event_stat would be larger (a newer vmlinux.h) or smaller + * (an older vmlinux.h). Hence, we use the smaller size to avoid + * memory corruption. + */ + event__sz =3D min(event__sz, sizeof(*event)); + event_end =3D event__sz / sizeof(u64); + + event64 =3D (u64 *)event; + memset(event, 0, event__sz); + for_each_possible_cpu(cpu) { + e =3D per_cpu_ptr(&event_stats, cpu); + e64 =3D (u64 *)e; + for (kind =3D 0; kind < event_end; kind++) { + event64[kind] +=3D READ_ONCE(e64[kind]); + } + } +} + __bpf_kfunc_end_defs(); =20 BTF_KFUNCS_START(scx_kfunc_ids_any) @@ -7752,6 +7867,7 @@ BTF_ID_FLAGS(func, scx_bpf_cpu_rq) BTF_ID_FLAGS(func, scx_bpf_task_cgroup, KF_RCU | KF_ACQUIRE) #endif BTF_ID_FLAGS(func, scx_bpf_now) +BTF_ID_FLAGS(func, scx_bpf_event_stat, KF_TRUSTED_ARGS) BTF_KFUNCS_END(scx_kfunc_ids_any) =20 static const struct btf_kfunc_id_set scx_kfunc_set_any =3D { --=20 2.48.1 From nobody Sun Dec 14 08:08:29 2025 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) (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 9F16122C33A for ; Thu, 16 Jan 2025 15:16:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.60.130.6 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737040583; cv=none; b=qo0qzUcUhGX/s3jSC46CSGiL5Z0Pd9XMHqLABE52rIBo5he/0AVi3tqXjXcJ8PfJgUyF943m87fU1/zYtnTn/s/ZAuNLc/uFifUnVz2Izz8afRsl9RtwyaJNNzflz7xl22crCcJpub0YZ9mE2GazwC6M+/yW5gjvZaD4nGbz3oU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737040583; c=relaxed/simple; bh=Oxk+b7RIHWW5PAswDzA8NL2PZ1n/6kQLhYKUbL+pZVA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kspoKe0G5+fjIVLtj0sxeyN40RN5Cs+NkKxYi2iapZbuw9quUaZjSjm3A/pMCaBWmukWwtfErhXBpfcDCN6V828HPuegXYZdh/0NIDi+vdjD5HK6sygB4P1N2ENe59KfRjE8dg/TSGnjM9Px0CE5ewxUAzPy4+pjdfp0M2eMv+g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=Cg8zG7IK; arc=none smtp.client-ip=178.60.130.6 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="Cg8zG7IK" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=12gjMM8R/Ps3EP/oVkUXmP65UiUrMH6+ZbZN7OpoRWM=; b=Cg8zG7IKi210zMbWB+m7hhz7c+ uQ4RGvnnLmurJ9/BrkKEXVwd4X0K8lcoORkLsSGeSW+NyjZHFYPUiO5HbRG7xjj5T71TXy8LduSrf 1WxuockMD0nYdpGOyB8c/diBPKZkMoJpQoUxVzoD+JHm93PNtnNuwBTaLAWa8bvvjyYh7lr6JXrVL U/oM5Q+mkFfog6YvHdMEWDWh/QyRGk3f3AKkXwIwx9TlkLp2AZGHQklfV13igmtIEPBRUDORAfB4W ypILyQ/PsKXl/TYXswxT2fjHthkdiCJWwiKk9Kq//tq9ureHX+emqHrY87Cv/mTs7BWixMUHml11B F+3HZ1EQ==; Received: from [58.29.143.236] (helo=localhost) by fanzine2.igalia.com with utf8esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1tYRbT-00Gi0q-4f; Thu, 16 Jan 2025 16:16:15 +0100 From: Changwoo Min To: tj@kernel.org, void@manifault.com, arighi@nvidia.com Cc: kernel-dev@igalia.com, linux-kernel@vger.kernel.org, Changwoo Min Subject: [PATCH 2/7] sched_ext: Add an event, SCX_EVENT_OFFLINE_LOCAL_DSQ Date: Fri, 17 Jan 2025 00:15:38 +0900 Message-ID: <20250116151543.80163-3-changwoo@igalia.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250116151543.80163-1-changwoo@igalia.com> References: <20250116151543.80163-1-changwoo@igalia.com> 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" Add a core event, SCX_EVENT_OFFLINE_LOCAL_DSQ, which represents how many times a BPF scheduler tries to dispatch to an offlined local DSQ. Signed-off-by: Changwoo Min --- kernel/sched/ext.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c index 7e12d5b8322e..8054e4e5ed0c 100644 --- a/kernel/sched/ext.c +++ b/kernel/sched/ext.c @@ -1467,6 +1467,12 @@ struct scx_event_stat { * the core scheduler code silently picks a fallback CPU. */ u64 INVAL_SELECT_CPU; + + /* + * When dispatching to a local DSQ, the CPU may have gone offline in + * the meantime. In this case, the task is bounced to the global DSQ. + */ + u64 OFFLINE_LOCAL_DSQ; }; =20 #define SCX_EVENT_IDX(e) (offsetof(struct scx_event_stat, e)/sizeof(u64)) @@ -1479,11 +1485,13 @@ struct scx_event_stat { enum scx_event_kind { SCX_EVENT_BEGIN =3D 0, SCX_EVENT_DEFINE(INVAL_SELECT_CPU), + SCX_EVENT_DEFINE(OFFLINE_LOCAL_DSQ), SCX_EVENT_END =3D SCX_EVENT_END_IDX(), }; =20 static const char *scx_event_stat_str[] =3D { [SCX_EVENT_INVAL_SELECT_CPU] =3D "invalid_select_cpu", + [SCX_EVENT_OFFLINE_LOCAL_DSQ] =3D "offline_local_dsq", }; =20 /* @@ -2651,6 +2659,7 @@ static void dispatch_to_local_dsq(struct rq *rq, stru= ct scx_dispatch_q *dst_dsq, if (unlikely(!task_can_run_on_remote_rq(p, dst_rq, true))) { dispatch_enqueue(find_global_dsq(p), p, enq_flags | SCX_ENQ_CLEAR_OPSS); + scx_add_event(OFFLINE_LOCAL_DSQ, 1); return; } =20 --=20 2.48.1 From nobody Sun Dec 14 08:08:29 2025 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) (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 E110522B8CD for ; Thu, 16 Jan 2025 15:16:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.60.130.6 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737040592; cv=none; b=OxxKyM3j1hYl8qoNP4z86v7P9w/Uxfy/jp6gm0gVlzf0F4HDPVWamz2EqGtCjgHVDe+10kuV8BxdFme2Om6PvXFQg1vYu9FB7ZWWWqORFv3xsv/palLoRmvZwtQtuEevJB6t8WPblWMy/q16J4RUwBxPRdhGdjERX1cxlrX78tY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737040592; c=relaxed/simple; bh=/IJH4/RbnwUGtB3Br4x8sBywU5fFRGmSRoYvMNYPEd4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aMElz51cLRb8v2aCxWc4hn6UvVDDUHNuZRZh5kgYjqjO7f7Dv7usRm/7Bk3lc7RelW+p4Yo4OOzoVnrK+WPAbZVpTr1VzCmJKLdi5nvYLfDr4/+JaK+AdpiDomkl9gNa+7cxsmSEdMGwcomXlUSKCCitGNzWTBp2D9AmD7o1jqA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=OYEYBxza; arc=none smtp.client-ip=178.60.130.6 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="OYEYBxza" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=n03m1gDZ+bi2/4h851sCqFa64jr1IiJSC7KZVSMTN6w=; b=OYEYBxzaTe7KmM1EX5OSHrpflW ffWH8kZSJbKQF8X44JDCOuGtAn+gHkbihTSn47XwI8o38nhuAI9GDtACsB4ZPxjF3DhMZPNsWMRZd pWBzhGu31LAoeeoXgtyXUlBNFewMPq2I4Fh0Hcfh6B5JthvhYThtK9Het3pSgqTORkjpbrge6WWzE 0gxlmi4Yx5B2FSav6gWDjvwR/0fHJn/Q8TygR4CIxVJ3DGWV5g7wTpXe0E6qOHcRwXMvodUIsD0Cv s7+0K8+M66r3CZoIUgJxH9xpq+tmLhwrruTdpf+deen9hUIFPz3hOamX98/28Jozk4hfw3bz/pSjg UQ9xOaQw==; Received: from [58.29.143.236] (helo=localhost) by fanzine2.igalia.com with utf8esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1tYRba-00Gi18-K3; Thu, 16 Jan 2025 16:16:23 +0100 From: Changwoo Min To: tj@kernel.org, void@manifault.com, arighi@nvidia.com Cc: kernel-dev@igalia.com, linux-kernel@vger.kernel.org, Changwoo Min Subject: [PATCH 3/7] sched_ext: Add an event, SCX_EVENT_CNTD_RUN_WO_ENQ Date: Fri, 17 Jan 2025 00:15:39 +0900 Message-ID: <20250116151543.80163-4-changwoo@igalia.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250116151543.80163-1-changwoo@igalia.com> References: <20250116151543.80163-1-changwoo@igalia.com> 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" Add a core event, SCX_EVENT_CNTD_RUN_WO_ENQ, which represents how many times a task is continued to run without ops.enqueue() when SCX_OPS_ENQ_LAST is not set. Signed-off-by: Changwoo Min --- kernel/sched/ext.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c index 8054e4e5ed0c..909f12a41934 100644 --- a/kernel/sched/ext.c +++ b/kernel/sched/ext.c @@ -1473,6 +1473,12 @@ struct scx_event_stat { * the meantime. In this case, the task is bounced to the global DSQ. */ u64 OFFLINE_LOCAL_DSQ; + + /* + * If SCX_OPS_ENQ_LAST is not set, the number of times that a task + * continued to run because there were no other tasks on the CPU. + */ + u64 CNTD_RUN_WO_ENQ; }; =20 #define SCX_EVENT_IDX(e) (offsetof(struct scx_event_stat, e)/sizeof(u64)) @@ -1486,12 +1492,14 @@ enum scx_event_kind { SCX_EVENT_BEGIN =3D 0, SCX_EVENT_DEFINE(INVAL_SELECT_CPU), SCX_EVENT_DEFINE(OFFLINE_LOCAL_DSQ), + SCX_EVENT_DEFINE(CNTD_RUN_WO_ENQ), SCX_EVENT_END =3D SCX_EVENT_END_IDX(), }; =20 static const char *scx_event_stat_str[] =3D { [SCX_EVENT_INVAL_SELECT_CPU] =3D "invalid_select_cpu", [SCX_EVENT_OFFLINE_LOCAL_DSQ] =3D "offline_local_dsq", + [SCX_EVENT_CNTD_RUN_WO_ENQ] =3D "cntd_run_wo_enq", }; =20 /* @@ -2914,6 +2922,7 @@ static int balance_one(struct rq *rq, struct task_str= uct *prev) if (prev_on_rq && (!static_branch_unlikely(&scx_ops_enq_last) || scx_rq_bypassing(rq))) { rq->scx.flags |=3D SCX_RQ_BAL_KEEP; + scx_add_event(CNTD_RUN_WO_ENQ, 1); goto has_tasks; } rq->scx.flags &=3D ~SCX_RQ_IN_BALANCE; --=20 2.48.1 From nobody Sun Dec 14 08:08:29 2025 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) (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 80DA922BABD for ; Thu, 16 Jan 2025 15:16:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.60.130.6 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737040599; cv=none; b=MSfLOO44DD99ubLahk5155SEaVcGPp9LH+P2J1mG7/fsNObbu5Nwl11iEYwyfon5TM6szF/nUcZYabMd4iIqgPMGYhCnoRSxqh5/m+UT9SiUkBvAZBxc3gtX0qHPa0iHypTj+lPC1Mi68b7PDZJIv6JE3GWwrexthcAijsDKFHI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737040599; c=relaxed/simple; bh=mDexqtP1CKhLYJqyg8KAmBjz5BTcln3nJtCMXtwB62c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YuRKwiziXz6XcEURoE+A5sjktO2rqDfe1Vjy8CvxhyArKLY1Rt8qecsSSHDLzmVSC6FfJKkp+tL60p1OytdAvOWJO4nXo1tkkAwCN8iLIPzO23Rt48qSqG2boLf1Vn7rDXZnymqSBlRqTTILTXAsxxt/XT2Dkxds4N3ZukOY2lg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=D/Uyvxn+; arc=none smtp.client-ip=178.60.130.6 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="D/Uyvxn+" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=T1oVSiH38u9Fe7c5Be2JoYpziGzuwnS/eW1jCX6B2H8=; b=D/Uyvxn+PHQjZcNNtnTynAztHj qo0Lf4uWBhRcSRo3Mth+0WiviA9jL4faDeSYYLiFzY+REMb2wa9qZmac0qpjZi7lRKmm2blQVtHtp Zqi//FrCZALrwXApd1z45/x03bCwJjiqEFAzBqd1vzSlalntZcgU404z/G4HVZEPundvhIkbhry86 kYgCKqU4SWjeTyJj6xrF0GngDy6vv7W+l74FgTAinRqVZIuh7YzvMWeTKuc0IsVLHLMg93ggpzR0e 0uI0tIbTftmhJWRJdZOELu4WeFnKgfNnwUjE4sA3tLAR8MuXiW8M8R9mpSbkZltmqsLIqLI3le/4r R1kMpGpw==; Received: from [58.29.143.236] (helo=localhost) by fanzine2.igalia.com with utf8esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1tYRbh-00Gi1a-5b; Thu, 16 Jan 2025 16:16:29 +0100 From: Changwoo Min To: tj@kernel.org, void@manifault.com, arighi@nvidia.com Cc: kernel-dev@igalia.com, linux-kernel@vger.kernel.org, Changwoo Min Subject: [PATCH 4/7] sched_ext: Add an event, SCX_EVENT_ENQ_LOCAL_EXITING Date: Fri, 17 Jan 2025 00:15:40 +0900 Message-ID: <20250116151543.80163-5-changwoo@igalia.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250116151543.80163-1-changwoo@igalia.com> References: <20250116151543.80163-1-changwoo@igalia.com> 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" Add a core event, SCX_EVENT_ENQ_LOCAL_EXITING, which represents how many times a task is enqueued to a local DSQ when exiting if SCX_OPS_ENQ_EXITING is not set. Signed-off-by: Changwoo Min --- kernel/sched/ext.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c index 909f12a41934..094e19f5fb78 100644 --- a/kernel/sched/ext.c +++ b/kernel/sched/ext.c @@ -1479,6 +1479,12 @@ struct scx_event_stat { * continued to run because there were no other tasks on the CPU. */ u64 CNTD_RUN_WO_ENQ; + + /* + * If SCX_OPS_ENQ_EXITING is not set, the number of times that a task + * is dispatched to a local DSQ when exiting. + */ + u64 ENQ_LOCAL_EXITING; }; =20 #define SCX_EVENT_IDX(e) (offsetof(struct scx_event_stat, e)/sizeof(u64)) @@ -1493,6 +1499,7 @@ enum scx_event_kind { SCX_EVENT_DEFINE(INVAL_SELECT_CPU), SCX_EVENT_DEFINE(OFFLINE_LOCAL_DSQ), SCX_EVENT_DEFINE(CNTD_RUN_WO_ENQ), + SCX_EVENT_DEFINE(ENQ_LOCAL_EXITING), SCX_EVENT_END =3D SCX_EVENT_END_IDX(), }; =20 @@ -1500,6 +1507,7 @@ static const char *scx_event_stat_str[] =3D { [SCX_EVENT_INVAL_SELECT_CPU] =3D "invalid_select_cpu", [SCX_EVENT_OFFLINE_LOCAL_DSQ] =3D "offline_local_dsq", [SCX_EVENT_CNTD_RUN_WO_ENQ] =3D "cntd_run_wo_enq", + [SCX_EVENT_ENQ_LOCAL_EXITING] =3D "enq_local_exiting", }; =20 /* @@ -2087,8 +2095,10 @@ static void do_enqueue_task(struct rq *rq, struct ta= sk_struct *p, u64 enq_flags, =20 /* see %SCX_OPS_ENQ_EXITING */ if (!static_branch_unlikely(&scx_ops_enq_exiting) && - unlikely(p->flags & PF_EXITING)) + unlikely(p->flags & PF_EXITING)) { + scx_add_event(ENQ_LOCAL_EXITING, 1); goto local; + } =20 if (!SCX_HAS_OP(enqueue)) goto global; --=20 2.48.1 From nobody Sun Dec 14 08:08:29 2025 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) (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 8F4B222CBC9 for ; Thu, 16 Jan 2025 15:16:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.60.130.6 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737040604; cv=none; b=gqXqCy2bg5uwVDXQnHOhxVuQppZAaHmW77K3iZU+de+3rhilJOKSAVo9P1nUESOp24j8sX7W/x2blmGBz/oPqSpAgWRBXrZONCyg78Hf0v6lE6X7SIm1Q8LBXNhF6SoqNOuXHprTK2YP7tEhaD2kIjM2Ypkg87Q+ZZVOhSfYykA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737040604; c=relaxed/simple; bh=kJ3c6ptjFGYaX6uwgaIe76TY8VGNnkYwJpJzBBhEMyA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KxtagpZtTUN7H3Ov4M+fklutzZrngifD2jiP/QF9JhFwy8pFXP+PKYLSO+Knr/20EwewwqrfSgXLmWH2k7ZqyKs2TR3iudR2VzLnqK8dBGYyS8alutDa6qzEStRPFWF1EKUf7ADiMggnwQOedPEdMFlRMhTlX4WbnqpGbxG0vyM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=HBRNYdOv; arc=none smtp.client-ip=178.60.130.6 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="HBRNYdOv" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=SQBYI3wItOyTJP+L2KhUmTCyz5+viFMXMHlyS4b3gBw=; b=HBRNYdOvaSLXJ8gcsggloJm+1N V3jRKLsK8WmBozn94wW9vJ9fiioCC4M0vY6jFWdzNObIDOxpMFvhZXDO2E4x3VrJ4c2V1kXfFnN31 ZjtJC7vGP947oKxWFdkibgpXrhlrP5rtVwphlAgKBSfZ65NGJj8ROF0Dfs/vcFfmrcCzxuVXgz2WU UbXkRebQYn0SlujfZL+9xNT+4OYi+PCixbqMSFmgojxGp0zKX+VkI3IHCYDr7NwTKVoOst6LXj1KR UrAZSnsjUBmTPoPUqsj+KE2vZSAZ6DZ7f9yyvrTmpnCh1niO/9OJ8w+cY4a5eZeBE8pxz2Lk8LSdj RBLf0LsA==; Received: from [58.29.143.236] (helo=localhost) by fanzine2.igalia.com with utf8esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1tYRbn-00Gi1p-3Z; Thu, 16 Jan 2025 16:16:35 +0100 From: Changwoo Min To: tj@kernel.org, void@manifault.com, arighi@nvidia.com Cc: kernel-dev@igalia.com, linux-kernel@vger.kernel.org, Changwoo Min Subject: [PATCH 5/7] sched_ext: Add an event, SCX_EVENT_RQ_BYPASSING_OPS Date: Fri, 17 Jan 2025 00:15:41 +0900 Message-ID: <20250116151543.80163-6-changwoo@igalia.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250116151543.80163-1-changwoo@igalia.com> References: <20250116151543.80163-1-changwoo@igalia.com> 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" Add a core event, SCX_EVENT_RQ_BYPASSING_OPS, which represents how many operations are bypassed once the bypass mode is set. Signed-off-by: Changwoo Min --- kernel/sched/ext.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c index 094e19f5fb78..44b44d963a0c 100644 --- a/kernel/sched/ext.c +++ b/kernel/sched/ext.c @@ -1485,6 +1485,11 @@ struct scx_event_stat { * is dispatched to a local DSQ when exiting. */ u64 ENQ_LOCAL_EXITING; + + /* + * When the bypassing mode is set, the number of bypassed operations. + */ + u64 RQ_BYPASSING_OPS; }; =20 #define SCX_EVENT_IDX(e) (offsetof(struct scx_event_stat, e)/sizeof(u64)) @@ -1500,6 +1505,7 @@ enum scx_event_kind { SCX_EVENT_DEFINE(OFFLINE_LOCAL_DSQ), SCX_EVENT_DEFINE(CNTD_RUN_WO_ENQ), SCX_EVENT_DEFINE(ENQ_LOCAL_EXITING), + SCX_EVENT_DEFINE(RQ_BYPASSING_OPS), SCX_EVENT_END =3D SCX_EVENT_END_IDX(), }; =20 @@ -1508,6 +1514,7 @@ static const char *scx_event_stat_str[] =3D { [SCX_EVENT_OFFLINE_LOCAL_DSQ] =3D "offline_local_dsq", [SCX_EVENT_CNTD_RUN_WO_ENQ] =3D "cntd_run_wo_enq", [SCX_EVENT_ENQ_LOCAL_EXITING] =3D "enq_local_exiting", + [SCX_EVENT_RQ_BYPASSING_OPS] =3D "rq_bypassing_ops", }; =20 /* @@ -2087,8 +2094,10 @@ static void do_enqueue_task(struct rq *rq, struct ta= sk_struct *p, u64 enq_flags, if (!scx_rq_online(rq)) goto local; =20 - if (scx_rq_bypassing(rq)) + if (scx_rq_bypassing(rq)) { + scx_add_event(RQ_BYPASSING_OPS, 1); goto global; + } =20 if (p->scx.ddsp_dsq_id !=3D SCX_DSQ_INVALID) goto direct; @@ -2933,6 +2942,8 @@ static int balance_one(struct rq *rq, struct task_str= uct *prev) scx_rq_bypassing(rq))) { rq->scx.flags |=3D SCX_RQ_BAL_KEEP; scx_add_event(CNTD_RUN_WO_ENQ, 1); + if (scx_rq_bypassing(rq)) + scx_add_event(RQ_BYPASSING_OPS, 1); goto has_tasks; } rq->scx.flags &=3D ~SCX_RQ_IN_BALANCE; @@ -3708,6 +3719,9 @@ static int select_task_rq_scx(struct task_struct *p, = int prev_cpu, int wake_flag p->scx.slice =3D SCX_SLICE_DFL; p->scx.ddsp_dsq_id =3D SCX_DSQ_LOCAL; } + + if (scx_rq_bypassing(task_rq(p))) + scx_add_event(RQ_BYPASSING_OPS, 1); return cpu; } } @@ -3799,6 +3813,8 @@ void __scx_update_idle(struct rq *rq, bool idle, bool= do_notify) */ if (SCX_HAS_OP(update_idle) && do_notify && !scx_rq_bypassing(rq)) SCX_CALL_OP(SCX_KF_REST, update_idle, cpu_of(rq), idle); + else if (scx_rq_bypassing(rq)) + scx_add_event(RQ_BYPASSING_OPS, 1); =20 /* * Update the idle masks: @@ -3940,6 +3956,7 @@ static void task_tick_scx(struct rq *rq, struct task_= struct *curr, int queued) if (scx_rq_bypassing(rq)) { curr->scx.slice =3D 0; touch_core_sched(rq, curr); + scx_add_event(RQ_BYPASSING_OPS, 1); } else if (SCX_HAS_OP(tick)) { SCX_CALL_OP(SCX_KF_REST, tick, curr); } @@ -7131,8 +7148,10 @@ __bpf_kfunc void scx_bpf_kick_cpu(s32 cpu, u64 flags) * lead to irq_work_queue() malfunction such as infinite busy wait for * IRQ status update. Suppress kicking. */ - if (scx_rq_bypassing(this_rq)) + if (scx_rq_bypassing(this_rq)) { + scx_add_event(RQ_BYPASSING_OPS, 1); goto out; + } =20 /* * Actual kicking is bounced to kick_cpus_irq_workfn() to avoid nesting --=20 2.48.1 From nobody Sun Dec 14 08:08:29 2025 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) (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 516C722C9E2 for ; Thu, 16 Jan 2025 15:16:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.60.130.6 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737040610; cv=none; b=h6cHoeV1x+xe3CIyo6HB2zwibBBRQdOUXlQ7mlh1MF24h2Q6rigJ0TBSp19Mbn54exbnmc1g9oTWZCu2J+DcXmHtsnal5HI6V+9lgClS1OpntIk/AldPeXuMJI+ZLdr5Nhl6mBQuPM53VG7Vb13AXFA7qd3jA88pSmZj0WQvmoU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737040610; c=relaxed/simple; bh=mmMyyzY+Sr5dxI6zrwSS9vxL6Fb93hhif/3UDdLyLok=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rbhD5fPn9533arsNtRtRQLChAZq+xAcS+oCUTQKVDPwbCt2AQcPHlOhxfjB/jIET8WBkO13y8Nrn93vIE07DAtBuBCfa4gPFAfbv0QBP/3nvRi+Qt8s1H/2jNjk5TZpkWKYYMuHumLuEcxlhxehEpDDz8r9jfPELYdZWnlcS75Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=c9kwSPxL; arc=none smtp.client-ip=178.60.130.6 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="c9kwSPxL" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=KDhEj6rZsnbJLQP9nTp7biN+PzUTytWOTh55CzIJEfc=; b=c9kwSPxLSieR+JBLR6tmvQeIp5 QblmGooMsbgWNQkVl9qhGeaSQbO+ZE4MEI61mu5+i+pwvFgoO4cSYjdyIxrnp/gbOPnfWzfe+pxMR 11wxKTrYmdd9qjMYy/PQbF4zxdywgn7TCuXvEXgbAm6NWLF0TuOnM0sIlO+leakNWpueuX2zEgAGL VKbjjXy2ImtWX0jz3o1K3dKDFuu5mCxPMY0qLKOcftOs4hwRiVzwclNIKDKo+kbsZNpi1EVQKPWH/ zV9LKC/L6K3o54H7Gm4o+O/nll02py9Fj9zaXiekYz5Q3T7g/B1G0uO07dNZTF2E7/nziijuPNs+0 t/SKiARw==; Received: from [58.29.143.236] (helo=localhost) by fanzine2.igalia.com with utf8esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1tYRbu-00Gi28-Pd; Thu, 16 Jan 2025 16:16:43 +0100 From: Changwoo Min To: tj@kernel.org, void@manifault.com, arighi@nvidia.com Cc: kernel-dev@igalia.com, linux-kernel@vger.kernel.org, Changwoo Min Subject: [PATCH 6/7] sched_ext: Add scx_bpf_event_stat() and scx_read_event() for BPF schedulers Date: Fri, 17 Jan 2025 00:15:42 +0900 Message-ID: <20250116151543.80163-7-changwoo@igalia.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250116151543.80163-1-changwoo@igalia.com> References: <20250116151543.80163-1-changwoo@igalia.com> 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" scx_bpf_event_stat() is added to the header files so the BPF scheduler can use it. Also, scx_read_event() is added to read an event type in a compatible way. Signed-off-by: Changwoo Min --- tools/sched_ext/include/scx/common.bpf.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/sched_ext/include/scx/common.bpf.h b/tools/sched_ext/inc= lude/scx/common.bpf.h index f3e15e9efa76..c526aa8a949a 100644 --- a/tools/sched_ext/include/scx/common.bpf.h +++ b/tools/sched_ext/include/scx/common.bpf.h @@ -78,6 +78,10 @@ struct rq *scx_bpf_cpu_rq(s32 cpu) __ksym; struct cgroup *scx_bpf_task_cgroup(struct task_struct *p) __ksym __weak; u64 scx_bpf_now(void) __ksym __weak; =20 +void scx_bpf_event_stat(struct scx_event_stat *event, size_t event__sz) __= ksym __weak; +#define scx_read_event(e, name) \ + (bpf_core_field_exists((e)->name) ? (e)->name : 0) + /* * Use the following as @it__iter when calling scx_bpf_dsq_move[_vtime]() = from * within bpf_for_each() loops. --=20 2.48.1 From nobody Sun Dec 14 08:08:29 2025 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) (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 84D4822CF2C for ; Thu, 16 Jan 2025 15:16:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.60.130.6 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737040618; cv=none; b=OaD77hGwYSWD/Kg//WOSbNtWcR34AWi3wbOi/GlrgZlLXPU3/49JWopfjIo0X4U5BcQCAuir4o+7EeAsmYoo+Lr30FrxPPL/Ama+pKP9fbMZvitt5wUmCuBNWvnhl7GFxMACvhr2hZD13b/LkWFhh8YDhqXp1js8A90zQo54XA8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737040618; c=relaxed/simple; bh=9DB3diL3NLGgxsvju8kf8kGOZdedt7cC8BWV3AIhomo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HPxUKDYbajeVeYy8BKtU174YWYy0GA6WY18V3d0x4GzDNaejq2THuaUwxfu88A9KtSdkgorEEsvfCwpKbOMuzPP4a8gGQs+4EVohTeXeAnlAv9I9j/ruvrueH9QX9sxlUy1Pm2QjSsJ4ISoA/AIlGwx+jzOsXkc9QJEGLCiZc5M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=C7jLBegS; arc=none smtp.client-ip=178.60.130.6 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="C7jLBegS" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=z+dpnv2R6Y4NoZ/yt3UIXcFPVsKT+m86eGIAEdOPkVQ=; b=C7jLBegS3vVz87GhnUn1ogLEC4 NLGQcvnvFB34pI1N1/5MpZJNcYCzMNjAHGjj6O8UeedKTmOnqxO879FDh8Jol3of14oRDoMoPS4wV 5qgWT1JGOCWo9rXXJgtAqPePm5CXk10vg0BfXP29FE0YilmHUj5R/rl4PBbXfAA07NfwycmsizjmY HWpbUqkPH1gX2exNMIKw6GwmyKXbkvCtNfidGPT7eYHG4AzA1x2RBmY8GyJImdkDL/BZGlyBvvARt Sn4twfy1Y0WNA8CUVc6CyMEtXX8BSaQ1CIfUDlT01j/zy0Ln0bX0vNeUTthB1KopMJvwcQbrm2Wfp 6ImycQ9w==; Received: from [58.29.143.236] (helo=localhost) by fanzine2.igalia.com with utf8esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1tYRc1-00Gi2O-LC; Thu, 16 Jan 2025 16:16:50 +0100 From: Changwoo Min To: tj@kernel.org, void@manifault.com, arighi@nvidia.com Cc: kernel-dev@igalia.com, linux-kernel@vger.kernel.org, Changwoo Min Subject: [PATCH 7/7] sched_ext: Print core event count in scx_central scheduler Date: Fri, 17 Jan 2025 00:15:43 +0900 Message-ID: <20250116151543.80163-8-changwoo@igalia.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250116151543.80163-1-changwoo@igalia.com> References: <20250116151543.80163-1-changwoo@igalia.com> 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" Modify the scx_central scheduler to print the core event counter every second. Signed-off-by: Changwoo Min --- tools/sched_ext/scx_central.bpf.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tools/sched_ext/scx_central.bpf.c b/tools/sched_ext/scx_centra= l.bpf.c index 50bc1737c167..1f0dc9861418 100644 --- a/tools/sched_ext/scx_central.bpf.c +++ b/tools/sched_ext/scx_central.bpf.c @@ -256,6 +256,8 @@ static int central_timerfn(void *map, int *key, struct = bpf_timer *timer) u64 now =3D scx_bpf_now(); u64 nr_to_kick =3D nr_queued; s32 i, curr_cpu; + struct scx_event_stat event; + int kind; =20 curr_cpu =3D bpf_get_smp_processor_id(); if (timer_pinned && (curr_cpu !=3D central_cpu)) { @@ -291,6 +293,22 @@ static int central_timerfn(void *map, int *key, struct= bpf_timer *timer) =20 bpf_timer_start(timer, TIMER_INTERVAL_NS, BPF_F_TIMER_CPU_PIN); __sync_fetch_and_add(&nr_timers, 1); + + /* print event counters every second */ + if (nr_timers % 1000 =3D=3D 0) { + scx_bpf_event_stat(&event, sizeof(event)); + + bpf_printk("%20s: %llu\n", "invalid_select_cpu", + scx_read_event(&event, INVAL_SELECT_CPU)); + bpf_printk("%20s: %llu\n", "offline_local_dsq", + scx_read_event(&event, OFFLINE_LOCAL_DSQ)); + bpf_printk("%20s: %llu\n", "cntd_run_wo_enq", + scx_read_event(&event, CNTD_RUN_WO_ENQ)); + bpf_printk("%20s: %llu\n", "enq_local_exiting", + scx_read_event(&event, ENQ_LOCAL_EXITING)); + bpf_printk("%20s: %llu\n", "rq_bypassing_ops", + scx_read_event(&event, RQ_BYPASSING_OPS)); + } return 0; } =20 --=20 2.48.1