From owner-freebsd-hackers Wed May 17 23:18:59 1995 Return-Path: hackers-owner Received: (from majordom@localhost) by freefall.cdrom.com (8.6.10/8.6.6) id XAA25987 for hackers-outgoing; Wed, 17 May 1995 23:18:59 -0700 Received: from ref.tfs.com (ref.tfs.com [140.145.254.251]) by freefall.cdrom.com (8.6.10/8.6.6) with ESMTP id XAA25981 for ; Wed, 17 May 1995 23:18:58 -0700 Received: (from phk@localhost) by ref.tfs.com (8.6.8/8.6.6) id XAA28462; Wed, 17 May 1995 23:18:24 -0700 From: Poul-Henning Kamp Message-Id: <199505180618.XAA28462@ref.tfs.com> Subject: Re: Adaptec 2940? To: tom@haven.uniserve.com (Tom Samplonius) Date: Wed, 17 May 1995 23:18:24 -0700 (PDT) Cc: gibbs@estienne.CS.Berkeley.EDU, hackers@FreeBSD.org In-Reply-To: from "Tom Samplonius" at May 17, 95 11:02:45 pm Content-Type: text Content-Length: 4364 Sender: hackers-owner@FreeBSD.org Precedence: bulk > > The drivers are identical, so the interupt time should be the same for > > driving either card on the same machine. Your benchmark is not really > > valid since they were run on different motherboards. > > To some extent. It is instesting that a good EISA system can best a > poor PCI system. Woe to those buying cheap PCI motherboards. Oh, it's much worse than that. This is some numbers I have been collecting, the represent the bandwidth between CPU and RAM pretty well: First line is read dominated, second is write dominated: My PC, en 486DX2/66 32Mb, FreeBSD-2.1, GCC 2.6.3 flagmose# cc -o ram-speed -O2 ram-speed.c flagmose# ./ram-speed 49005fb0 0.615 uS/op 1.63e+06 op/S 6.201 Mb/S 8938c0df 0.159 uS/op 6.29e+06 op/S 23.981 Mb/S A "IBM Valuepoint 486DX2/D PC", as above myname# cc -o ram-speed -O2 ram-speed.c myname# ./ram-speed 49005fb0 0.377 uS/op 2.65e+06 op/S 10.116 Mb/S 8938c0df 0.150 uS/op 6.66e+06 op/S 25.423 Mb/S A ASUS P90 Neptune, FreeBSD-2.1, GCC 2.6.3 phk@time.cdrom.com cc -o ram-speed -O2 ram-speed.c phk@time.cdrom.com ./ram-speed 49005fb0 0.356 uS/op 2.81e+06 op/S 10.723 Mb/S 8938c0df 0.209 uS/op 4.78e+06 op/S 18.235 Mb/S phk@time.cdrom.com uptime 4:12PM up 4 days, 4:05, 4 users, load averages: 0.54, 0.27, 0.11 Time wasn't idle, so these numbers are not 100% reliable A Sun SS20/612, Solaris 2.4 dgbcc6# cc -o ram-speed -fast ram-speed.c dgbcc6# ./ram-speed 49005fb0 0.420 uS/op 2.38e+06 op/S 9.083 Mb/S 8938c0df 0.448 uS/op 2.23e+06 op/S 8.507 Mb/S A Sun SS1000/516, Solaris 2.4 dgbmsu0# cc -o ram-speed -fast ram-speed.c dgbmsu0# ./ram-speed 49005fb0 0.771 uS/op 1.30e+06 op/S 4.950 Mb/S 8938c0df 0.980 uS/op 1.02e+06 op/S 3.892 Mb/S A RS6000/590, AIX 3.2.5 # cc -o ram-speed -O3 ram-speed.c # ./ram-speed 49005fb0 0.116 uS/op 8.61e+06 op/S 32.833 Mb/S 8938c0df 0.177 uS/op 5.64e+06 op/S 21.532 Mb/S Here is the source-code, Bruce and Rod use a different piece of code, which is probably better, but this is what I have used all the time, so I can compare my own results: #include #include #include #include #include #include typedef unsigned long test_t; #define TESTSIZE (8192*1024) #define NOPS 1024*1024*16 #define NFACTOR 11 #define NVOL (NOPS*NFACTOR) int main(int argc,char **argv) { test_t *area, *chunk; test_t *pointer,x1=0,x2=0; unsigned counter,leap; int i; double delta; struct timeval before,middle,after; struct timezone tzb,tza; if (sizeof *area != 4) { perror("Need 32 bit test_t"); exit(2); } pointer = area=malloc(TESTSIZE); if(!area) { perror("malloc"); exit(2); } memset(area,'D',TESTSIZE); chunk = area + TESTSIZE / sizeof *area - 102; leap = TESTSIZE / sizeof *area - 204; gettimeofday(&before,&tzb); for(counter=0;counter= chunk) { pointer -= leap; } } gettimeofday(&middle,&tza); for(counter=0;counter= chunk) { pointer -= leap; } } gettimeofday(&after,&tza); if (x1 != 0x49005fb0) {perror("Wrong result"); exit(1); } if (x2 != 0x8938c0df) {perror("Wrong result"); exit(1); } delta =middle.tv_sec - before.tv_sec; delta +=(middle.tv_usec - before.tv_usec)/1000000.0; printf("%08lx ",x1); printf(" %6.3f uS/op", delta*1000000.0/NVOL); printf(" %7.2e op/S", NVOL/delta); printf(" %6.3f Mb/S\n", (NVOL*sizeof *pointer/(1024.0*1024.0)) / delta); delta =after.tv_sec - middle.tv_sec; delta +=(after.tv_usec - middle.tv_usec)/1000000.0; printf("%08lx ",x2); printf(" %6.3f uS/op", delta*1000000.0/NVOL); printf(" %7.2e op/S", NVOL/delta); printf(" %6.3f Mb/S\n", (NVOL*sizeof *pointer/(1024.0*1024.0)) / delta); return 0; } -- Poul-Henning Kamp -- TRW Financial Systems, Inc. 'All relevant people are pertinent' && 'All rude people are impertinent' => 'no rude people are relevant'