Thread: BG writer question?

BG writer question?

From
Alan Stange
Date:
Hello all,

I just was running strace in the writer process and I noticed this pattern:

select(0, NULL, NULL, NULL, {0, 200000}) = 0 (Timeout)
getppid()                               = 4240
time(NULL)                              = 1123773324
mmap2(NULL, 528384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0x81000) = 0x69ea3000
semop(1409034, 0xffffc0bc, 1)           = 0
<...seeks and writes...>
munmap(0x69ea3000, 528384)              = 0
select(0, NULL, NULL, NULL, {0, 200000}) = 0 (Timeout)
getppid()                               = 4240
time(NULL)                              = 1123773324
mmap2(NULL, 528384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0x81000) = 0x69ea3000
semop(1605648, 0xffffc0bc, 1)           = 0
<...seeks and writes...>
munmap(0x69ea3000, 528384)              = 0
select(0, NULL, NULL, NULL, {0, 200000}) = 0 (Timeout)


why mmap and munmap each time?    mmap and munmap are fairly expensive
operations (on some systems), especially on multi cpu machines.  munmap
in particular generally needs to issue cross calls to the other cpus to
ensure any page mappings are invalidated.

Just curious.

Thanks!

-- Alan

Re: BG writer question?

From
Alvaro Herrera
Date:
On Thu, Aug 11, 2005 at 11:25:27AM -0400, Alan Stange wrote:

> why mmap and munmap each time?    mmap and munmap are fairly expensive
> operations (on some systems), especially on multi cpu machines.  munmap
> in particular generally needs to issue cross calls to the other cpus to
> ensure any page mappings are invalidated.

There are no mmap/munmap calls in our code.  The problematic code is
probably somewhere in the libc.  Maybe it'd be useful to figure out
where it's called and why, with an eye on working around that.

--
Alvaro Herrera (<alvherre[a]alvh.no-ip.org>)
"I love the Postgres community. It's all about doing things _properly_. :-)"
(David Garamond)