I have a multi-thread application. I can set number of threads to run on (simple data parallelism). When a try to run it with more then 4 threads I see significant drop in performance. Profiler shows a lot of time consumed in __lll_unlock_wake and __lll_lock_wait, called by _L_unlock_532 and _L_lock_926 respectively. I suspect locks on heap operations because every thread allocates and frees a lot of data.
The problem is, that any tested profiler (perf, google's pperf) does not show caller above _L_lock_926 so I caot check with of my function is causing this locks. I want to use some memory pooling technique to decrease number of heap operations, but I don't want to do it on every data collection. Is there any way to increase depth of call-stack for this function?
anticipating suggestions:
- I've compiled code with `-fno-omit-frame-pointer'
- google's tcmalloc doesn't seem to help
- I caot use
fork()because my app needs to run on windows too
