From owner-p4-projects@FreeBSD.ORG Wed Oct 17 13:48:54 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4958416A46B; Wed, 17 Oct 2007 13:48:54 +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 EECA416A468 for ; Wed, 17 Oct 2007 13:48:53 +0000 (UTC) (envelope-from zec@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id D7AC113C45B for ; Wed, 17 Oct 2007 13:48:53 +0000 (UTC) (envelope-from zec@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l9HDmrEw080487 for ; Wed, 17 Oct 2007 13:48:53 GMT (envelope-from zec@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l9HDmrqt080484 for perforce@freebsd.org; Wed, 17 Oct 2007 13:48:53 GMT (envelope-from zec@FreeBSD.org) Date: Wed, 17 Oct 2007 13:48:53 GMT Message-Id: <200710171348.l9HDmrqt080484@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to zec@FreeBSD.org using -f From: Marko Zec To: Perforce Change Reviews Cc: Subject: PERFORCE change 127628 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Oct 2007 13:48:54 -0000 http://perforce.freebsd.org/chv.cgi?CH=127628 Change 127628 by zec@zec_tpx32 on 2007/10/17 13:48:29 Improve accuracy of per process group CPU average usage accounting and reporting, and slightly increase deccay periods. Affected files ... .. //depot/projects/vimage/src/sys/kern/kern_clock.c#11 edit .. //depot/projects/vimage/src/sys/kern/kern_vimage.c#46 edit .. //depot/projects/vimage/src/usr.sbin/vimage/vimage.c#6 edit Differences ... ==== //depot/projects/vimage/src/sys/kern/kern_clock.c#11 (text+ko) ==== @@ -484,21 +484,25 @@ tot_acc_statcalls++; if (!TD_IS_IDLETHREAD(td)) V_acc_statcalls++; + + /* Deccay processing every 1/16 seconds */ if (last_acc_ticks + (hz >> 4) <= ticks) { u_int weight_fixp; u_int avg0; last_acc_ticks = ticks; /* - * 0x10000 == 1.0 in 16:16 fixed point notation; - * a few extra LS bits are added in an attempt to - * compensate for truncation errors. + * avg0, avg1 and avg2 are stored in 16.16 fixed point format. + * weight_fixp is in 1.31 format for better accuracy. + * + * avg1 loses half of its value in roughly 150 ms. + * avg2 loses half of its value in roughly 1350 ms. */ - weight_fixp = 0x010007 / tot_acc_statcalls; + weight_fixp = 0x80000000 / tot_acc_statcalls; LIST_FOREACH(vcpu, &vcpu_head, vcpu_le) { - avg0 = weight_fixp * V_acc_statcalls; - V_avg1_fixp = (V_avg1_fixp + avg0 + 1) >> 1; - V_avg2_fixp = (15 * V_avg2_fixp + avg0 + 15) >> 4; + avg0 = (weight_fixp * V_acc_statcalls) >> 15; + V_avg1_fixp = (3 * V_avg1_fixp + avg0) >> 2; + V_avg2_fixp = (31 * V_avg2_fixp + avg0) >> 5; V_acc_statcalls = 0; } tot_acc_statcalls = 0; ==== //depot/projects/vimage/src/sys/kern/kern_vimage.c#46 (text+ko) ==== @@ -504,8 +504,7 @@ vi_req->vi_proc_count = vip_r->v_procg->nprocs; vi_req->vi_if_count = vip_r->v_vnet->ifccnt; vi_req->vi_sock_count = vip_r->v_vnet->sockcnt; - vi_req->cp_time_avg = - (vip_r->v_cpu->_avg2_fixp * 10000 + 0x8000) >> 16; + vi_req->cp_time_avg = vip_r->v_cpu->_avg2_fixp; break; case SIOCSPVIMAGE: ==== //depot/projects/vimage/src/usr.sbin/vimage/vimage.c#6 (text+ko) ==== @@ -72,7 +72,7 @@ lf * vi_req->averunnable.ldavg[1], lf * vi_req->averunnable.ldavg[2]); - printf(" CPU usage: %3.2f%%\n", 0.01 * vi_req->cp_time_avg); + printf(" CPU usage: %3.2f%%\n", vi_req->cp_time_avg / 655.04); printf(" Sockets (cur/max): %d/%d;", vi_req->vi_sock_count, vi_req->vi_maxsockets);