Commit Graph

97 Commits

Author SHA1 Message Date
ru
3b8270a3d5 - Revert signedness type changes to "struct vmtotal"; by making
them unsigned I made the possible overflows hard to detect,
  and it only saved 1 bit which isn't principal, even less now
  that the underlying issue with the total of virtual memory has
  been fixed.  (For the record, it will overflow with >=2T of
  VM total, with 32-bit ints used to keep counters in pages.)

- While here, fix printing of other "struct vmtotal" members
  such as t_rq, t_dw, t_pw, and t_sw as they are also signed.

Reviewed by:	bde
MFC after:	3 days
2006-11-28 12:46:02 +00:00
ru
9a3577d01b Oops, fix the format specifier to what was intended. 2006-11-23 11:47:34 +00:00
ru
1ea77e90a7 - Fix types of "struct vmmeter" members so they are unsigned.
- Fix overflow bugs in sysctl(8), systat(1), and vmstat(8)
  when printing values of "struct vmmeter" in kilobytes as
  they don't necessarily fit into 32 bits.  (Fix sysctl(8)
  reporting of a total virtual memory; it's in pages too.)
2006-11-20 16:04:41 +00:00
ru
7b0d9d9885 - Add comma after REQUESTS field missed in previous commit.
- Widen some columns; make width of header columns less cryptic.
2006-10-21 10:16:26 +00:00
glebius
8f073c1e71 Print the number of allocation failures in UMA zones.
PR:	kern/102940
2006-10-21 09:08:35 +00:00
obrien
f16c41b4d8 Increase the field widths of flt (total number of page faults), fr (pages
freed), & cs (CPU context switch rate).  'vmstat 1' output is now lined up
for today's typical machines vs. a VAX.  [tested my modest 1.6ghz laptop]
2006-06-03 20:34:56 +00:00
andre
74d3ddeb32 Obtain true uptime through clock_gettime(CLOCK_MONOTONIC, struct *timespec)
instead of subtracting 'bootime' from 'now'.

Sponsored by:	TCP/IP Optimization Fundraise 2005
2005-10-17 15:37:22 +00:00
rwatson
f7a5e4f7e2 Use libmemstat(3)'s kvm support for malloc(9) rather than hand-extracting
this information from the core dump.
2005-08-06 13:56:21 +00:00
rwatson
548e1b7d84 Teach vmstat's domemstat_zone() to use memstat_kvm_uma() when the kvm
descriptor is non-NULL, restoring vmstat -z support for core dumps and
kmem access.  These were broken with the introduction of UMA.
2005-08-01 21:33:17 +00:00
rwatson
180ae3e7ba Minor syntax tweaks:
- Remove some extra blank lines.
- Remove comments that don't contribute to understanding.
- Remove additional blank lines in output added to maximize compatibility
  with older vmstat output, but that is actually somewhat gratuitous.

Submitted by:	bde
MFC with:	other vmstat libmemstat(3) changes
2005-07-28 09:45:08 +00:00
rwatson
4bf88ad842 Teach vmstat -m and vmstat -z to use libmemstat(3). Certain
statistics from -z are now a bit different due to changes in the
way statistics are now measured.  Reproduce with some amount of
accuracy the slightly obscure layouts adopted by the two kernel
sysctls.  In the future, we might want to normalize them.

GC dosysctl(), which is now no longer used.

MFC after:	1 week
2005-07-25 22:35:10 +00:00
rwatson
f5b0199972 Modify vmstat(8)'s domem() routine, which is responsible for extracting
malloc(9) statistics from kernel memory or a kernel coredump, to catch
up with recent changes to adopt per-CPU malloc(9) statistics.  The new
routines walk the per-CPU statistics pools and coalesce them for
presentation to the user.
2005-05-29 13:40:00 +00:00
ru
0491ba1f63 Sync program's usage() with manpage's SYNOPSIS. 2005-05-21 09:55:10 +00:00
ps
c9d616766c Fix an overflow when calculating the number of kilobytes from the
number of pages.

Obtained from:	Yahoo!
2005-02-21 14:35:00 +00:00
green
b09ea0c305 Make vmstat -m work with -M/-N again. Note that making vmstat -z work
is much harder, and -m is grossly using unexported interfaces (that is,
the array of malloc zones/sizes does not have an exported type).
2004-06-30 01:34:26 +00:00
tjr
82d781d1b5 Print fork statistics with %u as they are unsigned quantities.
PR:		65889
Submitted by:	Ken Stailey
2004-04-23 13:10:29 +00:00
ru
a05bd8e51a Properly document the -M and -N options. 2004-03-26 11:01:45 +00:00
bde
0f0e6e75d4 Fixed a misspelling of 0 as NULL.
Fixed a nearby bug.  The "play it safe" code in dosysctl() was unsafe
because it overran the buffer by 1 if sysctl() filled all of the buffer.

Fixed a nearby style bug in output.  Not just 1, but 2 extra newlines
were printed at the end by "vmstat -m" and "vmstat -z".  Don't print
any newlines explicitly.  This depends on 2 of the many formatting
bugs in the corresponding sysctls.  First, the sysctls return an extra
newline at the end of the strings.  This also messes up output from
sysctl(8).  Second, the sysctls return an extra newline at the beginning
of the strings.  This is good for separating the 2 tables output by
"vmstat -mz" and for starting the header on a new line in plain sysctl
output, but gives a bogus extra newline at the beginning for "vm -[m | z]"
and "sysctl -n [kern.malloc | vm.zone]".

Fixed some nearby style bugs in the source code:
- the same line that misspelled 0 as NULL also spelled NULL as 0.
- the size was doubled twice in the realloc loop.
- the "play it safe" comment was misleading.  Terminating the buffer
  is bogus because dosysctl() is only meant to work with sysctls that
  return strings and the terminator is part of a string.  However, the
  kern.malloc sysctl has more than style bugs.  It also doesn't return
  a string.  Termination is needed to work around this bug.
2004-03-11 11:30:57 +00:00
dwmalone
088a25112c Remove an unused variable.
Add some missing constness.
2003-12-25 01:32:55 +00:00
bde
07560acf3d Fixed misplacement of __FBSDID(). Backed out editing of vendor id lines.
Just wrap them in #if 0...#endif.
2003-12-11 10:58:29 +00:00
des
b37897400d Revert part of revision 1.74 after bde reminded me of a detail I'd
forgotten about how sysctl works.  This removes a potential (though
not very likely) race that 1.74 introduced.
2003-12-11 07:46:08 +00:00
des
adbd0e152f Whitespace cleanup. 2003-12-10 22:19:19 +00:00
des
f3c82d0291 Remove debugging printf 2003-12-10 22:14:32 +00:00
des
dcadbab0fa Fix a couple of issues in the interrupt code:
- Replace overly-complicated (and buggy) -a logic with a much simpler
   version: -a causes all interrupts to be displayed, otherwise only
   those that have occurred are displayed.  This removes the need for
   any MD code.

 - Instead of just making sure intrcnt is large enough, figure out the
   exact size it needs to be.  We derive nintr from this number, and we
   don't want to risk printing garbage.  Note that on sparc64, we end up
   printing garbage anyway because the names of non-existent interrupts
   are left uninitialized by the kernel.

Tested on:	alpha, i386, sparc64
2003-12-10 22:11:51 +00:00
des
76dc1df2f9 s/u_(int|long)\>/unsigned \1/ 2003-12-10 21:43:10 +00:00
dwmalone
869e10c88c Fix a couple of warnings (const a function parameter and change some
ints to size_ts to better match the types of variables they are used
with).

Glanced at by:	des
2003-12-10 19:24:11 +00:00
marcel
4bb21e1ec3 Unbreak vmstat -i on ia64:
o  nintr and inamlen must by of type size_t, not int,
o  Remove now unnecessary casts,
o  Handle the aflag differently, because the intr. names have a
   fixed width and almost always have trailing spaces.
2003-12-08 07:57:57 +00:00
des
0e8712116d Finish the transition from libkvm to sysctl that I started a while ago.
The use of libkvm for post-mortem analysis is still supported (though it
could use more testing).  We can now remove vmstat's setgid bit.

While I'm here, hack the interrupt listing code to not display interrupts
that haven't occurred unless the -a option was given on the command line,
and document this change.
2003-12-07 17:46:14 +00:00
jmg
63482864f7 make minimum column size for interrupt name be the heading (depends upon
Total being shorter than interrupt)..

Pointed out by:	bde
2003-11-09 20:39:56 +00:00
jmg
66e31fa9e3 fix an overflow bug when scanning for length of names that I introduced in
the last commit...

include some minor style changes and fixes that bde sent me

Submitted by:	bde
2003-11-08 07:24:03 +00:00
jmg
2a6886b365 take mux's fix to the next level, scan the names and make the field larger
as necessary... on sparcs where:
atapci0 vec1996
is a bit too long
2003-10-28 05:02:03 +00:00
tjr
ddd5b3a66d Reimplement the vmstat -f option (display fork statistics).
PR:		50924
Submitted by:	Ken Stailey (with a few changes)
2003-04-14 07:21:03 +00:00
mux
b333e2476a Slightly rework formatting in vmstat -i so that it doesn't
break with "fooX irqY" lines that are a bit bigger.
2003-04-10 00:44:18 +00:00
phk
f432014308 Run a revision of the devstat interface:
Kernel:

Change statistics to use the *uptime() timescale (ie: relative to
boottime) rather than the UTC aligned timescale.  This makes the
device statistics code oblivious to clock steps.

Change timestamps to bintime format, they are cheaper.

Remove the "busy_count", and replace it with two counter fields:
"start_count" and "end_count", which are updated in the down and
up paths respectively.  This removes the locking constraint on
devstat.

Add a timestamp argument to devstat_start_transaction(), this will
normally be a timestamp set by the *_bio() function in bp->bio_t0.
Use this field to calculate duration of I/O operations.

Add two timestamp arguments to devstat_end_transaction(), one is
the current time, a NULL pointer means "take timestamp yourself",
the other is the timestamp of when this transaction started (see
above).

Change calculation of busy_time to operate on "the salami principle":
Only when we are idle, which we can determine by the start+end
counts being identical, do we update the "busy_from" field in the
down path.  In the up path we accumulate the timeslice in busy_time
and update busy_from.

Change the byte_* and num_* fields into two arrays: bytes[] and
operations[].

Userland:

Change the misleading "busy_time" name to be called "snap_time" and
make the time long double since that is what most users need anyway,
fill it using clock_gettime(CLOCK_MONOTONIC) to put it on the same
timescale as the kernel fields.

Change devstat_compute_etime() to operate on struct bintime.

Remove the version 2 legacy interface: the change to bintime makes
compatibility far too expensive.

Fix a bug in systat's "vm" page where boot relative busy times would
be bogus.

Bump __FreeBSD_version to 500107

Review & Collaboration by:	ken
2003-03-15 21:59:06 +00:00
phk
4dc0153e67 Update to use current rev of devstat API. 2003-03-15 21:25:44 +00:00
phk
9948f76f41 Add #include <sys/resource.h>
My apologies for missing these #includes, I must have confused the
dependencies with a wrong timestamp or something.
2003-02-16 16:01:52 +00:00
phk
4bfb37f22e Remove #include <sys/dkstat.h> 2003-02-16 14:13:23 +00:00
dillon
187e654d9a Make 'sysctl vm.vmtotal' work properly using updated patch from Hiten.
(the patch in the PR was stale).

PR:             kern/5689
Submitted by:   Hiten Pandya <hiten@unixdaemons.com>
2003-01-11 07:29:47 +00:00
tmm
c516cea85b The boottime variable in sys/kern/kern_tc.c is a struct timeval, not a
time_t, so do not use the latter as type when retrieving the variable
via libkvm. This should fix vmstat on sparc64.
2002-08-09 15:47:43 +00:00
jeff
da6660250e Remove malloc_type's ks_limit.
Updated the kmemzones logic such that the ks_size bitmap can be used as an
index into it to report the size of the zone used.

Create the kern.malloc sysctl which replaces the kvm mechanism to report
similar data.  This will provide an easy place for statistics aggregation if
malloc_type statistics become per cpu data.

Add some code ifdef'd under MALLOC_PROFILING to facilitate a tool for sizing
the malloc buckets.
2002-04-15 04:05:53 +00:00
asmodai
bb24e931b8 Fix a missed conversion of lld to llu for the uint64_t ks_calls and cast
to unsigned long long.

Don't be too overzealous with the printing of ks_calls in the total
statistics, cut back from 20 to 13 positions to print (which should last
a couple of years easily (20 digits is enough for 3168 years of calls at a
measly billion (10^9) calls per second.)).

Submitted by:	bde
2002-04-13 10:32:36 +00:00
asmodai
1c2992c7a6 Cast totreq to unsigned long long, as needed on 64-bit machines.
Pointed out by:	jeff
2002-04-08 21:06:14 +00:00
asmodai
3ca5a4b299 Change totreq to uint64_t from a long (the PR has an int64_t, which didn't
make sense to me) and change the printf argument from %8ld to %20llu to
accompany the printing of the totals.
Realigned the header printed above it as well.

PR:		32342
Submitted by:	ryan beasley <ryanb@goddamnbastard.org>
Reviewed by:	jeff, Tim J Robbins
2002-04-08 10:39:12 +00:00
imp
0b20191705 remove __P 2002-03-22 01:42:45 +00:00
jeff
d95a4801fc Remove the kmembuckets stats in preparation for the UMA commit. 2002-03-19 08:45:55 +00:00
markm
7320009338 WARNS=2 fixes, but set NO_WERROR, as there are some HardToFix(tm)
warnings originating in system headers.
2001-12-11 22:59:36 +00:00
ru
d7e70183dd SECURITY: Drop `setgid kmem' bit as early as possible. 2001-08-31 16:26:37 +00:00
ken
2b48a1a614 Change the compute_stats() call to the new devstat_compute_statistics()
interface.

Cast the return of the rest of the printfs in here to void.

Submitted by:	"Sergey A. Osokin" <osa@freebsd.org.ru>
2001-08-11 19:41:56 +00:00
tmm
3ea330259b Correct the old length argument passed to sysctl to be a pointer to a
size_t (not to an int).

MFC after:	2 days
2001-07-29 21:56:14 +00:00
schweikh
9e705f87d9 Increase column widths when using -i (they are now wide enough to
hold a 64bit or 32bit ~0 value, i.e. 20 and 10; this anticipates
soon-to-be machines with Exahertz rtc interrupt frequencies. :-)

PR:		bin/16206
Submitted by:	John Capo <jc@irbs.com>
MFC after:	1 week
2001-06-26 18:49:10 +00:00