On Jul 4, 2014, at 2:02 AM, Salvatore Sanfilippo <[email protected]> wrote:
> while trying to profile my application for sources of latency, I
> noticed that after the fork() call, if there are an high number of
> allocations ongoing, one of the next allocations (the first maybe?)
> after fork()  shows very high latency (~400 milliseconds) in a process
> using 2GB of memory.
> 
> The problem exists both in jemalloc 3.2.0 and 3.6.0 so it does not
> look like a regression.
> I tried with the glibc standard allocator and I can't reproduce the
> issue, so looks like allocator-specific.
> 
> There is some way I can mitigate ore remove this issue?

I'm guessing that jemalloc is accessing a lot of pages (dirty page purging?), 
and copy-on-write overhead due to the fork is hurting a lot.    The best way I 
know of to avoid this overhead is to "pre-fork" one or more processes early 
during application startup (before memory usage grows large), and communicate 
with these via pipes to fork+exec processes.  This avoids marking the 2 GB of 
pages in your main process as copy-on-write during fork, which reduces fork 
overhead as well as page fault rate.  You can take a look at hhvm's 
LightProcess class for an example implementation:

        https://github.com/facebook/hhvm/blob/master/hphp/util/light-process.h
        https://github.com/facebook/hhvm/blob/master/hphp/util/light-process.cpp

Jason
_______________________________________________
jemalloc-discuss mailing list
[email protected]
http://www.canonware.com/mailman/listinfo/jemalloc-discuss

Reply via email to