
Due to differences in (mainly) measuring and accumulating CPU times, the two top programs end up serving different purposes: the NetBSD top is a system administration tool, while the MINIX3 top (now mtop) is a performance debugging tool. Therefore, we keep both. The newly imported BSD top has a few MINIX3-specific changes. CPU statistics separate system time from kernel time, rather than kernel time from time spent on handling interrupts. Memory statistics show numbers that are currently relevant for MINIX3. Swap statistics are disabled entirely. All of these changes effectively bring it closer to how mtop already worked as well. Change-Id: I9611917cb03e164ddf012c5def6da0e7fede826d
125 lines
4.0 KiB
C
125 lines
4.0 KiB
C
/*
|
|
* Copyright (c) 1984 through 2008, William LeFebvre
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* * Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following disclaimer
|
|
* in the documentation and/or other materials provided with the
|
|
* distribution.
|
|
*
|
|
* * Neither the name of William LeFebvre nor the names of other
|
|
* contributors may be used to endorse or promote products derived from
|
|
* this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
/*
|
|
* This file defines the interface between top and the machine-dependent
|
|
* module. It is NOT machine dependent and should not need to be changed
|
|
* for any specific machine.
|
|
*/
|
|
|
|
#ifndef _MACHINE_H_
|
|
#define _MACHINE_H_
|
|
|
|
#include "top.h"
|
|
|
|
/*
|
|
* The statics struct is filled in by machine_init. Fields marked as
|
|
* "optional" are not filled in by every module.
|
|
*/
|
|
struct statics
|
|
{
|
|
const char **procstate_names;
|
|
const char **cpustate_names;
|
|
const char **memory_names;
|
|
const char **swap_names; /* optional */
|
|
const char **order_names; /* optional */
|
|
const char **top_color_names; /* optional */
|
|
const char **kernel_names; /* optional */
|
|
time_t boottime; /* optional */
|
|
int modemax; /* optional */
|
|
int ncpu; /* optional */
|
|
struct {
|
|
unsigned int fullcmds : 1;
|
|
unsigned int idle : 1;
|
|
unsigned int warmup : 1;
|
|
unsigned int threads : 1;
|
|
} flags;
|
|
};
|
|
|
|
/*
|
|
* the system_info struct is filled in by a machine dependent routine.
|
|
*/
|
|
|
|
#ifdef p_active /* uw7 define macro p_active */
|
|
#define P_ACTIVE p_pactive
|
|
#else
|
|
#define P_ACTIVE p_active
|
|
#endif
|
|
|
|
struct system_info
|
|
{
|
|
pid_t last_pid;
|
|
double load_avg[NUM_AVERAGES];
|
|
int p_total;
|
|
int P_ACTIVE; /* number of procs considered "active" */
|
|
int *procstates;
|
|
int *cpustates;
|
|
int *kernel;
|
|
long *memory;
|
|
long *swap;
|
|
};
|
|
|
|
/* cpu_states is an array of percentages * 10. For example,
|
|
the (integer) value 105 is 10.5% (or .105).
|
|
*/
|
|
|
|
/*
|
|
* the process_select struct tells get_process_info what processes we
|
|
* are interested in seeing
|
|
*/
|
|
|
|
struct process_select
|
|
{
|
|
int idle; /* show idle processes */
|
|
int system; /* show system processes */
|
|
int fullcmd; /* show full command */
|
|
int usernames; /* show usernames */
|
|
int uid; /* only this uid (unless uid == -1) */
|
|
char *command; /* only this command (unless == NULL) */
|
|
int mode; /* select display mode (0 is default) */
|
|
int threads; /* show threads separately */
|
|
pid_t pid; /* show only this pid (unless pid == -1) */
|
|
};
|
|
|
|
/* routines defined by the machine dependent module */
|
|
int machine_init(struct statics *);
|
|
void get_system_info(struct system_info *);
|
|
caddr_t get_process_info(struct system_info *, struct process_select *, int);
|
|
char *format_header(char *);
|
|
char *format_next_process(caddr_t, char *(*)(int));
|
|
int proc_owner(int);
|
|
#ifdef HAVE_FORMAT_PROCESS_HEADER
|
|
|
|
#endif /* _MACHINE_H_ */
|
|
char *format_process_header(struct process_select *sel, caddr_t handle, int count);
|
|
#endif
|