From patchwork Wed Oct 2 21:27:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13820393 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0FF0FCF8540 for ; Wed, 2 Oct 2024 21:27:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C4A816B04EE; Wed, 2 Oct 2024 17:27:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BFBC36B04F2; Wed, 2 Oct 2024 17:27:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A4E626B04EE; Wed, 2 Oct 2024 17:27:40 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 7B4706B04B3 for ; Wed, 2 Oct 2024 17:27:40 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 13DA5809CC for ; Wed, 2 Oct 2024 21:27:40 +0000 (UTC) X-FDA: 82629949080.22.11FB137 Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf05.hostedemail.com (Postfix) with ESMTP id 531F010000E for ; Wed, 2 Oct 2024 21:27:38 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=G3mMkbdg; spf=pass (imf05.hostedemail.com: domain of jlayton@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=jlayton@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1727904330; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ijdS9YNuM/d+8aUO3LLQCja6IxbZMfWf/xrqS8jkEz8=; b=Ax2bGTydiFKPszW2/7WMCqyyiNq5ZqZ+C7AZUE+4BdHU1XobduvZm5YlVj5/ysIFO0pn4q bpO9j0w6Z69y1bNViR8INTrR08oWB4aWicGHh06KSp++49roSGqIXFj38AbF6i2MqFzgn7 RcRn/NMwBwxDIY/ZMYdAa8kvxqfAGQw= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1727904330; a=rsa-sha256; cv=none; b=gAWOoPAhECyFTiHR9HSysS++PyWGJLuNYRfY9kya6fhJBlxq2iPT+7so36633/xqpYtHp/ jOYBrQqdxhnaWbNEFtcU5npKefda1nIGIY1rm5/e8axAS6AC7Cb4W1OjdLMxsoZkwfkfrn PH3ogbdayPDz7X+iZjIwh60qc43uy88= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=G3mMkbdg; spf=pass (imf05.hostedemail.com: domain of jlayton@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=jlayton@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id DCFF9A44023; Wed, 2 Oct 2024 21:27:28 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 55601C4CED1; Wed, 2 Oct 2024 21:27:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727904456; bh=b4XkKth37w2ravUWOahimfnL3UOfVbEBD3lD+3rp+1s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=G3mMkbdg0nkDEyn6L/6plWzGy8rzM311X3HHbMz6R3Ai1VYHlupggE7MRYdxecBcW Xvk6ll6KZR/g9zl7uCaka+nNH7x9Tm/RIkT5vO6uSHNqrUjFrtM95g8heH5M+lCE55 F8sgy2iJ9fYi2MZGAAxh7tC2DGiC+V5GkjwU7zP25bmpQ/aYrgzhRDQUPnIsshqeKy O7Jkn3FCOz/3z+OTJtQd0O6UxWljUiDGrmddv3D/etWQiDuDYhcmmN0fD6Ll8pFgyi DBGz2Fo7ZjiuVE0X7WaIHym/aM5Pjo+l4xsKTeBPi+9qboJDAz98MsoDdHe55s5REo dVuTX5zzfKQ1A== From: Jeff Layton Date: Wed, 02 Oct 2024 17:27:17 -0400 Subject: [PATCH v10 02/12] timekeeping: add percpu counter for tracking floor swap events MIME-Version: 1.0 Message-Id: <20241002-mgtime-v10-2-d1c4717f5284@kernel.org> References: <20241002-mgtime-v10-0-d1c4717f5284@kernel.org> In-Reply-To: <20241002-mgtime-v10-0-d1c4717f5284@kernel.org> To: John Stultz , Thomas Gleixner , Stephen Boyd , Alexander Viro , Christian Brauner , Jan Kara , Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , Jonathan Corbet , Randy Dunlap , Chandan Babu R , "Darrick J. Wong" , Theodore Ts'o , Andreas Dilger , Chris Mason , Josef Bacik , David Sterba , Hugh Dickins , Andrew Morton , Chuck Lever , Vadim Fedorenko Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-trace-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-xfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-nfs@vger.kernel.org, linux-mm@kvack.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3634; i=jlayton@kernel.org; h=from:subject:message-id; bh=b4XkKth37w2ravUWOahimfnL3UOfVbEBD3lD+3rp+1s=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBm/bq/KG7g3gRmiuGWZ6tpbobqHKVwsPLvCl1+2 PakkzoH/7uJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZv26vwAKCRAADmhBGVaC FZRZD/4yysdw6oqodqdrDqoDwQHs/Q4CF/xQT2tRHqA4QItHNsZTxwidAffBRsnGrGPeTIgeMCM eYGyGB9p4u3XxLEb8dhRFOW1RBgcQ/Cjr8cpZH6SZLYpRAk6GIcclb7JSx0Z+ZsLsb3raxWip/q aQkME57KDFHa5SU4k6wWAI43OaKhloW9psmHOc+VuX08saDovMS29GzzdVVAjB04fD6FVnJ0bOw LhNaYNNOKXmuoYPbwXaeS79CaJBEsoC4hSLmofWpFHtXZSM0eMXenbt01hkg0YPIERLodPld9rp iR7KGQ74j0CMmpjZaG/iu8mh33FVzNhkaSdq0w4OuN8UNcCDibrHS5/mOt4wdm3uhMR74E6vON+ 0hkVua/1WjZWCbWA9MiE7S8g3sORCoVEP2BIlNBS3fMnIDVCW9YjyntS4bsTRJnYK5cVmuROgko 7sLr656frMTXl0fy01yglfhU+MXQcqqrmxOiXyRELla8YEX+AKon8oWhvegEV/KJV2LWq3sc2PJ TaaxJQMW9FMLYqn5/ddC7uMEmiMU4fHMlL7JHWzMIzBCVTUE4F3nzpMWHemwN+a44HbOhkzhyQc 0gsIzOEweoF4Kk/yBwXoIpBJneQyP9cglaRlMWlyaD4SLndBdD4EgyTrBtFMAYZncjdhhZwr8Uz ptEgKiXkkzgo4IQ== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 X-Rspamd-Queue-Id: 531F010000E X-Stat-Signature: 1rotddr8zyjmxdhwz8ijg4wdm9gxuu1k X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1727904458-276794 X-HE-Meta: U2FsdGVkX18KVrG2GB6p+MYhzWUamNCIH+DniseclFKRlO1ew6XeR1vkyAuL2GXNU8FV9zNY6snA4eyVImO0ZPnGB0LjL6edn9XbX1nyKqDe/VMxXeZHM2M8uGuPD7L5H1CjeQYy+L/09k3jTkVBMY9vATaddJnnlwsza45MmdGNDFXqgx9UU8NwEgCfHHoWeAQrmqJhNEJ4/jeUxgnPvc+TVkz2gyJgY0BB6DrzYdvhDjUBYnKjIAIFk4b7zHVky1XrNFicVsf215hlbzEVusuUT3C/Y7CyMtZiyUe6JLbsQG9ABzI10TQ9UJZUPOh9NQtytzNezi/Exwe6gD1y5ivKY8VPwITHjAObka2pDpzy30CJiGEqqz+qS7gMWLV6zATkExzIeWg7b9tb50t2cJoBMDAiMvkDq6d+W3WDxSGpCd3OlhmDd7Sv/0LrqpBOA7daSEWkb3AcF7q1kX04wVnhRNKA3jnFXn1KDhqF0tilC9to4P+oLpt/wwPACjl47OmtUmglyhtCDWNqLTR45tFD0xYC8zFpO8NESXvgr/1hcEnkBspR6VhaGfpRimKW1liBkMmHmPPhUmVgO2L9305vyue/j+ulrXqIfXyx8RbcgCWhiFYEkvSA1NPUm94k6mOZ51IMdHla2do4k4XrprbwanuWtk4/XtWQej9M1P2P7doanI/TPqSzeFMD3i12HMPp2nKqM8nrgJwXphF+HJbmQ2V/EhjDtT44xpR2FgL1Us6P81cmc3vIO08yzufXuYq3Fq9PfKgOibGY0vtNO8DjXmy8oQvy1mXbfu36trSE7x1diBS5Zb/XKxYWffg8XSBixySjwnIzNdmiOBlsWkSd7noNudEW02FrhQjGNosqmaYpgOfkjcW5VWcRPpNfrbDbKhngeLuTHQ6CSA1xf4s5zV6cFCpz85wrIs9Wcd/5bdGUN9obNshT/xiJ5aigaI6MOXyTsbV6hm671O2 ZlpaEtbS zdiozDymWgLZ1XMAdL+UFT8L9C/065RfDWchaZ300rtb/tXpeDxVWdvYbFg1+3s+YHjnWTCjhtZ9dj1gr/7/ey7at+WwIPgnGZbzP/6GQV3+zxw0CMbSUzP2a8PhFQxIdRawkGW5FMHIXtDAWWG7U6PfhFqe72L0y5PdJKizlTEZ76itg+XyrOQxj5AU6oDFSVoL+krX65Ge9HGPYBZT6yaS9nMaOu7gamJXXcRvOcsk5JAYopcS+XxUU4xYD1EBXYLEpkVdwwN7kJ1MRi2v+DBHLG9MStBefeaqM1dDBtw5d3jRKAH3KfCu5mA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: The mgtime_floor value is a global variable for tracking the latest fine-grained timestamp handed out. Because it's a global, track the number of times that a new floor value is assigned. Add a new percpu counter to the timekeeping code to track the number of floor swap events that have occurred. A later patch will add a debugfs file to display this counter alongside other stats involving multigrain timestamps. Tested-by: Randy Dunlap # documentation bits Signed-off-by: Jeff Layton --- include/linux/timekeeping.h | 1 + kernel/time/timekeeping.c | 1 + kernel/time/timekeeping_debug.c | 14 ++++++++++++++ kernel/time/timekeeping_internal.h | 15 +++++++++++++++ 4 files changed, 31 insertions(+) diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h index 7aa85246c183576b039c02af4abba02b4a09ef9d..84a035e86ac811f9e7b1649246b71c9296519149 100644 --- a/include/linux/timekeeping.h +++ b/include/linux/timekeeping.h @@ -48,6 +48,7 @@ extern void ktime_get_coarse_real_ts64(struct timespec64 *ts); /* Multigrain timestamp interfaces */ extern void ktime_get_coarse_real_ts64_mg(struct timespec64 *ts); extern void ktime_get_real_ts64_mg(struct timespec64 *ts); +extern unsigned long timekeeping_get_mg_floor_swaps(void); void getboottime64(struct timespec64 *ts); diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index ebfe846ebde35850c3e4d9c2cc45642c983d137f..e8b713e8ce5553f9e7de96c8e7c089714e0aa7a4 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -2488,6 +2488,7 @@ void ktime_get_real_ts64_mg(struct timespec64 *ts) if (atomic64_try_cmpxchg(&mg_floor, &old, mono)) { ts->tv_nsec = 0; timespec64_add_ns(ts, nsecs); + timekeeping_inc_mg_floor_swaps(); } else { /* * Another task changed mg_floor since "old" was fetched. diff --git a/kernel/time/timekeeping_debug.c b/kernel/time/timekeeping_debug.c index b73e8850e58d9c5b291559f475e67c7ed47c2db3..36d359cad7ca1d821bf42f59b3e50f89b14afd40 100644 --- a/kernel/time/timekeeping_debug.c +++ b/kernel/time/timekeeping_debug.c @@ -17,6 +17,9 @@ #define NUM_BINS 32 +/* incremented every time mg_floor is updated */ +DEFINE_PER_CPU(unsigned long, timekeeping_mg_floor_swaps); + static unsigned int sleep_time_bin[NUM_BINS] = {0}; static int tk_debug_sleep_time_show(struct seq_file *s, void *data) @@ -53,3 +56,14 @@ void tk_debug_account_sleep_time(const struct timespec64 *t) (s64)t->tv_sec, t->tv_nsec / NSEC_PER_MSEC); } +unsigned long timekeeping_get_mg_floor_swaps(void) +{ + unsigned long sum = 0; + int cpu; + + for_each_possible_cpu(cpu) + sum += data_race(per_cpu(timekeeping_mg_floor_swaps, cpu)); + + return sum; +} + diff --git a/kernel/time/timekeeping_internal.h b/kernel/time/timekeeping_internal.h index 4ca2787d1642e2f52bf985607ca3b03785cf9a50..0bbae825bc0226e4eed64e73fe3b454986c7573f 100644 --- a/kernel/time/timekeeping_internal.h +++ b/kernel/time/timekeeping_internal.h @@ -10,9 +10,24 @@ * timekeeping debug functions */ #ifdef CONFIG_DEBUG_FS + +DECLARE_PER_CPU(unsigned long, timekeeping_mg_floor_swaps); + +static inline void timekeeping_inc_mg_floor_swaps(void) +{ + this_cpu_inc(timekeeping_mg_floor_swaps); +} + extern void tk_debug_account_sleep_time(const struct timespec64 *t); + #else + #define tk_debug_account_sleep_time(x) + +static inline void timekeeping_inc_mg_floor_swaps(void) +{ +} + #endif #ifdef CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE