From nobody Fri Jan 2 22:22:57 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6196EE92FFC for ; Sat, 7 Oct 2023 06:21:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343561AbjJGGVn (ORCPT ); Sat, 7 Oct 2023 02:21:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47864 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343532AbjJGGVl (ORCPT ); Sat, 7 Oct 2023 02:21:41 -0400 Received: from mxhk.zte.com.cn (mxhk.zte.com.cn [63.216.63.35]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7FA22BB for ; Fri, 6 Oct 2023 23:21:39 -0700 (PDT) Received: from mse-fl1.zte.com.cn (unknown [10.5.228.132]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mxhk.zte.com.cn (FangMail) with ESMTPS id 4S2Zv02gMGz4xPFw; Sat, 7 Oct 2023 14:21:32 +0800 (CST) Received: from szxlzmapp01.zte.com.cn ([10.5.231.85]) by mse-fl1.zte.com.cn with SMTP id 3976LSh2034032; Sat, 7 Oct 2023 14:21:28 +0800 (+08) (envelope-from yang.yang29@zte.com.cn) Received: from mapi (szxlzmapp02[null]) by mapi (Zmail) with MAPI id mid14; Sat, 7 Oct 2023 14:21:31 +0800 (CST) Date: Sat, 7 Oct 2023 14:21:31 +0800 (CST) X-Zmail-TransId: 2b046520f8eb657-18d47 X-Mailer: Zmail v1.0 Message-ID: <202310071421311735972@zte.com.cn> In-Reply-To: References: 202309141353492446199@zte.com.cn,202309141710195376952@zte.com.cn,CAJuCfpHV+Tf+-YqdWFwQNAeQJU5aqOM56R2GzbehFaFQcHuxAg@mail.gmail.com Mime-Version: 1.0 From: To: , , Cc: , , Subject: =?UTF-8?B?W1BBVENIIGxpbnV4LW5leHQgdjJdIHNjaGVkL3BzaTogQXZvaWQgdXBkYXRlIHRyaWdnZXJzIGFuZCBydHBvbGxfdG90YWwgd2hlbiBpdCBpcyB1bm5lY2Vzc2FyeQ==?= X-MAIL: mse-fl1.zte.com.cn 3976LSh2034032 X-Fangmail-Gw-Spam-Type: 0 X-Fangmail-Anti-Spam-Filtered: true X-Fangmail-MID-QID: 6520F8EC.000/4S2Zv02gMGz4xPFw Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Yang Yang When psimon wakes up and there are no state changes for rtpoll_states, it's unnecessary to update triggers and rtpoll_total because the pressures being monitored by user have not changed. This will help to slightly reduce unnecessary computations of psi. There are also some minor related optimizations, please see below. The parameter update_total in update_triggers() is useless now. Since if changed_states & group->rtpoll_states is true, new_stall in update_triggers= () will be true, then update_total should also be true. We have no need for update_total to help judgment whether to update rtpoll_total, so delete update_total. Update_triggers() always return now + group->rtpoll_min_period, and the return value is only used by psi_rtpoll_work(), so change update_triggers() to a void function, let group->rtpoll_next_update =3D now + group->rtpoll_min_period directly. Signed-off-by: Yang Yang Suggested-by: Suren Baghdasaryan --- kernel/sched/psi.c | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c index 1d0f634725a6..44a78774ae87 100644 --- a/kernel/sched/psi.c +++ b/kernel/sched/psi.c @@ -434,14 +434,13 @@ static u64 window_update(struct psi_window *win, u64 = now, u64 value) return growth; } -static u64 update_triggers(struct psi_group *group, u64 now, bool *update_= total, +static void update_triggers(struct psi_group *group, u64 now, enum psi_aggregators aggregator) { struct psi_trigger *t; u64 *total =3D group->total[aggregator]; struct list_head *triggers; u64 *aggregator_total; - *update_total =3D false; if (aggregator =3D=3D PSI_AVGS) { triggers =3D &group->avg_triggers; @@ -471,14 +470,6 @@ static u64 update_triggers(struct psi_group *group, u6= 4 now, bool *update_total, * events without dropping any). */ if (new_stall) { - /* - * Multiple triggers might be looking at the same state, - * remember to update group->polling_total[] once we've - * been through all of them. Also remember to extend the - * polling time if we see new stall activity. - */ - *update_total =3D true; - /* Calculate growth since last update */ growth =3D window_update(&t->win, now, total[t->state]); if (!t->pending_event) { @@ -503,8 +494,6 @@ static u64 update_triggers(struct psi_group *group, u64= now, bool *update_total, /* Reset threshold breach flag once event got generated */ t->pending_event =3D false; } - - return now + group->rtpoll_min_period; } static u64 update_averages(struct psi_group *group, u64 now) @@ -565,7 +554,6 @@ static void psi_avgs_work(struct work_struct *work) struct delayed_work *dwork; struct psi_group *group; u32 changed_states; - bool update_total; u64 now; dwork =3D to_delayed_work(work); @@ -584,7 +572,7 @@ static void psi_avgs_work(struct work_struct *work) * go - see calc_avgs() and missed_periods. */ if (now >=3D group->avg_next_update) { - update_triggers(group, now, &update_total, PSI_AVGS); + update_triggers(group, now, PSI_AVGS); group->avg_next_update =3D update_averages(group, now); } @@ -640,7 +628,6 @@ static void psi_rtpoll_work(struct psi_group *group) { bool force_reschedule =3D false; u32 changed_states; - bool update_total; u64 now; mutex_lock(&group->rtpoll_trigger_lock); @@ -706,10 +693,12 @@ static void psi_rtpoll_work(struct psi_group *group) } if (now >=3D group->rtpoll_next_update) { - group->rtpoll_next_update =3D update_triggers(group, now, &update_total,= PSI_POLL); - if (update_total) + if (changed_states & group->rtpoll_states) { + update_triggers(group, now, PSI_POLL); memcpy(group->rtpoll_total, group->total[PSI_POLL], sizeof(group->rtpoll_total)); + } + group->rtpoll_next_update =3D now + group->rtpoll_min_period; } psi_schedule_rtpoll_work(group, --=20 2.25.1