From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from CWXP265CU008.outbound.protection.outlook.com (mail-ukwestazon11020115.outbound.protection.outlook.com [52.101.195.115]) (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 C180B3B05AF for ; Tue, 25 Aug 2026 18:46:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.195.115 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787683620; cv=fail; b=XQYu5TbJ0LT2VSB1vQIYCAQrv49Gn1R4zjs/jWdpWYjUR0J4m4MwMxCnxb4v1aO3+3gPTJMFn/QO8waJKwu0WAU8l4uSXO/cGfGZ5tCbvMcNUIVj6EL76QCmQxpMy+GJBSsqF+hwWsk36o+G9IYd69XRA9h8IJekco+DwFYolRU= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787683620; c=relaxed/simple; bh=bYChyL1EEXS8z4NdNcWvzhbQbozIYqmPSC3FYsbWxhQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=N24b/Iqsy0p7LG6iwrcBJ1GngaW4dDn1CxOUPa18PwQf5KH4FTKJ6nQc2cjviCWgEn3ASObETJNP9souZJ0ZvG54CM6fnZxuw8xhm9xImnKzfWvXE+pq8IOk4ulZvl0x0zpKgkDcD9YYwWlixYQoXZ/fMc6WSHViiwHDnivx1hI= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com; spf=pass smtp.mailfrom=atomlin.com; arc=fail smtp.client-ip=52.101.195.115 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atomlin.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dPmpU6AWKgLk4YOh5r3ex0WQg/hRYGwGgW7TdZZ0hb1HTYPt1E+OSjcyEe7CaIoC7OF8RpNLXfleEe7298JzgjYTe8F8aBhjbc0SWK5h4g2CxOzd3ZJN0lONajQxHjw4SLwTPPeWF9/v7XXnHArY5vFdaiDA9ERa+zVXjCeR7pNtOSqsLkKsYCzDIY2mMMSsRE9QUnE9IfQUr78xedQTVtFrLTtGhGkobLsl7DyQrr5PFfcq5tP/vqOl6zrmKD2gAfGkinJdlSE1GD1GaR8UJcWy0XJAtRL8mUwI6gMvgCteQyXmMDkghAp1GoQmChUpggKpcHA34W6Y2AIk8vFSVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=8YO/K+uCFDFm+dQzpvNntelCS2/7Y787NdbN+4/KaOw=; b=yIcP35EkKENhKUtO+lTgTgrFE7j/7d5DUOl/uGhQFkIgUVgdtE4s61jT9O3EJbCsuH1JQFkrcph4Gli2DVWo59EK1TaysT0zcb5Wsz8xEuNVBO6RdHgkFzoF9l5aFD5yZGHv/KzkECvQckNsAO+LGAl67L6swCxEOUW4x3BlTZUwmfescrKh/QxC8fv1F+OFfSW9H4hnXtdZLFrCEaS6lG5jJ44GoxgN0SEMu5N55Q7lC6bxLyH5+SCWeaB1rHOXIvsWceOaN9oQkMNbJysAnSMPrJlFJaBCc+2aBUFr1ckfi4HY5OrRSz/6FnKvJuIu8N7wInmtu3eQ74c9MiC75Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atomlin.com; dmarc=pass action=none header.from=atomlin.com; dkim=pass header.d=atomlin.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=atomlin.com; Received: from LO6P123MB6616.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:2b2::11) by LO7P123MB7501.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:40c::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.8; Tue, 25 Aug 2026 18:46:51 +0000 Received: from LO6P123MB6616.GBRP123.PROD.OUTLOOK.COM ([fe80::3975:c5e7:bc1a:f383]) by LO6P123MB6616.GBRP123.PROD.OUTLOOK.COM ([fe80::3975:c5e7:bc1a:f383%4]) with mapi id 15.21.0360.005; Tue, 25 Aug 2026 18:46:51 +0000 From: Aaron Tomlin To: mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org Cc: dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, vschneid@redhat.com, kprateek.nayak@amd.com, zhanxusheng1024@gmail.com, neelx@suse.com, atomlin@atomlin.com, chjohnst@mail.com, mproche@mail.com, sean@ashe.io, steve@abita.co, rishil1999@outlook.com, linux-kernel@vger.kernel.org Subject: [PATCH v6 6/6] sched/debug: Introduce per-CPU debugfs files Date: Tue, 25 Aug 2026 14:46:37 -0400 Message-ID: <20260825184637.888364-7-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260825184637.888364-1-atomlin@atomlin.com> References: <20260825184637.888364-1-atomlin@atomlin.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: LO4P123CA0288.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:195::23) To LO6P123MB6616.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:2b2::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LO6P123MB6616:EE_|LO7P123MB7501:EE_ X-MS-Office365-Filtering-Correlation-Id: c2e97e25-c81f-4e6f-b41d-08df02d93a0c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|7416014|1800799024|366016|3023799007|10067099003|56012099006|5023799004|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: 6xH38yBXr3MsHiKXUmyOkZTDOJ4Tejf7GCyjfN9xx27BKzDdVSIJOvoyU/e0aQciSjM/Ip5td7ldRi/zCoz9I/JIUznU5Gzz0sq5/N9szzgwfA4sY/ojykTzaiB5tmaCdnjWkv40gjeyCnrmysuCehf7L4L6n3YEbiWqcs2SpYQGNbSI/+NdO3pTYQzGEBmuES+FuwkBGMFlch8X/2hW2daxnmZsUW+zKGV1iz62UFRQzu9kiyEPrdq3sKtKdZBaQCQ6oawx/k8O29JqbYzn3ZsC2dK7zl5cAe5vy4sZmOF51MczL/dImbjkaVLDcuae/e/WGDJBIP2G+OzI/77IzAhJtGB2pI3Xt0tfpm6SuMiPgu1Bi6ct/oI0VYSMLnhigXbi4BBN9uQrM8QUwqutJkw4DXKu4BcYlio0JpsWtP1wn7hDpouw26Tte4Kvk2z9Q+bgFr49PsXpRsb3JQQ2rD5fh0bYrFApED7Lgzf+69jSv2PWppOOKI3+AxgMTr7x8EBP1AALr6fy3kdAZc4idO0Tam29FD9uNgAP5/MTLoG8YguH4ZmrEbfB3zHm/EBsiC+wrfkMioESEubbjBUcoEZn3cMtz5rBePg357YoBupJuy/li+Iuq39W7x5VUIvstuVyAdBBsadJXesstexEHm2QqaE2U9AZxQZX6KhNBpU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LO6P123MB6616.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(7416014)(1800799024)(366016)(3023799007)(10067099003)(56012099006)(5023799004)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?/Q9WEOZXT6eD4aYHSf7jw6efh4+FRc/+WKY7zJaazYcZVLx3HSwkLL7XaHCI?= =?us-ascii?Q?9vPHyECNjLPxvYhgAnZZKeFOpbojTnykSLYUFoov++umEl+MrrhvupWjHpOe?= =?us-ascii?Q?OG/MMmrd5eZ2g5hyy1dnqEI8v3v0nP81niyHmVK++AEL8C+RvFm1gW15Ndrl?= =?us-ascii?Q?7OX3jGWNlYCHqkPoCpEhIoZh+yi2XkRp3ijRv6asmSpxLTI1ddrNXECpMWfA?= =?us-ascii?Q?MUSFTYP555vzouF0PFWus/lB4tDnJz7pub971XAphrDZOMnY3xyT5m8oBN6X?= =?us-ascii?Q?eACSBp4j5mpgc33thmALLRX6et2xQvy4TB15Q8wOQdQFdiaLg58LWtwAMR/X?= =?us-ascii?Q?getaQjfiE1iEih1SfZq+ZnYaUPhtVZ8hwrGpUTG3IaIkyn/XNhoo75fQIsGf?= =?us-ascii?Q?EWoPvjbN7X3+u8tNdWv6oFS2iYBaK6XNVo7bUuIypI/ybBdEQXb+1Vip+EWT?= =?us-ascii?Q?G18JI3WLKw/V3jBfiwm7JQ4ZukJwvp8c36XKNwdZ3B7VopaZarIAa5aVscid?= =?us-ascii?Q?kDqFMUbJvh+5udVpb95cMBmmBB0Nqm3tH7Pq4ri0kKum9MZQqABZgCcNvWbn?= =?us-ascii?Q?FIMDPLnvKQoc/tRHxedKfbiRVzZn13R3qoop6796xLccjoElXl8c3w1jdm4N?= =?us-ascii?Q?DBf92tllA4LKW6rGqKpVeFZg4gKTfleumC/wIhdP3RJPJPmejpG8wIZeeeAM?= =?us-ascii?Q?c/a9Yct6yVNUN5V53h9blQOECDkOt1N81gvy/T91N5kynunBCRxJkrj4bMve?= =?us-ascii?Q?MnS1mt0H4+nkfUW0+chveY7qSePODedKizkITKlIJ25L5yFZGfEfHWvCY8C/?= =?us-ascii?Q?psZcr8SU4l2mLeMLJsTZUEpEWHV33d5GlaVynYkprcMFPyS5tiarq7UuYWtd?= =?us-ascii?Q?cvadGaxvMQxB9TMd8Xg+wSwk8CO1LbcGQgEuY0xSc0h5qyML5tmV9MnlaMVY?= =?us-ascii?Q?5uLCCmg41Xhwacdc7xJKmTH2XsOi6AXFoIiyEq+dSW1h3sOomkCthsl7flES?= =?us-ascii?Q?P/cD9GuiWmrONISnFSnvDwHm4OaI2NDL5DnnMZ8UpXDMyVUHacVFURwOwudl?= =?us-ascii?Q?i/qYjwPqMtQT754DcGBO46O42O9LJgs6IFfkvIqQYutyhKA/WCKJRPzIqAHS?= =?us-ascii?Q?gcQKsBtxwQWyUHaGf55PZtOSGg+W16lEfV2ZF0jjMbYAthGelKHLsFf0zvep?= =?us-ascii?Q?1jELWF1mXQDySje0hQd898SnJrZyBaCxNOatremX/NaRwCiIWHg5+gXLy3eB?= =?us-ascii?Q?6gmFaJUm0gUmYIS9JXpaHq3wDiQTUiOhT14qT1X8Pmbd8swtLO5Q7PtrwtH7?= =?us-ascii?Q?TU6+KqRYTXM6GPkMrPHSIjPTHOlLb0QCFxW6stOC9xu1HD8Vf6wLNtm0PkNB?= =?us-ascii?Q?Ht7mCb1tW2KWadP+mAFbZfxlUcM99L69VNX84+VAHZaK3p43ehINGgpFrhqz?= =?us-ascii?Q?ngVeQM80514irY2n9WjHbAlxgbVZeXioHlI0QGZREuR8opYOx2RaDE4QV+Po?= =?us-ascii?Q?fZ2ljO7yg4c69ObaIJLl1O9cBMx5LIK/G8WHv9zenaDXAR/r/U9q9K61aWn9?= =?us-ascii?Q?vwb1Yxkw9Cf3RYAL+OCeamdZi2C+prU5A3h6kIU4Z46r2BEf7qKDYywRbhnH?= =?us-ascii?Q?iaYky1QHVxJCwgvGGVY163vHwPK4+1wR2xXBqZG5N1NYyYprJq0SgFUAtwfu?= =?us-ascii?Q?vTXVZdWEiCYE+GDB/rLjppFv6/lizjM2/KUhqAAErqD4qjY9?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: c2e97e25-c81f-4e6f-b41d-08df02d93a0c X-MS-Exchange-CrossTenant-AuthSource: LO6P123MB6616.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Aug 2026 18:46:51.5868 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e6a32402-7d7b-4830-9a2b-76945bbbcb57 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 99AH9knLCIvz9JMBa6bjceySW/0CIxwjmzXItmQM8hS/VT5P/DNmbE80pKRDb1JNVaGBC4DBO1Fgjz87NmtMeQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO7P123MB7501 Currently, accessing scheduler debugging details for a specific CPU requires reading /sys/kernel/debug/sched/debug, which outputs information for all online CPUs. When investigating a latency anomaly or scheduling issue isolated to a specific CPU, accessing /sys/kernel/debug/sched/cpu/cpu/debug provides an immediate, targeted view of that runqueue. Add support for per-CPU debug files under: /sys/kernel/debug/sched/cpu/cpu/debug. Reading /sys/kernel/debug/sched/cpu/cpu/debug calls print_cpu() specifically for CPU , exposing CPU-specific runqueue details on demand. If the target CPU is currently offline, reading its file returns -ENODEV. Signed-off-by: Aaron Tomlin --- kernel/sched/debug.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index de453342481c..d70387659ae8 100644 --- a/kernel/sched/debug.c +++ b/kernel/sched/debug.c @@ -345,6 +345,7 @@ static const struct file_operations sched_verbose_fops = { }; static const struct seq_operations sched_debug_sops; +static void print_cpu(struct seq_file *m, int cpu); static int sched_debug_open(struct inode *inode, struct file *filp) { @@ -698,6 +699,47 @@ static const struct file_operations sched_cgroup_fops = { }; #endif +static int sched_debug_cpu_show(struct seq_file *m, void *v) +{ + unsigned long cpu = (unsigned long) m->private; + + if (!cpu_online(cpu)) + return -ENODEV; + + print_cpu(m, cpu); + return 0; +} + +static int sched_debug_cpu_open(struct inode *inode, struct file *filp) +{ + return single_open(filp, sched_debug_cpu_show, inode->i_private); +} + +static const struct file_operations sched_debug_cpu_fops = { + .open = sched_debug_cpu_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +static __init void debugfs_cpu_init(void) +{ + struct dentry *d_cpu_dir; + unsigned long cpu; + char buf[16]; + + d_cpu_dir = debugfs_create_dir("cpu", debugfs_sched); + + for_each_possible_cpu(cpu) { + struct dentry *d_cpu; + + snprintf(buf, sizeof(buf), "cpu%lu", cpu); + d_cpu = debugfs_create_dir(buf, d_cpu_dir); + + debugfs_create_file("debug", 0444, d_cpu, (void *) cpu, &sched_debug_cpu_fops); + } +} + static __init int sched_init_debug(void) { struct dentry __maybe_unused *numa, *llc; @@ -759,6 +801,7 @@ static __init int sched_init_debug(void) #ifdef CONFIG_SCHED_CLASS_EXT debugfs_ext_server_init(); #endif + debugfs_cpu_init(); return 0; } -- 2.55.0