Subject: Performance Problem: malloc() is calling madvise()
To: 'Netbsd-Ports' <netbsd-ports@netbsd.org>
From: Bill Dorsey <dorsey@lila.lila.com>
List: netbsd-ports
Date: 05/19/2000 03:40:51
Hi,

I upgraded to the 20000505 snapshot yesterday (1.4Y) and noticed
a serious performance loss when running one of my programs.

The program I was running is a number-crunching program that
uses malloc() pretty heavily (via the C++ new function).
Between the 1.4.2_Alpha release I was running and the 1.4Y
release I upgraded to, the program slowed down by a factor
of 4 on my Personal Workstation!!!

Looking at top, I had my first clue as to what the problem
was.  It was showing about 33% of the CPU time being spent
running my program and 66% of the time in the system.  I
proceeded to run a ktrace on the program and was rewarded
with data at the rate of more than 1 megabyte per second
being written to ktrace.out!

After stopping the ktrace, I ran kdump to see what was going
on.  The madvise() system call was being called millions of
times per second from what I could see.

Investigating further, I discovered that madvise() is called
by malloc in libc.so.  When I switched the libc.so with an
older version (from 1.4.2_Alpha), the performance returned to
normal.

If this hasn't been fixed in -current, I'd be pleased if someone
would look into it.  I don't understand why you'd want to make
a system call in malloc() anyway given the obvious performance
implications so I assume this is in error.

In the meantime, I have noticed no ill effects from replacing
the libc.so file with the older one from 1.4.2_Alpha and I'll
continue to do so until this is addressed.

--
Bill Dorsey