Date: Mon, 2 Dec 1996 22:55:52 +0100 (MET) From: Tor Egge <Tor.Egge@idt.ntnu.no> To: FreeBSD-gnats-submit@freebsd.org Subject: bin/2137: vm statistics are bad Message-ID: <199612022155.WAA01725@ikke.idt.unit.no> Resent-Message-ID: <199612022200.OAA16907@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 2137
>Category: bin
>Synopsis: vm statistics are bad
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Dec 2 14:00:02 PST 1996
>Last-Modified:
>Originator: Tor Egge
>Organization:
Norwegian University of Science and Technology, Trondheim, Norway
>Release: FreeBSD 3.0-CURRENT i386
>Environment:
FreeBSD ikke.idt.unit.no 3.0-CURRENT FreeBSD 3.0-CURRENT #0: Sun Dec 1 00:54:34 MET 1996 root@ikke.idt.unit.no:/usr/src/sys-UP/compile/TEGGE i386
>Description:
Running systat shows bad values for total virtual memory. e.g.
In this example, it shows 3274676 KB, while it should be
77316980216 KB.
---- systat output
3 users Load 0.18 0.38 0.20 Mon Dec 2 18:35
Mem:KB REAL VIRTUAL VN PAGER SWAP PAGER
Tot Share Tot Share Free in out in out
Act 25168 3984 4143252 4492 329352 count
All 193988 4820 3274676 6664 pages
--- top output
last pid: 530; load averages: 0.14, 0.34, 0.20 18:36:00
50 processes: 2 running, 48 sleeping
CPU states: 1.2% user, 0.0% nice, 1.2% system, 0.0% interrupt, 97.7% idle
Mem: 151M Active, 8728K Inact, 22M Wired, 8345K Buf, 322M Free
Swap: 685M Total, 64K Used, 685M Free
---- vmtotal structure contents
$1 = {t_rq = 2, t_dw = 0, t_pw = 0, t_sl = 21, t_sw = 0, t_vm = -2145615227,
t_avm = 1036180, t_rm = 48722, t_arm = 6262, t_vmshr = 1681,
t_avmshr = 1516, t_rmshr = 1217, t_armshr = 1109, t_free = 82113}
----
Using 64 bit numbers, counting the same vm objects, the result is 19329245054,
which means 73735 GB total virtual memory.
>How-To-Repeat:
run systat.
>Fix:
Use 64 bits arithmetic in showkre() in /usr/src/usr.bin/systat/vmstat.c.
Make space for a 12 digit number showing the total virtual memory.
optional extra change in vmtotal() in /usr/src/sys/vm/vm_meter.c:
By ignoring the objects where object->size == 0x7fffffff, the t_vm field
in the vmtotal structure will have a low lower value. These objects are of
type OBJT_VNODE, referencing vnodes of type VBLK and tag VT_UFS, referencing
inodes for the block devices corresponding to the currently mounted ufs file
systems. Not ignoring them means adding almost 8192 GB virtual memory for
each mounted ufs filesystem.
By ignoring the objects where object->ref_count == 0, you will also
reduce the t_vm field somewhat.
>Audit-Trail:
>Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199612022155.WAA01725>
