Re: Minor page faults from pthread_create()
From: Arnaldo Carvalho de Melo <hidden>
Date: 2012-01-09 19:00:56
Em Fri, Jan 06, 2012 at 09:46:29PM +0100, Adrian Knoth escreveu:
While playing with https://rt.wiki.kernel.org/articles/t/h/r/Threaded_RT-application_with_memory_locking_and_stack_handling_example_f48b.html I was wondering why pthread_create() should cause minor page faults when there is a pre-allocated pre-faulted 100MB memory pool. Simply running the example causes roughly 30 minor page faults. When I manually allocate stack memory for the stack (after mlockall() and mallopt have been called) and use pthread_attr_setstack() before calling pthread_create(), minor page faults drop to 2. Does anybody happen to know what is causing these remaining two page faults? My only guess so far is kernel memory to hold some organizational data for the new thread after clone() has been invoked, but this could also be completely wrong. Note that I don't need to get page faults down to 0, I'm only looking for an explanation to understand the issue at hand to confirm that pthread_create() must not be used from an RT context.
Try: $ perf record --event minor-faults --call-graph your-program $ perf report Should answer that question if running on a -fno-omit-frame-pointer binary world. Or at least provide the callchains for the kernel part of the call chains. 32-bit distros should be OK in that respect. - Arnaldo