From owner-p4-projects@FreeBSD.ORG Fri Nov 5 19:36:26 2010 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B4E2C1065694; Fri, 5 Nov 2010 19:36:26 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 77774106567A for ; Fri, 5 Nov 2010 19:36:26 +0000 (UTC) (envelope-from trasz@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 48BB48FC14 for ; Fri, 5 Nov 2010 19:36:26 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id oA5JaQ0M003492 for ; Fri, 5 Nov 2010 19:36:26 GMT (envelope-from trasz@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id oA5JaQuk003489 for perforce@freebsd.org; Fri, 5 Nov 2010 19:36:26 GMT (envelope-from trasz@freebsd.org) Date: Fri, 5 Nov 2010 19:36:26 GMT Message-Id: <201011051936.oA5JaQuk003489@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to trasz@freebsd.org using -f From: Edward Tomasz Napierala To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 185409 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Nov 2010 19:36:26 -0000 http://p4web.freebsd.org/@@185409?ac=10 Change 185409 by trasz@trasz_victim on 2010/11/05 19:36:20 Add cpu percentage accounting. Affected files ... .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_container.c#31 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#96 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_resource.c#50 edit .. //depot/projects/soc2009/trasz_limits/sys/sys/container.h#14 edit Differences ... ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_container.c#31 (text+ko) ==== @@ -93,6 +93,7 @@ case RUSAGE_NPROC: case RUSAGE_NTHR: case RUSAGE_WALLCLOCK: + case RUSAGE_PCTCPU: return (0); default: return (1); @@ -106,6 +107,7 @@ switch (resource) { case RUSAGE_RSS: case RUSAGE_WALLCLOCK: + case RUSAGE_PCTCPU: return (0); default: return (1); @@ -578,6 +580,7 @@ /* * XXX: Free this some other way. */ + rusage_set(p, RUSAGE_PCTCPU, 0); rusage_set(p, RUSAGE_FSIZE, 0); rusage_set(p, RUSAGE_NPTS, 0); rusage_set(p, RUSAGE_NTHR, 0); ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#96 (text+ko) ==== @@ -112,6 +112,7 @@ { "nshm", RUSAGE_NSHM }, { "shmsize", RUSAGE_SHMSIZE }, { "wallclock", RUSAGE_WALLCLOCK }, + { "pctcpu", RUSAGE_PCTCPU }, { NULL, -1 }}; static struct dict actionnames[] = { ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_resource.c#50 (text+ko) ==== @@ -626,6 +626,7 @@ static void rusage_cpu_task_fn(void *arg, int pending) { + int pctcpu; struct thread *td; struct proc *p; struct timeval wallclock; @@ -633,14 +634,20 @@ sx_slock(&allproc_lock); FOREACH_PROC_IN_SYSTEM(p) { PROC_SLOCK(p); + pctcpu = 0; FOREACH_THREAD_IN_PROC(p, td) { ruxagg(p, td); + thread_lock(td); + pctcpu += sched_pctcpu(td); + thread_unlock(td); } PROC_SUNLOCK(p); rusage_set(p, RUSAGE_CPU, cputick2usec(p->p_rux.rux_runtime)); microuptime(&wallclock); timevalsub(&wallclock, &p->p_stats->p_start); rusage_set(p, RUSAGE_WALLCLOCK, wallclock.tv_sec * 1000000 + wallclock.tv_usec); + pctcpu = ((pctcpu * 10000 + FSCALE / 2) >> FSHIFT) / 100; + rusage_set(p, RUSAGE_PCTCPU, pctcpu); } sx_sunlock(&allproc_lock); ==== //depot/projects/soc2009/trasz_limits/sys/sys/container.h#14 (text+ko) ==== @@ -76,7 +76,8 @@ #define RUSAGE_NSHM 21 #define RUSAGE_SHMSIZE 22 #define RUSAGE_WALLCLOCK 23 -#define RUSAGE_MAX RUSAGE_WALLCLOCK +#define RUSAGE_PCTCPU 24 +#define RUSAGE_MAX RUSAGE_PCTCPU /* * 'container' defines resource consumption for a particular