From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from out-173.mta0.migadu.com (out-173.mta0.migadu.com [91.218.175.173]) (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 5488730C178 for ; Fri, 24 Jul 2026 04:12:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.173 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784866323; cv=none; b=rUiUQnMHGK6oAX+7xzrCf+kOGCzxIzi7MlCzOs3zaEmmFa5SQgRarT8BLKD4fdB4ajDlzSQIxaEjwIO1aAzSGIg7TxoEbx735dd8ciRcGysuqD2eUEvWRvMN6LEdUWNxYD48fWIO+3WCSBdXkVpqxU35CLGuIIkfaHaTpDCEFl8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784866323; c=relaxed/simple; bh=tIvDmRtDJBNBOFmpjtfTtfJs0zaBq8fgErNI7KXIbWo=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=G6LCMDYhjb/avtjeSh4QWLcc1RkGi7GP4O8hRQCb+J9Ws43VT1Ld9+w/+f/xyxWZ6uWF2tNrwCpnGVjhFDGA+qmmF+a3pZ/bIId8xVaFOsoOvDrKc6m2/ydK7C8Jfla2mUBIzqFnFHXTNb05RJiYz+xI1PJG2rO0mr/F28izT2o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=cHWB9mjx; arc=none smtp.client-ip=91.218.175.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="cHWB9mjx" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1784866319; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=0Y2NTAdB14pE/BN3klw3Q+xkc9/ptzxHYACP3J6J4Fs=; b=cHWB9mjxgDXtJ4rEShuDDbGOWZ9SuLTuAVNSP3OzJ9Wsv/QacJ98dqRLk6hpjm3AyhGlEx b25WSeO0qXmH7ifBFtHfD30ymwAIh7IXr99HOsXPMGnm1K1gsoVaqYyHeNL6qA6j4+Nonx MM7MxRxJ535BZoN2iNXUYQ8mFDKT3LE= From: Tao Cui To: Johannes Weiner , Suren Baghdasaryan Cc: Peter Zijlstra , Ingo Molnar , linux-kernel@vger.kernel.org, Tao Cui , cui.tao@linux.dev Subject: [PATCH 0/2] sched/psi: fix trigger window arithmetic Date: Fri, 24 Jul 2026 12:11:44 +0800 Message-ID: <20260724041146.510027-1-cui.tao@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT From: Tao Cui Two narrow numeric bugs in the PSI trigger-window arithmetic, both from the original psi monitor (0e94682b73bf) and both only visible for trigger windows larger than ~4.29s (UINT32_MAX ns). 1/2 window_update() estimates the stall growth inside a partially-elapsed window as `prev_growth * remaining / size`. `remaining` is a u32 but win->size is a u64 and may be up to 10s (1e10 ns), so for large windows it truncates and the interpolation collapses; `prev_growth * remaining` can also overflow u64. Use a u64 `remaining` and mul_u64_u64_div_u64(). 2/2 psi_trigger_create() scales window/threshold us->ns with `* NSEC_PER_USEC`. NSEC_PER_USEC is `long`, so on 32-bit the multiply wraps for multi-second windows (a 10s window is stored as ~1.41s). Cast to u64 first. Neither path is the scheduler hot path (update_triggers() runs at trigger-evaluation rate), and small-window triggers are numerically unchanged. Demo of 1/2 -- 10s window, previous window was 100% stall, polled each 1s, trigger "some 5s 10s". Estimated growth (seconds) inside the window: elapsed current(u32) fixed(u64) 1 1 10 2 2 10 3 3 10 4 5 10 With the current code the trigger waits for the actual stall to reach the 5s threshold (~4s in) instead of firing once the run-rate predicts it (~1s in): a ~3s delay on the first window of a stall. Tao Cui (2): sched/psi: fix trigger window growth interpolation for large windows sched/psi: convert trigger window/threshold to ns in u64 kernel/sched/psi.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) -- 2.43.0