From nobody Thu May 1 14:22:39 2025 X-Original-To: dev-commits-src-main@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 4ZpGV76FKYz5vDrB; Thu, 01 May 2025 14:22:39 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZpGV74kdZz3scv; Thu, 01 May 2025 14:22:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746109359; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ND5phxxQd8MofJ/LFPX6zKxTXrAR/oyQJYI6u2HhOwA=; b=tNogap325zAthu/3FhL47OMEYXidw28FnWFSmE9cEukH/IqtTLZTe5DFgePZkyU0kBLT7k vgm49YNV/8egEhJCqsnOWXmXhbephE9GRDBLrjY8aArcu6xrLKkTXZLlJgaAw2tt0Dj5RN P5ObdRewK2Bv9cQyDwomkecf6nI5/dALQH6vYyUsB7kPKRHsIRW1kP1XA1oZw16BzJxPoS rFIcjK9/PaEzGqT/d1EDwjvTunf/VX9mC/1pdoT/rdlACrJkUkxcnnacPwTPqxPgOiYna9 gSmDBrbprQ8SPPcnh9nUiUVixoNOvqDqn40Lox1h6w4akROfcU8BI6fHLMNy/w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746109359; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ND5phxxQd8MofJ/LFPX6zKxTXrAR/oyQJYI6u2HhOwA=; b=ebimbB9h7r2xgGiiLUzHk9z8pODz+ykmL4KhR9P2D1cvUC/MaUUCAeBxjpl0qCbbdbpw53 EiMOLcBMlDmphPyxVcteHqiOsCXuYCxKpAaX6r6yaeS71fH2B2UjaQITJMUY+KRwtgYbZZ 7uxiqlmWzIWc/w8h5PhyIX00iH2NawEmchve9B+z9EIope5tSLvWAZZ2PYB44I7L5JQTze sEnORUJbkzbP/ujUhJYbPmUzcvQQCa7wbmPhTT0BvDcdBCQJuzXwIMIrUeZBhWoZ34EgNM oDm7aWOQgR4EW4bss2nMYz0XO00GBfXFKHlOEEvC/Zs7Inlg3wg+8Y+V+xZoyg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1746109359; a=rsa-sha256; cv=none; b=YjseCH0eScSk7z0pgoV0PY1Wmc05Tts8O+D+jvzEPZVWlLrumid2JDHoW8d2j+YZlDUH99 PC5z9lIgFuHV6v1E8BLHArb0I9YIQL9COhpb9l70wC0fpEBrsc52wRbx7kRtVzJur/9O3T VbzT8JEm07qTrGUy3FOQnxiaJmD/iTvpMDoTpW9MnEkkIko4BlDgCYR8PJk2PY0OlemiJu 8NZSOWVVWLuE2Cc82N3TXCc7KOKblVqF3e1m5OB9Qzdq+mElhCXDFLH5kwnnFcTKkOxeps l4If09oWoeB3KB2U4SdyCQ9D/0gsBktghi+yuw4wTEfB3eo40cbhqfbuxCgdtQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ZpGV74JzQzWsR; Thu, 01 May 2025 14:22:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 541EMdDA051549; Thu, 1 May 2025 14:22:39 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 541EMdLs051546; Thu, 1 May 2025 14:22:39 GMT (envelope-from git) Date: Thu, 1 May 2025 14:22:39 GMT Message-Id: <202505011422.541EMdLs051546@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 33be1632047c - main - racct: Fix accounting of CPU time for the system idle process List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 33be1632047c05dbfcc139476e05f49c3a86d560 Auto-Submitted: auto-generated The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=33be1632047c05dbfcc139476e05f49c3a86d560 commit 33be1632047c05dbfcc139476e05f49c3a86d560 Author: Mark Johnston AuthorDate: 2025-05-01 13:59:55 +0000 Commit: Mark Johnston CommitDate: 2025-05-01 14:22:25 +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 --- 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 a8126de265b2..6be2a96958ed 100644 --- a/sys/kern/kern_idle.c +++ b/sys/kern/kern_idle.c @@ -82,4 +82,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 d900078fe5e2..cc84356cfc4e 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)); swtime = (ticks - p->p_swtick) / hz; @@ -344,19 +342,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); @@ -1252,7 +1237,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 46482f26e0ef..eb0b66618a9d 100644 --- a/sys/sys/proc.h +++ b/sys/sys/proc.h @@ -803,7 +803,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. */