From nobody Sun Feb 8 15:53:33 2026 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 193E8231CB0 for ; Fri, 7 Feb 2025 04:10:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738901444; cv=none; b=OgG0MyvPMa4anxRCzdBFmFhKDPgYqnOaZcXdjClWdscDQ/2rNd3of9HjhntaBRclsfeRxNRawmYggOk0zUfAiICLc8ou4C+PT/kY+pfyOFTqFoo6EX89kZ+1uTMJu3+tCC6cgI9z3hGFVVDjTaimaBiDOPaJ8jVYCelhV7oT18w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738901444; c=relaxed/simple; bh=LKw6HaeW05jbHUxXDx+rmwHbEdYlclYGnPRLLJQzy60=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NhkzYEk1DzrN1q6mCemceakhOU/AqUicRSUZVzZsic1UWU34mBtFtvNuT3uTiz3ZHLHhbMYIna7KqYa6RM9xM+ezLSq/qtpRP2FBMFRbRmQoAQpxeo3PRortkV3bPIDAquks1XKfImDX8qcoVPvLzVZrE8sudkNmnd57nXQuO9M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=bytedance.com; spf=pass smtp.mailfrom=bytedance.com; dkim=pass (2048-bit key) header.d=bytedance.com header.i=@bytedance.com header.b=UlhGKpb6; arc=none smtp.client-ip=209.85.216.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=bytedance.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bytedance.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bytedance.com header.i=@bytedance.com header.b="UlhGKpb6" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-2f9dcc3f944so328279a91.2 for ; Thu, 06 Feb 2025 20:10:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1738901442; x=1739506242; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WiWK8iJRg8z+aUiF8sWc5hRLfRD7QwQ2HIsrRNActc8=; b=UlhGKpb6zXysr6SZqmUaiY2FtTJ8HiMF/75i4C3nvr7jnkkzah6EkEL0/Mu3UKYTqq jvV2d80ykSjq0K1tbAdLAkKFQkyJIHqdPbGGB0XNwJTOYX7je3mtIKsZefbeh/F/Ab6A 9VhcBvjx0hsp90fz/bGDWeX5MfqllPgLtrkbiliNXMU4iyvcPWyCS7+8ix77gGWDk9T/ eSgBz4MARdfsoGat/4E8sqiE+DqB1chv1Kg/lo7LDt0nkc1961Tifse3FLjGmNSsMBHK OkObHteYHG0/6BSI9ZIPWcCdHVdkvvU7GlnEKjkwpT17tkVcVdyK+AcN469qOAlIEeza W9yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738901442; x=1739506242; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WiWK8iJRg8z+aUiF8sWc5hRLfRD7QwQ2HIsrRNActc8=; b=XOIA4uqmoXRhPeaTka48q9RqU3ZwG+wI8wBCQHkZKtHeIPqwkAQQRdC6/J6gFJ22RK Xsw5Dnbw5IYQKH1NIfhiKK/rHKJAn40fsz/K3OphuEDM4nVXvQAoq0cwIj+1EehFVvc3 k3t1r7iwDFRGTa6qsxr3mLd6msZtxcZI08cg3f4NZAnymU6kve0M7o+9QjAgd58wWX+2 pDjRQT7G8RU21d1oh6eNrlv8v8H3xNw9SZYlXNgIg1HFlBR5DeL/1NzsRwRoqzTd9/MT YSVoOPzz0BT+u2DnRXpbtDvcCQZ7yz1uI5u7p6NyDUmroWyCsX6dKhKUVGvvTarp6ist K78A== X-Forwarded-Encrypted: i=1; AJvYcCVYQT5uFi/w/yQMuHJKZJmGBp3VCvgCNEFjQ/X0SqAkQoe/Ewl63vXvgvr6TFNZkLmIizEyiSVs+lmmm8M=@vger.kernel.org X-Gm-Message-State: AOJu0YzL4DXdm1ppEVTl82VTirV9Oy83tCxTtvyZeA13/mUz+KO1eC1E RA/SjNACdjQHvWtkW+2fjYYF24JnHp232CHaJGXzuYszbqk3Dx5T/yCrPdjuosQ= X-Gm-Gg: ASbGncvtqO9GOsCyPBgOFLzToBhi+0CHm4Y3WpacZXsxvJ5ZXN5oAgSEZyNoWXUqExS myvXirMEVAjm8xcNQYMfaUshQ9SUUBtAl+vI4B7DXD5oQaVy1IgwyWu05TtltxCw8fe3cw/PcVt INNiWbvGa2O81e5qN/SHQi0NsR7eFBE0mksx2Q5DpT5j9b0oV/yT7zoZLsBvaPUharCHRx1jj7M Z39Bl6hAXPNwxXns1TSWRKZ2sXi8Jcix5tRt2v3DOW5sMTrQIz/QWRk607xlj57/zzzHuTfrEl8 O55cZNPgvN/0j0MYQm++OLct5yqKgOrL7q62hrmFn+SaoOBGibze6Q== X-Google-Smtp-Source: AGHT+IGfN8nWMRRbiHB1N/J5PGoY6ixrDg2dHrmz1XRhdmGLzjRZe+YvfBS7TcrzSJ8pWsfzRBB2Tw== X-Received: by 2002:a05:6a20:4386:b0:1e1:a434:296b with SMTP id adf61e73a8af0-1ee03a23f1bmr1577240637.1.1738901442330; Thu, 06 Feb 2025 20:10:42 -0800 (PST) Received: from C02DV8HUMD6R.bytedance.net ([139.177.225.244]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ad51aee7fbasm2135485a12.46.2025.02.06.20.10.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 20:10:41 -0800 (PST) From: Abel Wu To: Johannes Weiner , Tejun Heo , =?UTF-8?q?Michal=20Koutn=C3=BD?= , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Abel Wu , Yury Norov , Bitao Hu , Thomas Gleixner , Andrew Morton , Chen Ridong Cc: cgroups@vger.kernel.org (open list:CONTROL GROUP (CGROUP)), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v3 1/2] cgroup/rstat: Fix forceidle time in cpu.stat Date: Fri, 7 Feb 2025 12:10:00 +0800 Message-Id: <20250207041012.89192-2-wuyun.abel@bytedance.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20250207041012.89192-1-wuyun.abel@bytedance.com> References: <20250207041012.89192-1-wuyun.abel@bytedance.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" The commit b824766504e4 ("cgroup/rstat: add force idle show helper") retrieves forceidle_time outside cgroup_rstat_lock for non-root cgroups which can be potentially inconsistent with other stats. Rather than reverting that commit, fix it in a way that retains the effort of cleaning up the ifdef-messes. Fixes: b824766504e4 ("cgroup/rstat: add force idle show helper") Signed-off-by: Abel Wu --- kernel/cgroup/rstat.c | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/kernel/cgroup/rstat.c b/kernel/cgroup/rstat.c index 5877974ece92..c2784c317cdd 100644 --- a/kernel/cgroup/rstat.c +++ b/kernel/cgroup/rstat.c @@ -613,36 +613,33 @@ static void cgroup_force_idle_show(struct seq_file *s= eq, struct cgroup_base_stat void cgroup_base_stat_cputime_show(struct seq_file *seq) { struct cgroup *cgrp =3D seq_css(seq)->cgroup; - u64 usage, utime, stime, ntime; + struct cgroup_base_stat bstat; =20 if (cgroup_parent(cgrp)) { cgroup_rstat_flush_hold(cgrp); - usage =3D cgrp->bstat.cputime.sum_exec_runtime; + bstat =3D cgrp->bstat; cputime_adjust(&cgrp->bstat.cputime, &cgrp->prev_cputime, - &utime, &stime); - ntime =3D cgrp->bstat.ntime; + &bstat.cputime.utime, &bstat.cputime.stime); cgroup_rstat_flush_release(cgrp); } else { - /* cgrp->bstat of root is not actually used, reuse it */ - root_cgroup_cputime(&cgrp->bstat); - usage =3D cgrp->bstat.cputime.sum_exec_runtime; - utime =3D cgrp->bstat.cputime.utime; - stime =3D cgrp->bstat.cputime.stime; - ntime =3D cgrp->bstat.ntime; + root_cgroup_cputime(&bstat); } =20 - do_div(usage, NSEC_PER_USEC); - do_div(utime, NSEC_PER_USEC); - do_div(stime, NSEC_PER_USEC); - do_div(ntime, NSEC_PER_USEC); + do_div(bstat.cputime.sum_exec_runtime, NSEC_PER_USEC); + do_div(bstat.cputime.utime, NSEC_PER_USEC); + do_div(bstat.cputime.stime, NSEC_PER_USEC); + do_div(bstat.ntime, NSEC_PER_USEC); =20 seq_printf(seq, "usage_usec %llu\n" "user_usec %llu\n" "system_usec %llu\n" "nice_usec %llu\n", - usage, utime, stime, ntime); + bstat.cputime.sum_exec_runtime, + bstat.cputime.utime, + bstat.cputime.stime, + bstat.ntime); =20 - cgroup_force_idle_show(seq, &cgrp->bstat); + cgroup_force_idle_show(seq, &bstat); } =20 /* Add bpf kfuncs for cgroup_rstat_updated() and cgroup_rstat_flush() */ --=20 2.37.3 From nobody Sun Feb 8 15:53:33 2026 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EFC7A231C9F for ; Fri, 7 Feb 2025 04:10:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738901459; cv=none; b=dyNJ1hymryk8ZPNn4/yn5u369nte1/5hmHpELjr8G4FYKUv5zU8KwniHAldpjhYR+ZcGt2AdaCZCWKVJqH5LLz6YNGMUdOLFk/cHXvu7bm3tPtkWkXJDt1tVRHCVB2DBzNuLzsoqwDooIWogd1zgx6QU9xNmzseL8K8HRLlUneg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738901459; c=relaxed/simple; bh=/WuqGtx+K6eP+iK0k2Ti/Yj9IjGoQodgI8gj6iHK1pk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=dDQxj3NEHyl7cmL98Qq20dxpG9CnohCLyA5t4UMHKfp0RUFPrpFjJSptk5LQKokQ6+bi9ZAW2oEadXbDW7PAZbnZEG+iQ105DlgwElAnYUhGcvmOXflO63DgByFe8AzRnnk6dcUSdp+u5gBSBGGqQh8bzqopzv3gZrzlglghK5A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=bytedance.com; spf=pass smtp.mailfrom=bytedance.com; dkim=pass (2048-bit key) header.d=bytedance.com header.i=@bytedance.com header.b=LFaiz+7s; arc=none smtp.client-ip=209.85.214.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=bytedance.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bytedance.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bytedance.com header.i=@bytedance.com header.b="LFaiz+7s" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-218c8ac69faso3629615ad.3 for ; Thu, 06 Feb 2025 20:10:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1738901457; x=1739506257; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=A7F6Jk5p5R7n2K53wBQ1De4ty3jblv5oRK/XfgrdxAM=; b=LFaiz+7sYZPPBaYHrBhsJDEo7TuiBawVoqLlRrXw6wNa5MtEqYBjBulTikXfPn9RCU sv0EKfX3eg5m0FxfnMeXEl16v6je/wznr0Y5K42qGI0U/3IDvdwYzvv+ntlkWZGSFJp0 H3EpD53RNnRyulFJbkY4qeimKSJoUV/TS68z/xmk58aLVESiaVi9dNVP06UwxEuuXlb/ CcV1K1z3yGGnWS4bxqa9LpfebPlW+7JWlBiUdNO62ZOg+AV3CI4/pvFfj6FEdlg3IkoH gBiSKaMp1XmD+pQvGD4nmOj6KxUzbpKPQLYbDtmIc3nDDhoUNFnhT4kLXv6nILvySzKK C3Og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738901457; x=1739506257; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=A7F6Jk5p5R7n2K53wBQ1De4ty3jblv5oRK/XfgrdxAM=; b=L/MOMwxgRIkdKYN/4gT5ROVMgPKgY4gXeCDB5cq7CbvYTfpJx4p+bxwBjH1qLDTfU3 Mrhw5UG8CI42p435ro3nsu2d2HQ8IH3zCiWEMGcEuUGb1owP3+okk5oD2IdiIFtBiKPI WR6urgOxfhUJ7/Aicbd9XQALVctFEAIQOrc+iRwg6hTd33ToiiP0S0Fs/SsLZ3vL6GBV OnY/8dGDzo4XO0RQ6mG9O+sHqMeiyheujK6KvsDmzNtYQYB9mxtJySLMGVgrZI6DLfm1 8GWdsKGh9uabEBsTIo/0U41aJN/QzpoP0kxItcCjGzMTEXPRRbWL5avAJwiY6kuFtJqt cqgQ== X-Forwarded-Encrypted: i=1; AJvYcCUbre/TBZO3XbuNPxSnXJvDei5nCSQYtfpWGpkgGE+6VOEx+gietZ8vfte/CwAaQpH3GjpY0IXbBLGXeb8=@vger.kernel.org X-Gm-Message-State: AOJu0Ywy9BmDUyO79GOpfQVAQET3BAxP8ovkWZaHpo4bp4T/Qk9AVKv8 +PZdvbuFW++vPPJ1IwOIfxdnqpOMSOLgt2raRxezniDtwkiYy9AlqKUtI5cING8= X-Gm-Gg: ASbGncsMUA3789fG7yPR5DhWBMMp1UNxCS7p7ABHVYq8aWTxPzOKC5tzKLYz2W9+sjo LQaxp+M2ZbDuK7D9YOD/MCBPfqREC0KEkxvreyNAfgtMeKNc8QM5O1/xIiC3CpJenxBCi+myMGL Cepm9o+rsAQu3yz6agWRhwR5wZw0qaPjBBfDusRuXtnfxHzbz196IJEqIjHliqE6TAsj43U7Mvd FObRTccxnQBoNFGSHSWpVqepte3qs2Egj37R3E4PJikYFTOMmUvdu76fqVu0074GcQo6qENl/RE pWF0Fx5y1hHX6DWfad2PVbObo5uk3UX2JIGBH9Z4KguWdoOzYigT+Q== X-Google-Smtp-Source: AGHT+IGMttM8ydsBtBmcEXAfQlBmTHGrdwn3FVFgbbgH385LTqOErMCIGNcyDKcuP5ZFLCLDmNfYSg== X-Received: by 2002:a05:6a20:c88b:b0:1e1:9f77:da7b with SMTP id adf61e73a8af0-1ee03b0647amr1378658637.7.1738901457130; Thu, 06 Feb 2025 20:10:57 -0800 (PST) Received: from C02DV8HUMD6R.bytedance.net ([139.177.225.244]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ad51aee7fbasm2135485a12.46.2025.02.06.20.10.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 20:10:56 -0800 (PST) From: Abel Wu To: Johannes Weiner , Tejun Heo , =?UTF-8?q?Michal=20Koutn=C3=BD?= , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , Bitao Hu , Abel Wu , Andrew Morton , Yury Norov , Chen Ridong Cc: cgroups@vger.kernel.org (open list:CONTROL GROUP (CGROUP)), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v3 2/2] cgroup/rstat: Add run_delay accounting for cgroups Date: Fri, 7 Feb 2025 12:10:01 +0800 Message-Id: <20250207041012.89192-3-wuyun.abel@bytedance.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20250207041012.89192-1-wuyun.abel@bytedance.com> References: <20250207041012.89192-1-wuyun.abel@bytedance.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" The per-task and per-cpu accounting have already been tracked by t->sched_info.run_delay and rq->rq_sched_info.run_delay respectively. Extends this to also include cgroups. The "some" field of cpu.pressure indicator may lose the insight into how severely one cgroup is stalled on certain cpu, because PSI tracks stall time for each cpu through: tSOME[cpu] =3D time(nr_delayed_tasks[cpu] !=3D 0) which turns nr_delayed_tasks[cpu] into boolean value. So together with this cgroup level run_delay accounting, the scheduling info of cgroups will be better illustrated. Only cgroup v2 is supported. Similar to the task accounting, the cgroup accounting requires that CONFIG_SCHED_INFO is enabled. Signed-off-by: Abel Wu --- include/linux/cgroup-defs.h | 3 +++ include/linux/kernel_stat.h | 14 ++++++++++++++ kernel/cgroup/rstat.c | 25 +++++++++++++++++++++++++ kernel/sched/cputime.c | 12 ++++++++++++ kernel/sched/stats.h | 3 +++ 5 files changed, 57 insertions(+) diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h index 1b20d2d8ef7c..287366e60414 100644 --- a/include/linux/cgroup-defs.h +++ b/include/linux/cgroup-defs.h @@ -328,6 +328,9 @@ struct cgroup_base_stat { u64 forceidle_sum; #endif u64 ntime; +#ifdef CONFIG_SCHED_INFO + u64 run_delay; +#endif }; =20 /* diff --git a/include/linux/kernel_stat.h b/include/linux/kernel_stat.h index b97ce2df376f..e2ac42a166c1 100644 --- a/include/linux/kernel_stat.h +++ b/include/linux/kernel_stat.h @@ -31,6 +31,15 @@ enum cpu_usage_stat { CPUTIME_FORCEIDLE, #endif NR_STATS, + +#ifdef CONFIG_SCHED_INFO + /* + * Instead of cputime, run_delay is tracked through + * sched_info by task and rq, so there is no need to + * extend the cpustat[] array. + */ + CPUTIME_RUN_DELAY, +#endif }; =20 struct kernel_cpustat { @@ -141,4 +150,9 @@ extern void account_idle_ticks(unsigned long ticks); extern void __account_forceidle_time(struct task_struct *tsk, u64 delta); #endif =20 +#ifdef CONFIG_SCHED_INFO +extern void account_run_delay_time(struct task_struct *tsk, u64 delta); +extern u64 get_cpu_run_delay(int cpu); +#endif + #endif /* _LINUX_KERNEL_STAT_H */ diff --git a/kernel/cgroup/rstat.c b/kernel/cgroup/rstat.c index c2784c317cdd..504da76553ee 100644 --- a/kernel/cgroup/rstat.c +++ b/kernel/cgroup/rstat.c @@ -445,6 +445,9 @@ static void cgroup_base_stat_add(struct cgroup_base_sta= t *dst_bstat, dst_bstat->forceidle_sum +=3D src_bstat->forceidle_sum; #endif dst_bstat->ntime +=3D src_bstat->ntime; +#ifdef CONFIG_SCHED_INFO + dst_bstat->run_delay +=3D src_bstat->run_delay; +#endif } =20 static void cgroup_base_stat_sub(struct cgroup_base_stat *dst_bstat, @@ -457,6 +460,9 @@ static void cgroup_base_stat_sub(struct cgroup_base_sta= t *dst_bstat, dst_bstat->forceidle_sum -=3D src_bstat->forceidle_sum; #endif dst_bstat->ntime -=3D src_bstat->ntime; +#ifdef CONFIG_SCHED_INFO + dst_bstat->run_delay -=3D src_bstat->run_delay; +#endif } =20 static void cgroup_base_stat_flush(struct cgroup *cgrp, int cpu) @@ -551,6 +557,11 @@ void __cgroup_account_cputime_field(struct cgroup *cgr= p, case CPUTIME_FORCEIDLE: rstatc->bstat.forceidle_sum +=3D delta_exec; break; +#endif +#ifdef CONFIG_SCHED_INFO + case CPUTIME_RUN_DELAY: + rstatc->bstat.run_delay +=3D delta_exec; + break; #endif default: break; @@ -596,6 +607,9 @@ static void root_cgroup_cputime(struct cgroup_base_stat= *bstat) bstat->forceidle_sum +=3D cpustat[CPUTIME_FORCEIDLE]; #endif bstat->ntime +=3D cpustat[CPUTIME_NICE]; +#ifdef CONFIG_SCHED_INFO + bstat->run_delay +=3D get_cpu_run_delay(i); +#endif } } =20 @@ -610,6 +624,16 @@ static void cgroup_force_idle_show(struct seq_file *se= q, struct cgroup_base_stat #endif } =20 +static void cgroup_run_delay_show(struct seq_file *seq, struct cgroup_base= _stat *bstat) +{ +#ifdef CONFIG_SCHED_INFO + u64 run_delay =3D bstat->run_delay; + + do_div(run_delay, NSEC_PER_USEC); + seq_printf(seq, "run_delay_usec %llu\n", run_delay); +#endif +} + void cgroup_base_stat_cputime_show(struct seq_file *seq) { struct cgroup *cgrp =3D seq_css(seq)->cgroup; @@ -640,6 +664,7 @@ void cgroup_base_stat_cputime_show(struct seq_file *seq) bstat.ntime); =20 cgroup_force_idle_show(seq, &bstat); + cgroup_run_delay_show(seq, &bstat); } =20 /* Add bpf kfuncs for cgroup_rstat_updated() and cgroup_rstat_flush() */ diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c index 5d9143dd0879..e6be57cdb54e 100644 --- a/kernel/sched/cputime.c +++ b/kernel/sched/cputime.c @@ -243,6 +243,18 @@ void __account_forceidle_time(struct task_struct *p, u= 64 delta) } #endif =20 +#ifdef CONFIG_SCHED_INFO +void account_run_delay_time(struct task_struct *p, u64 delta) +{ + cgroup_account_cputime_field(p, CPUTIME_RUN_DELAY, delta); +} + +u64 get_cpu_run_delay(int cpu) +{ + return cpu_rq(cpu)->rq_sched_info.run_delay; +} +#endif + /* * When a guest is interrupted for a longer amount of time, missed clock * ticks are not redelivered later. Due to that, this function may on diff --git a/kernel/sched/stats.h b/kernel/sched/stats.h index 19cdbe96f93d..fdfd04a89b05 100644 --- a/kernel/sched/stats.h +++ b/kernel/sched/stats.h @@ -252,7 +252,9 @@ static inline void sched_info_dequeue(struct rq *rq, st= ruct task_struct *t) t->sched_info.max_run_delay =3D delta; if (delta && (!t->sched_info.min_run_delay || delta < t->sched_info.min_r= un_delay)) t->sched_info.min_run_delay =3D delta; + rq_sched_info_dequeue(rq, delta); + account_run_delay_time(t, delta); } =20 /* @@ -279,6 +281,7 @@ static void sched_info_arrive(struct rq *rq, struct tas= k_struct *t) t->sched_info.min_run_delay =3D delta; =20 rq_sched_info_arrive(rq, delta); + account_run_delay_time(t, delta); } =20 /* --=20 2.37.3