/dev/shm
Dan Nelson
dnelson at allantgroup.com
Mon Jul 7 08:42:37 PDT 2003
In the last episode (Jul 07), Matthias Andree said:
> Marcin Dalecki schrieb am 2003-07-07:
> > Matthias Andree wrote:
> > >Update your Linux top or run fewer processes on it then. :->
> >
> > You know that file system name lookup is one of the most expensive
> > system calls under UNIX?
>
> So what? If you don't like the interface because it does ever so
> expensive file system lookups (I wonder what's so expensive if no
> disk drive latencies are involved), suggest a better one and donate
> an implementation.
>
> I'm sure I'd find disadvantages of non-Linux top if I only cared to
> look. I don't. It works when I need it, it's not in my way otherwise,
> that's as much as I care.
There is already a functional non-procfs implementation that has been
around long before procps top: groupsys top 3.5b12 (i.e. the top that
all other non-Linux systems use) compiles fine on even the newest Linux
kernels with the attached patch. It's one of the first things I build
on a new Linux box. Procps top is way too slow; it takes a full 5
seconds just for the first screen refresh on a mostly-idle box with 400
processes. groupsys top is basically instantaneous. And don't think
about accidentally hitting a cursor or function key which running
procps top; it doesn't even use curses, so it beeps and waits 2 seconds
for each character in the escape sequence :)
--
Dan Nelson
dnelson at allantgroup.com
-------------- next part --------------
diff -burp top-3.5beta12/display.c top-3.5beta12-l/display.c
--- top-3.5beta12/display.c Thu Sep 12 15:24:39 1996
+++ top-3.5beta12-l/display.c Mon Apr 29 12:45:54 2002
@@ -931,12 +931,12 @@ register char **pp;
static void summary_format(str, numbers, names)
char *str;
-int *numbers;
+unsigned int *numbers;
register char **names;
{
register char *p;
- register int num;
+ register unsigned int num;
register char *thisname;
register int useM = No;
@@ -946,6 +946,8 @@ register char **names;
{
/* get the number to format */
num = *numbers++;
+
+/* fprintf(stderr,"%lu\n",num); */
/* display only non-zero numbers */
if (num > 0)
diff -burp top-3.5beta12/machine/m_linux.c top-3.5beta12-l/machine/m_linux.c
--- top-3.5beta12/machine/m_linux.c Fri Jan 15 08:42:07 1999
+++ top-3.5beta12-l/machine/m_linux.c Mon Apr 29 12:45:54 2002
@@ -36,7 +36,8 @@
#include <sys/param.h> /* for HZ */
#include <asm/page.h> /* for PAGE_SHIFT */
-#include <linux/tasks.h> /* for NR_TASKS */
+/* #include <linux/tasks.h> */ /* for NR_TASKS */
+#define NR_TASKS 8192
#if 0
#include <linux/proc_fs.h> /* for PROC_SUPER_MAGIC */
@@ -139,7 +140,7 @@ static struct top_proc **nextactive;
static int cpu_states[NCPUSTATES];
static int process_states[NPROCSTATES];
-static int memory_stats[NMEMSTATS];
+static unsigned int memory_stats[NMEMSTATS];
/* usefull macros */
#define bytetok(x) (((x) + 512) >> 10)
diff -burp top-3.5beta12/screen.c top-3.5beta12-l/screen.c
--- top-3.5beta12/screen.c Wed Dec 15 11:44:10 1993
+++ top-3.5beta12-l/screen.c Mon Apr 29 12:45:54 2002
@@ -71,7 +71,6 @@ char *start_standout;
char *end_standout;
char *terminal_init;
char *terminal_end;
-short ospeed;
#ifdef SGTTY
static struct sgttyb old_settings;
diff -burp top-3.5beta12/utils.c top-3.5beta12-l/utils.c
--- top-3.5beta12/utils.c Mon Jun 1 12:58:17 1998
+++ top-3.5beta12-l/utils.c Mon Apr 29 12:45:54 2002
@@ -59,27 +59,16 @@ char *str;
char *itoa(val)
-register int val;
+register unsigned int val;
{
- register char *ptr;
static char buffer[16]; /* result is built here */
/* 16 is sufficient since the largest number
we will ever convert will be 2^32-1,
which is 10 digits. */
- ptr = buffer + sizeof(buffer);
- *--ptr = '\0';
- if (val == 0)
- {
- *--ptr = '0';
- }
- else while (val != 0)
- {
- *--ptr = (val % 10) + '0';
- val /= 10;
- }
- return(ptr);
+ sprintf(buffer,"%lu",val);
+ return buffer;
}
/*
@@ -437,7 +426,7 @@ long seconds;
char *format_k(amt)
-int amt;
+unsigned int amt;
{
static char retarray[NUM_STRINGS][16];
More information about the freebsd-current
mailing list