Subject: Re: mmap(2) performance netbsd-1-6 vs. -current
To: Jason Thorpe <thorpej@wasabisystems.com>
From: Bang Jun-Young <junyoung@netbsd.org>
List: tech-kern
Date: 10/20/2003 05:06:33
On Sun, Oct 19, 2003 at 11:18:18AM -0700, Jason Thorpe wrote:
> 
> On Sunday, October 19, 2003, at 09:51  AM, Bang Jun-Young wrote:
> 
> >The test program used is as follows (please don't blame me for its
> >silliness, I just wanted to see a rough difference in minutes :-):
> 
> Ok, I'll ignore the silliness, but I will point out a couple of bugs :-)
> 
> >#include <stdio.h>
> >#include <sys/mman.h>
> >
> >main()
> >{
> >	void *ptr[15];
> >	int i, j;
> >	size_t size;
> >
> >	for (j = 0; j < 40960; j++) {
> >		for (i = 0; i < 15; i++) {
> >			size = 4096 << i;
> >			ptr[i] = mmap(NULL, size, PROT_READ|PROT_WRITE, 
> >			MAP_ANON, -1, 0);
> >			if (ptr == NULL)
> >				err("NULL returned, i=%d\n", i);
> 
> There are two problems with this code:
> 
> 	- mmap() returns MAP_FAILED, not NULL, on faulure.
> 	- "ptr" will never be null anyway!  I think you really want to
> 	  be testing ptr[i].
> 
> >			*((int *)ptr) = 0xdeadbeef;
> 
> ...and, here again, you want to be dereferencing ptr[i].

Oops, I was too lucky... :-)

After fixing the bugs you pointed out, the result is a bit more
interesting (and rather disappointing):

-current:
	real 17.606s user 0.580s sys 17.026s

netbsd-1-6:
	real 17.831s user 0.648s sys 16.985s

This time numbers varied slightly, so I took the median values of 10
trials. Here, -current was only marginally faster than netbsd-1-6,
and it's obvious that it had nothing to do with improvements made in
UVM in -current. This result makes me wonder why the previous silly
test showed such a noticable difference.

Jun-Young

-- 
Bang Jun-Young <junyoung@NetBSD.org>