Re: rhashtable: Use __vmalloc with GFP_ATOMIC for table allocation
From: Eric Dumazet <hidden>
Date: 2015-12-04 17:45:24
Also in:
lkml, oe-lkp
On Fri, 2015-12-04 at 18:01 +0100, Phil Sutter wrote:
On Fri, Dec 04, 2015 at 10:39:56PM +0800, Herbert Xu wrote:quoted
On Thu, Dec 03, 2015 at 08:08:39AM -0800, Eric Dumazet wrote:quoted
Anyway, __vmalloc() can be used with GFP_ATOMIC, have you tried this ?OK I've tried it and I no longer get any ENOMEM errors!I can't confirm this, sadly. Using 50 threads, results seem to be stable and good. But increasing the number of threads I can provoke ENOMEM condition again. See attached log which shows a failing test run with 100 threads. I tried to extract logs of a test run with as few as possible failing threads, but wasn't successful. It seems like the error amplifies itself: While having stable success with less than 70 threads, going beyond a margin I could not identify exactly, much more threads failed than expected. For instance, the attached log shows 70 out of 100 threads failing, while for me every single test with 50 threads was successful. HTH, Phil
But this patch is about GFP_ATOMIC allocations, I doubt your test is using GFP_ATOMIC. Threads (process context) should use GFP_KERNEL allocations. BTW, if 100 threads are simultaneously trying to vmalloc(32 MB), this might not be very wise :( Only one should really do this, while others are waiting. If we really want parallelism (multiple cpus coordinating their effort), it should be done very differently.