computing the io statistics over and over not as expensive.
This is a bit of a cop out, as I should just allocate a struct with
the computed values, but this will do for now.
are doing. Toggle this mode by hitting "m" or passing the command line
option "-m io" to top(1). This allows one to identify disk bandwidth
hogs much easier.
(and not thread) scope is to be displayed, use KERN_PROC_ALL and
accrue CPU% ourselves, as the kernel makes no attempt to do so.
Of course, this doesn't make most stats any less bogus when displaying
threaded processes, but at least the CPU time is added up and not just
always 0.00%. There are still issues with SCHED_ULE in top(1) that
cause other processes to display 0.00% CPU when they in fact have used
more.
characters. This should avoid unattractive wrapping for people who are
stuck in an 80x24 screen. :-)
PR: 22270
Submitted by: William Carrel <williamc@go2net.com>
fscale is a (64-bit) long. So just use a struct loadavg.
This fixes the recent failure of top on alphas:
top: sysctl(vm.loadavg...) failed: Cannot allocate memory
- use size_t for sizeof() so as to fix a few int/long warnings on alpha
Reviewed by: Thomas Moestl <tmoestl@gmx.net>
available via sysctl(). As a result, top should now be able to run without
setgid kmem.
Submitted by: Thomas Moestl <tmoestl@gmx.net>
Reviewed by: freebsd-audit
no longer contains kernel specific data structures, but rather
only scalar values and structures that are already part of the
kernel/user interface, specifically rusage and rtprio. It no
longer contains proc, session, pcred, ucred, procsig, vmspace,
pstats, mtx, sigiolst, klist, callout, pasleep, or mdproc. If
any of these changed in size, ps, w, fstat, gcore, systat, and
top would all stop working. The new structure has over 200 bytes
of unassigned space for future values to be added, yet is nearly
100 bytes smaller per entry than the structure that it replaced.
include:
* Mutual exclusion is used instead of spl*(). See mutex(9). (Note: The
alpha port is still in transition and currently uses both.)
* Per-CPU idle processes.
* Interrupts are run in their own separate kernel threads and can be
preempted (i386 only).
Partially contributed by: BSDi (BSD/OS)
Submissions by (at least): cp, dfr, dillon, grog, jake, jhb, sheldonh
seconds caused overflow. Use a type-safe but slightly slower comparison.
Comparisons for other fields are still fragile.
Fixed rounding of cputime (don't do extra work to get it slightly wrong
by first converting without rounding to milliseconds).
Removed dead code for setting cputime.
Fixed comments about cputime.
numbers as chars or use bogus casts in an attempt to unmisrepresnt
them. In top, don't assume that 0xff is the only negative cpu
number when cpu numbers are (mis)represented.
only likely to happen when you have a kernel<>userland mismatch,
but it's really annoying when top dumps core and leaves the terminal
in a mangled state; it's much nicer to print nicely formatted gibberish.
to half compensate for broken scaling of p_pctcpu in the kernel, but the
previous commit removed this compensation. %cpu values will be wrong by
a factor of stathz/hz until the kernel is fixed. (The kernel gets it
wrong by a factor of stathz/hz, and top got the compensation wrong by
a factor of 100/stathz.)
Clean up (or if antipodic: down) some of the msgbuf stuff.
Use an inline function rather than a macro for timecounter delta.
Maintain process "on-cpu" time as 64 bits of microseconds to avoid
needless second rollover overhead.
Avoid calling microuptime the second time in mi_switch() if we do
not pass through _idle in cpu_switch()
This should reduce our context-switch overhead a bit, in particular
on pre-P5 and SMP systems.
WARNING: Programs which muck about with struct proc in userland
will have to be fixed.
Reviewed, but found imperfect by: bde
username present on the system at startup and use that for the field width.
It's not ideal but (I think) better than it was before. The width is
limited to within 8..16.