Date: Mon, 3 Jan 2000 14:09:53 -0800 (PST) From: Matthew Jacob <mjacob@feral.com> To: Adam <bsdx@looksharp.net> Cc: scsi@FreeBSD.ORG Subject: Re: sym troubles Message-ID: <Pine.BSF.4.05.10001031405130.44830-100000@semuta.feral.com> In-Reply-To: <Pine.BSF.4.21.0001031650350.889-100000@turtle.looksharp.net>
next in thread | previous in thread | raw e-mail | index | archive | help
Usually drives cache some amount of info- CDs, maybe not. Use the attached
to find out.
> Hmm, I wonder if theres any way to find out.. 40x * 150 is only 6MB/sec so
> it wouldnt be noticable if I did a speed test, and I have it alone on a
> bus so I wouldn't be able to tell if it slowed down other things
> either. So I guess all I can do is test patches :P The cdrom and
> controller are sort-of spare parts for me, so it isnt a critical issue to
> fix. I have a Tekram 390F btw.
>
> On Mon, 3 Jan 2000, Matthew Jacob wrote:
/*
* Copyright (c) 1998, Matthew Jacob
*
* This software is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; version 2.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* The author may be reached via electronic communications at
*
* mjacob@feral.com
*
* or, via United States Postal Address
*
* Matthew Jacob
* 1831 Castro Street
* San Francisco, CA, 94131
*
***************************************************************************
*/
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#if defined(__osf__) || defined(__linux__) || defined(__FreeBSD__)
#include <sys/time.h>
#else
#include <time.h>
#endif
#include <errno.h>
#include <string.h>
#ifdef __linux__
#include <linux/fs.h>
#endif
static unsigned long szarg(char *);
static char *progname(char *);
int
main(int a, char **v)
{
int (*iofunc)(int, char *, int);
int fd, r, oflags;
unsigned long blksize, offset, nblks, count, loc, etime;
struct timeval st, et;
char *name, *bptr;
double kbsec;
if (a != 5) {
fprintf(stderr, "Usage: %s device blksize offsetblk nblks\n", *v);
return (1);
}
if (strcmp(progname(v[0]), "rdsame") == 0) {
iofunc = (int (*)())read;
oflags = O_RDONLY;
} else {
iofunc = (int (*)())write;
oflags = O_WRONLY;
}
name = v[1];
blksize = szarg(v[2]);
offset = szarg(v[3]);
nblks = szarg(v[4]);
bptr = malloc(blksize);
if (bptr == NULL) {
perror("malloc");
return (1);
}
fd = open(name, oflags);
if (fd < 0) {
perror(name);
return (1);
}
#ifdef __linux__
if (ioctl (fd, BLKFLSBUF, 0) < 0) {
perror("BLKFLSBUF");
}
#endif
loc = offset * blksize;
if (gettimeofday(&st, (struct timezone *) 0) < 0) {
perror("gettimeofday");
return (1);
}
for (count = 0; count < nblks; count++) {
if (lseek(fd, loc, 0) != loc) {
perror("lseek");
return (1);
}
if ((r = (*iofunc)(fd, bptr, (int) blksize)) != (int) blksize) {
fprintf(stderr, "I/O returned %d, err is %s\n", r, strerror(errno));
return (1);
}
}
if (gettimeofday(&et, (struct timezone *) 0) < 0) {
perror("\ngettimeofday");
return (1);
}
etime = et.tv_sec - st.tv_sec;
if (et.tv_usec < st.tv_usec) {
etime--;
etime *= 1000000;
etime += (et.tv_usec + 1000000 - st.tv_usec);
} else {
etime *= 1000000;
etime += (et.tv_usec - st.tv_usec);
}
kbsec = (double) blksize * (double) count; /* total bytes */
kbsec /= (double) 1024.0;
kbsec *= (double) 1000000.0;
kbsec /= (double) etime;
fprintf(stdout, "%s %ld bytes in %d.%d seconds, %5.2fKB/sec in %ld "
"byte blocks\n", (oflags == O_RDONLY)? "Read" : "Wrote",
blksize * count, etime / 1000000, etime % 1000000,
kbsec, blksize);
return (0);
}
static unsigned long
szarg(char *n)
{
register int shift = 0;
register char s, *q = n;
unsigned long result;
while (*q != (char) 0)
q++;
q--;
if (*q == 'b' || *q == 'B')
q--;
s = *q;
if (*q == 'k' || *q == 'K') {
shift = 10;
*q = 0;
} else if (*q == 'm' || *q == 'M') {
shift = 20;
*q = 0;
} else if (*q == 'g' || *q == 'G') {
shift = 30;
*q = 0;
}
result = strtoul((const char *)n, (char **) NULL, 0) << shift;
*q = s;
return (result);
}
static char *
progname(char *name)
{
char *p = strrchr(name, '/');
if (p)
return (++p);
else
return (name);
}
/*
* ---------------------------------------------------------------------------
* Local variables:
* c-indent-level: 4
* c-brace-imaginary-offset: 0
* c-brace-offset: -4
* c-argdecl-indent: 4
* c-label-offset: -4
* c-continued-statement-offset: 4
* c-continued-brace-offset: 0
* End:
*/
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-scsi" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.05.10001031405130.44830-100000>
