Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 10 Aug 1997 22:34:09 -0700
From:      Mike Haertel <mike@ducky.net>
To:        dg@root.com
Cc:        freebsd-hackers@FreeBSD.ORG, freebsd-hardware@FreeBSD.ORG, mike@ducky.net
Subject:   Re: question about "ed" driver performance on ASUS SP3G & 486DX4/100 
Message-ID:  <199708110534.WAA03574@ducky.net>
In-Reply-To: Your message of "Sun, 10 Aug 1997 21:33:16 PDT." <199708110433.VAA08541@implode.root.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
>   It sounds like there is a problem that is special to the Asus SP3G. The
>obvious thing to check for is the ISA bus speed being correct. As for the
>wd8013, with its shared memory design, it is the fastest ISA ethernet card
>that FreeBSD supports. The raw access speed to the shared memory should
>be about 4MB/second - plenty fast enough to keep up with 10Mbps ethernet.

Hmm... this inspired me to write a small benchmark.

This program maps the ethernet board's shared memory (assumed
to be at 0xd8000) to user space, and then copies 16 megabytes
out of it 32 bits at a time.

On the 486 box, it takes about 15.5 seconds.  On the Pentium box
(which worked for the NFS install) it takes about 14.5 seconds.

Either of these is just slightly faster than 1 MB/sec and nowhere
near the claimed 4 MB/sec.  Perhaps my board is pessimal and the
Pentium box, being just a hair faster, is fast enough to keep up?

Since both the 486 and the Pentium exhibit (nearly) the same performance,
and I am 100% positive that the Pentium is running the ISA bus at
the right frequency, I'm fairly sure there is no problem with the
ISA bus speed in the 486.  (I checked the motherboard docs and it
does not appear to be configurable anyway.)



--cut here--
/*
 * usage: time ./a.out
 */
#include <fcntl.h>
#include <sys/mman.h>

asm("
_docopy:
	pushl %ebx
	movl 8(%esp), %ecx
	movl 12(%esp), %edx
	movl $1024, %eax
loopy:
	movl 0(%edx), %ebx
	movl %ebx, 0(%ecx)
	movl 4(%edx), %ebx
	movl %ebx, 4(%ecx)
	movl 8(%edx), %ebx
	movl %ebx, 8(%ecx)
	movl 12(%edx), %ebx
	movl %ebx, 12(%ecx)
	addl $16, %ecx
	addl $16, %edx
	decl %eax
	jne loopy
	popl %ebx
	ret
");

extern void docopy(short *dst, short *src);
main()
{
	int fd, i, j;
	short *p, d[8192];

	fd = open("/dev/mem", O_RDONLY);
	if (fd < 0) {
		printf("barf\n");
		exit(33);
	}
	p = (short *) mmap(0, 16384, PROT_READ, MAP_SHARED, fd, 0xd8000);
	/*
	 * Benchmark: copying 16 megabytes of memory from p a word
	 * at a time.
	 */
	printf("p = %p\n", (void *) p);
	for (i = 0; i < 1024; ++i)
		docopy(d, p);
	exit(0);
}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199708110534.WAA03574>