|
Neohapsis is currently accepting applications for employment. For more information, please visit our website www.neohapsis.com or email hr@neohapsis.com |
From: Paul de Weerd (weerd
weirdnet.nl)
Date: Thu Aug 23 2007 - 08:27:36 CDT
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Thu, Aug 23, 2007 at 02:27:48PM +0200, Paul de Weerd wrote:
| It appears that the two machines I tried this on are not sufficiently
| diverse to prove the bug is in (systat) iostat. Accidentially, these
| two machines are both dual-core. A third machine (Apple MacBook Pro)
| has the problem when run with bsd.mp, but not with bsd. My sparc64
| (single processor) doesn't have the problem either.
|
| Now I'm officialy completely lost.
Maybe not as much. Looking at the code, I see that etime is divided by
ncpu in /usr/src/usr.bin/systat/vmstat.c but not in
/usr/src/usr.bin/systat/iostat.c. That makes the math between vmstat.c
and iostat.c different, (by a factor of NCPU, which is 2 in the cases
where I had this problem) and explains the difference in results.
I'm now testing the attached patch which seems to work fine. Probably
obvious from the changes, I'm quite new to this stuff so I'm not
attaching a patch for iostat(8) yet. I'll prefer to get flamed for
this first ;)
Comments ? Flames ?
Paul 'WEiRD' de Weerd
Index: iostat.c
===================================================================
RCS file: /cvs/src/usr.bin/systat/iostat.c,v
retrieving revision 1.28
diff -u -r1.28 iostat.c
--- iostat.c 30 May 2007 05:20:58 -0000 1.28
+++ iostat.c 23 Aug 2007 13:25:23 -0000

-41,6 +41,7 
#include <sys/dkstat.h>
#include <sys/buf.h>
#include <sys/time.h>
+#include <sys/sysctl.h>
#include <string.h>
#include <stdlib.h>

-61,6 +62,8 
#define NFMT "%-8.8s %14.0f %14.0f %10.0f %10.0f %10.1f"
#define SFMT "%-8.8s %14s %14s %10s %10s %10s"
+static int ncpu = 1;
+
WINDOW *
openiostat(void)
{

-80,8 +83,19 
int
initiostat(void)
{
+ int mib[4], i;
+ size_t size;
+
+ mib[0] = CTL_HW;
+ mib[1] = HW_NCPU;
+
+ size = sizeof(ncpu);
+ if (sysctl(mib, 2, &ncpu, &size, NULL, 0) < 0)
+ return (-1);
+
dkinit(1);
dkreadstats();
+
return (1);
}

-116,6 +130,7 
etime = 1.0;
etime /= (float) hz;
+ etime /= (float) ncpu;
if (last.dk_ndrive != cur.dk_ndrive)
labeliostat();
--
>++++++++[<++++++++++>-]<+++++++.>+++[<------>-]<.>+++[<+
+++++++++++>-]<.>++[<------------>-]<+.--------------.[-]
http://www.weirdnet.nl/
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]