From nobody Fri Dec 19 09:19:16 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4dXhn05HvPz6LBND for ; Fri, 19 Dec 2025 09:19:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dXhn01wHJz44nf for ; Fri, 19 Dec 2025 09:19:16 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1766135956; h=from:from: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; bh=zY7eeHk6pL2cDod3hGUjQDUQaL6KEimoFzAIK/mhFeI=; b=jYL/lKjUHOFOUBTyKu8fTHwi69oSjITtj1K6e3hvYE8bJDOfmvsmKfkf+u3KIL0EaoEfKj EQ16EuxR3o2Qkqkd6qeBd3prdJTHN6WdDbdGi0PgJG8MmCzu6n5UOpdhCUfvAkJISEvS2r tlzMvZ8UMcxevswy+E0g7LhVi5F69u7BKhpXokibePG5b6zADgn7up7I5wVu+Ky6QJYtMR ef4xPGLrjuXrY216ff39Nr6gDlMqygVQWZer6GAuJFv4yE2v4ThFfIxa0oTA1ac4q3koCm FVluzOkNvvfz3571fJhhG5VPcxZTydSyYzz2Ee4TTD5UbMPUgYSvurNf+16rRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1766135956; h=from:from: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; bh=zY7eeHk6pL2cDod3hGUjQDUQaL6KEimoFzAIK/mhFeI=; b=ubnC4J/kGcMTSfzeL6SRLz6We7soNHfXAvtFeVU3Zw47uTDjItPzp3gzKQgsUOdG1FLdRW 9q+SQvd5kCcZ8bIhoAMxDil1SFDof/LyL2OD+uIJMs/d4aLM2oY9E/rLePD/xnfRw0v+ni vg6we2BZTopiHGxVvryNEOd/YJRY9XeXUGdTFNrZ/KTJLD3pFoDJ5gBQbAbJkfe+gIzmLe IXsmpHcgZrebHZS0ICx0bPu8MBpJNqx1vu6Qmr5XfAmrofG7SkOMZC4uw72V+0aIJWi1CS uXYw+oynfooayPOhLd23iBo8xB/IvjjRIoFR6lC3IXzZwRpRez7kS6kwo1/yAw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1766135956; a=rsa-sha256; cv=none; b=ZhztGJXTT8WOIOgN1usSKNcjn3h8Pkfty0cQXNYhRDhGx9ESOJqBRDkANj3rptyPvuhD2c g+Hz3Da8/t0YOjHTt9vU54PadhY9rcnE0QdhExI4075Y7mSWgMGWx38A1h4Z5fat6KL59V MkVOvUjpiQF7eGiEVqrkU9SZ0euA5XnNiUcpkfzeHOPKidy35EE8/Sq7ajkBY7ag/ClJop azHWDs85urIp4CPKchxQP5F5xg5OBsNij+KcjpFQACYBnCd5umdG80s3hviKIAVbC+tKf9 x2WlRpJzrOQFdh2WLBEXZz/OhPdE0040Mu+Awbg6pRgLt8gOgLY3EvmtP3qtrg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dXhn019Bzz1GYf for ; Fri, 19 Dec 2025 09:19:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3f880 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 19 Dec 2025 09:19:16 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Mark Johnston From: Olivier Certner Subject: git: fd404e957dd9 - stable/14 - racct: Fix accounting of CPU time for the system idle process List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: fd404e957dd93d0e8525e4bc37df3f66610ca19d Auto-Submitted: auto-generated Date: Fri, 19 Dec 2025 09:19:16 +0000 Message-Id: <69451894.3f880.c951a04@gitrepo.freebsd.org> The branch stable/14 has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=fd404e957dd93d0e8525e4bc37df3f66610ca19d commit fd404e957dd93d0e8525e4bc37df3f66610ca19d Author: Mark Johnston AuthorDate: 2025-05-01 13:59:55 +0000 Commit: Olivier Certner CommitDate: 2025-12-19 09:16:46 +0000 racct: Fix accounting of CPU time for the system idle process - Add a flag which cleanly indicates that a given process is the system idle process. - Modify racctd() to skip over the idle proc when aggregating CPU time and other metrics which don't apply to the idle thread. - Remove handling for idle threads from racct_getpcpu(). PR: 269097 Reviewed by: olce, kib Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D50073 (cherry picked from commit 33be1632047c05dbfcc139476e05f49c3a86d560) --- sys/kern/kern_idle.c | 3 +++ sys/kern/kern_racct.c | 22 ++++------------------ sys/sys/proc.h | 2 +- 3 files changed, 8 insertions(+), 19 deletions(-) diff --git a/sys/kern/kern_idle.c b/sys/kern/kern_idle.c index 0569659bdc73..0d0f496a1a03 100644 --- a/sys/kern/kern_idle.c +++ b/sys/kern/kern_idle.c @@ -83,4 +83,7 @@ idle_setup(void *dummy) #ifdef SMP } #endif + PROC_LOCK(p); + p->p_flag |= P_IDLEPROC; + PROC_UNLOCK(p); } diff --git a/sys/kern/kern_racct.c b/sys/kern/kern_racct.c index b121e24b9354..13df4724f860 100644 --- a/sys/kern/kern_racct.c +++ b/sys/kern/kern_racct.c @@ -322,15 +322,13 @@ racct_getpcpu(struct proc *p, u_int pcpu) u_int swtime; #ifdef SCHED_4BSD fixpt_t pctcpu, pctcpu_next; -#endif -#ifdef SMP - struct pcpu *pc; - int found; #endif fixpt_t p_pctcpu; struct thread *td; ASSERT_RACCT_ENABLED(); + KASSERT((p->p_flag & P_IDLEPROC) == 0, + ("racct_getpcpu: idle process %p", p)); /* * If the process is swapped out, we count its %cpu usage as zero. @@ -350,19 +348,6 @@ racct_getpcpu(struct proc *p, u_int pcpu) p_pctcpu = 0; FOREACH_THREAD_IN_PROC(p, td) { - if (td == PCPU_GET(idlethread)) - continue; -#ifdef SMP - found = 0; - STAILQ_FOREACH(pc, &cpuhead, pc_allcpu) { - if (td == pc->pc_idlethread) { - found = 1; - break; - } - } - if (found) - continue; -#endif thread_lock(td); #ifdef SCHED_4BSD pctcpu = sched_pctcpu(td); @@ -1258,7 +1243,8 @@ racctd(void) FOREACH_PROC_IN_SYSTEM(p) { PROC_LOCK(p); - if (p->p_state != PRS_NORMAL) { + if (p->p_state != PRS_NORMAL || + (p->p_flag & P_IDLEPROC) != 0) { if (p->p_state == PRS_ZOMBIE) racct_set(p, RACCT_PCTCPU, 0); PROC_UNLOCK(p); diff --git a/sys/sys/proc.h b/sys/sys/proc.h index a094af09a21a..06506f7d03ed 100644 --- a/sys/sys/proc.h +++ b/sys/sys/proc.h @@ -807,7 +807,7 @@ struct proc { lock. */ #define P_CONTROLT 0x00000002 /* Has a controlling terminal. */ #define P_KPROC 0x00000004 /* Kernel process. */ -#define P_UNUSED3 0x00000008 /* --available-- */ +#define P_IDLEPROC 0x00000008 /* Container for system idle threads. */ #define P_PPWAIT 0x00000010 /* Parent is waiting for child to exec/exit. */ #define P_PROFIL 0x00000020 /* Has started profiling. */