Date: Fri, 24 Sep 1999 00:35:33 +0200 (MET DST) From: Gerard Roudier <groudier@club-internet.fr> To: scsi@FreeBSD.ORG Subject: Some SYM53C896 benchmarks Message-ID: <Pine.LNX.3.95.990923234606.349B-200000@localhost>
next in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
PII-233 / SYM53C896 / SnapShot 07/05/99
1) Using disklate.c (only works with disks that do not remove from
their cache data previously read)
DDRS 34560W at 40 MB/s data transfers
ncr: Command overhead 230 us - Transfer speed 23 MB/s
sym_hipd: Command overhead 149 us - Transfer speed 34 MB/s
XP32275W at 40 MB/s data transfers
ncr: Command overhead 409 us - Transfer speed 23 MB/s
sym_hipd: Command overhead 310 us - Transfer speed 34 MB/s
2) For the Cheatah2 LVD and the DRVS LVD, disklate is not usable since
these drives seem to remove data previouly read from their cache.
I just tried to perform small sequential IOs read (1Kb) using dd, from
the both drives at the same time (connected to the same SCSI BUS).
ncr: 6000 Tps
sym_hipd: 11500 Tps
For test (1), the difference in latency seems to me explainable, but the
difference in transfers speed is strange to me. Will try to understand
more.
I am also asking me questions about results of test 2. Under Linux I can
get up to 8000 Tps in the same conditions using the generic ncr53c8xx
driver and about 11500 (same as the sym_hipd driver as expected) using the
sym53c8xx that takes advantage of the features of the SYM53C896.
I recently read a post at this list that reported a SYM53C895 in LVD mode
80 MB/s being slower that an adaptec board in SE mode (40 MB/s) using same
hard disks and stock drivers. The numbers above may explain the results
and let me think that the 895 was not the cause of the bad results. It
would be fair, to give a try to the sym_hipd driver in the same situation
and report results, even if I have only announced the sym_hipd driver as
being optimized for the 896 and friends (may-be it can also help for the
895 as it does under Linux). Thanks. (The sym_hipd driver is still
experimental)
Gérard.
PS: I have attached disklate.c which is not from me, but that had been
posted to a FreeBSD list years ago.
[-- Attachment #2 --]
#include <sys/types.h>
#include <sys/time.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#define ITERATIONS 2000
static int syserror(const char *where);
static long timeit(int fd, char *buf, unsigned blocksize);
int main(int argc, char **argv)
{
char buf[2 * 4096];
int fd;
long time_4096;
long time_8192;
if (argc != 2)
{
fprintf(stderr, "usage: %s device\n", argv[0]);
exit(1);
}
fd = open(argv[1], O_RDONLY);
if (fd == -1)
syserror("open");
time_4096 = timeit(fd, buf, 4096);
time_8192 = timeit(fd, buf, 8192);
printf("Command overhead is %ld usec (time_4096 = %ld, time_8192 = %ld)\n",
(time_4096 - (time_8192 - time_4096)) / ITERATIONS,
time_4096 / ITERATIONS, time_8192 / ITERATIONS);
printf("transfer speed is %g bytes/sec\n",
4096 * ITERATIONS * 1000000.0 / (time_8192 - time_4096));
exit(0);
}
static int syserror(const char *where)
{
perror(where);
exit(1);
}
static long timeit(int fd, char *buf, unsigned blocksize)
{
struct timeval finish;
int i;
struct timeval start;
if (read(fd, buf, blocksize) != blocksize)
syserror("read");
if (gettimeofday(&start, (struct timezone *)NULL) != 0)
syserror("gettimeofday(start)");
for (i = 0; i < ITERATIONS; ++i)
{
if (lseek(fd, (off_t)0, SEEK_SET) == -1)
syserror("lseek");
if (read(fd, buf, blocksize) != blocksize)
syserror("read");
}
if (gettimeofday(&finish, (struct timezone *)NULL) != 0)
syserror("gettimeofday(finish)");
return (finish.tv_sec - start.tv_sec) * 1000000
+ finish.tv_usec - start.tv_usec;
}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.LNX.3.95.990923234606.349B-200000>
