Re: fork performance
Masao Uebayashi <[email protected]> Mon, 22 Oct 2012 09:27:39 +0900
| Newsgroups | gmane.os.netbsd.devel.performance |
|---|---|
| Message-ID | <CADbF7ed4A3gkxKAtCmoUdOQVeTpUV-y3Z+DrWBw7dk3hdcGMPw@mail.gmail.com> |
On Thu, Oct 18, 2012 at 4:39 PM, Lars Heidieker <[email protected]> wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On 10/18/2012 09:15 AM, David Laight wrote: >> On Thu, Oct 18, 2012 at 12:52:47PM +1300, Lloyd Parkes wrote: >>> So, with a slightly closer look, a guess and some tests to >>> verify my guess, and I think I have found my performance problem >>> converting the NetBSD CVS repositories to Mercurial. >>> >>> The CVS server forks once for each command it receives, and it >>> receives a lot of commands. NetBSD fork(2) seems to be much >>> slower than OS X fork(2). >> >> I've seen things that show that a processes memory page list isn't >> getting its entries merged - so there are a lot of items to >> process during fork(). (cat something in /proc ...) >> >> The malloc netbsd uses (that uses mmap() instead of sbrk()) >> probably makes this much more significant. Especially if a big C++ >> program - like a python interpreter - is doing the forks(). >> >> David >> > > Hi, > > currently the amap layer limits the size of amaps to 255 * PAGE_SIZE > see: http://nxr.netbsd.org/xref/src/sys/uvm/uvm_amap.c#494 > > that's why the map entries for anon memory don't get merged. What happens if larger page size is used?