From owner-freebsd-stable@FreeBSD.ORG Thu Nov 16 15:03:21 2006 Return-Path: X-Original-To: stable@freebsd.org Delivered-To: freebsd-stable@FreeBSD.ORG Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 096E216A40F for ; Thu, 16 Nov 2006 15:03:21 +0000 (UTC) (envelope-from ru@rambler-co.ru) Received: from relay0.rambler.ru (relay0.rambler.ru [81.19.66.187]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8509743D91 for ; Thu, 16 Nov 2006 15:03:08 +0000 (GMT) (envelope-from ru@rambler-co.ru) Received: from relay0.rambler.ru (localhost [127.0.0.1]) by relay0.rambler.ru (Postfix) with ESMTP id 85880612D; Thu, 16 Nov 2006 18:03:07 +0300 (MSK) Received: from edoofus.park.rambler.ru (unknown [81.19.65.108]) by relay0.rambler.ru (Postfix) with ESMTP id 62F5B612F; Thu, 16 Nov 2006 18:03:07 +0300 (MSK) Received: (from ru@localhost) by edoofus.park.rambler.ru (8.13.8/8.13.8) id kAGF3Ax9049288; Thu, 16 Nov 2006 18:03:10 +0300 (MSK) (envelope-from ru) Date: Thu, 16 Nov 2006 18:03:09 +0300 From: Ruslan Ermilov To: Ulrich Spoerlein Message-ID: <20061116150309.GD48412@rambler-co.ru> References: <7ad7ddd90611160255m553a471cy41f6c911bdc2a1bf@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="lc9FT7cWel8HagAv" Content-Disposition: inline In-Reply-To: <7ad7ddd90611160255m553a471cy41f6c911bdc2a1bf@mail.gmail.com> User-Agent: Mutt/1.5.13 (2006-08-11) X-Virus-Scanned: No virus found Cc: stable@freebsd.org Subject: Re: systat -vm output showing negative total virtual memory X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Nov 2006 15:03:21 -0000 --lc9FT7cWel8HagAv Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Nov 16, 2006 at 11:55:09AM +0100, Ulrich Spoerlein wrote: > Hi all, >=20 > this is on a two week old RELENG_6. The machine has 4GB RAM, SMP >=20 > CPU: Intel(R) Xeon(TM) CPU 3.00GHz (3012.12-MHz 686-class CPU) > Origin =3D "GenuineIntel" Id =3D 0xf43 Stepping =3D 3 > Features=3D0xbfebfbff H,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE> > Features2=3D0x641d> > AMD Features=3D0x20100000 > real memory =3D 3489071104 (3327 MB) > avail memory =3D 3414265856 (3256 MB) > ACPI APIC Table: > FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs > cpu0 (BSP): APIC ID: 0 > cpu1 (AP): APIC ID: 6 >=20 >=20 > Mem:KB REAL VIRTUAL VN PAGER SWAP PAGER > Tot Share Tot Share Free in out in out > Act 1198620 115040 1480676 289860 153004 count > All 3330652 116920 -956751k 293960 pages >=20 > vm.vmtotal has this to say > System wide totals computed every five seconds: (values in kilobytes) > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > Processes: (RUNQ: 3 Disk Wait: 1 Page Wait: 1 Sleep: 40) > Virtual Memory: (Total: 815944K, Active 355288K) > Real Memory: (Total: 2558540K Active 150424K) > Shared Virtual Memory: (Total: 11460K Active: 7856K) > Shared Real Memory: (Total: 6916K Active: 5044K) > Free Memory Pages: 890092K >=20 If my reading of the sys/vm/vm_meter.c code is correct, then all this is wrong; t_vm, t_avm, t_vmshr, and t_avmshr are all in bytes (here's a snippet from vm_meter.c): : totalp->t_vm +=3D object->size; : totalp->t_rm +=3D object->resident_page_count; : if (object->flags & OBJ_ACTIVE) { : totalp->t_avm +=3D object->size; : totalp->t_arm +=3D object->resident_page_count; : } : if (object->shadow_count > 1) { : /* shared object */ : totalp->t_vmshr +=3D object->size; : totalp->t_rmshr +=3D object->resident_page_count; : if (object->flags & OBJ_ACTIVE) { : totalp->t_avmshr +=3D object->size; : totalp->t_armshr +=3D object->resident_pa= ge_count; : } : } sysctl(8) knows that t_vm is in bytes, but for the other stats it thinks they are in pages. "systat -vm" thinks they are all in bytes. Here's a fix: %%% Index: sbin/sysctl/sysctl.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /home/ncvs/src/sbin/sysctl/sysctl.c,v retrieving revision 1.67.2.7 diff -u -p -r1.67.2.7 sysctl.c --- sbin/sysctl/sysctl.c 8 Sep 2006 09:45:35 -0000 1.67.2.7 +++ sbin/sysctl/sysctl.c 16 Nov 2006 14:51:18 -0000 @@ -395,14 +395,14 @@ S_vmtotal(int l2, void *p) "%hu Sleep: %hu)\n", v->t_rq, v->t_dw, v->t_pw, v->t_sl); printf( - "Virtual Memory:\t\t(Total: %luK, Active %lldK)\n", + "Virtual Memory:\t\t(Total: %luK, Active %luK)\n", (unsigned long)v->t_vm / 1024, - (long long)v->t_avm * pageKilo); + (unsigned long)v->t_avm / 1024); printf("Real Memory:\t\t(Total: %lldK Active %lldK)\n", (long long)v->t_rm * pageKilo, (long long)v->t_arm * pageKilo); - printf("Shared Virtual Memory:\t(Total: %lldK Active: %lldK)\n", - (long long)v->t_vmshr * pageKilo, - (long long)v->t_avmshr * pageKilo); + printf("Shared Virtual Memory:\t(Total: %luK Active: %luK)\n", + (unsigned long)v->t_vmshr / 1024, + (unsigned long)v->t_avmshr / 1024); printf("Shared Real Memory:\t(Total: %lldK Active: %lldK)\n", (long long)v->t_rmshr * pageKilo, (long long)v->t_armshr * pageKilo); Index: usr.bin/systat/vmstat.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /home/ncvs/src/usr.bin/systat/vmstat.c,v retrieving revision 1.60.2.1 diff -u -p -r1.60.2.1 vmstat.c --- usr.bin/systat/vmstat.c 21 Mar 2006 20:49:50 -0000 1.60.2.1 +++ usr.bin/systat/vmstat.c 16 Nov 2006 14:55:32 -0000 @@ -475,12 +475,12 @@ showkre() #define pgtokb(pg) ((pg) * (s.v_page_size / 1024)) putint(pgtokb(total.t_arm), MEMROW + 2, MEMCOL + 3, 8); putint(pgtokb(total.t_armshr), MEMROW + 2, MEMCOL + 11, 8); - putint(pgtokb(total.t_avm), MEMROW + 2, MEMCOL + 19, 9); - putint(pgtokb(total.t_avmshr), MEMROW + 2, MEMCOL + 28, 9); + putint(total.t_avm/1024, MEMROW + 2, MEMCOL + 19, 9); + putint(total.t_avmshr/1024, MEMROW + 2, MEMCOL + 28, 9); putint(pgtokb(total.t_rm), MEMROW + 3, MEMCOL + 3, 8); putint(pgtokb(total.t_rmshr), MEMROW + 3, MEMCOL + 11, 8); - putint(pgtokb(total.t_vm), MEMROW + 3, MEMCOL + 19, 9); - putint(pgtokb(total.t_vmshr), MEMROW + 3, MEMCOL + 28, 9); + putint(total.t_vm/1024, MEMROW + 3, MEMCOL + 19, 9); + putint(total.t_vmshr/1024, MEMROW + 3, MEMCOL + 28, 9); putint(pgtokb(total.t_free), MEMROW + 2, MEMCOL + 37, 8); putint(total.t_rq - 1, PROCSROW + 1, PROCSCOL + 3, 3); putint(total.t_pw, PROCSROW + 1, PROCSCOL + 6, 3); %%% Cheers, --=20 Ruslan Ermilov ru@FreeBSD.org FreeBSD committer --lc9FT7cWel8HagAv Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (FreeBSD) iD8DBQFFXH2tqRfpzJluFF4RAv8JAJ9Irel7KOizi77Qyn54JvCzY10pzwCgibJv QwOAaepd/vL2ilUHdhmg7w4= =1yTz -----END PGP SIGNATURE----- --lc9FT7cWel8HagAv--