[argobots-discuss] question about stack reuse on dedicated pools

Halim Amer aamer at anl.gov
Fri Feb 23 13:35:08 CST 2018


Phil,

Yes, your understanding is correct. Single-producer-multiple-consumer 
cases trigger this issue. I had another user complain about this and I 
advised him to tune the ABT_MEM_MAX_NUM_STACKS for his needs. I was 
considering lowering the default value for a better performance vs. 
memory footprint tradeo-ff. Since this is the second time the issue is 
reported, I think it's time to raise it's priority. We will do some 
performance testing on our end and update the default value.

Thanks for reporting.

Halim
http://www.mcs.anl.gov/~aamer

On 2/23/18 1:13 PM, Phil Carns wrote:
> Ok, I think I'm on the trail now.
> 
> The default num stacks (how many it will queue for reuse on an ES) in 
> Argobots is 65536.  You can override this with "export 
> ABT_MEM_MAX_NUM_STACKS=64".  If I do that, then my memory consumption 
> stays down and I see that the stacks are overflowing to a global pool 
> where they (presumably) are available for reuse by the ES that is 
> launching ULTs in my case.
> 
> Anecdotally, the default limit of 65536 looks like it is wasting around 
> 500 MiB of memory *per ES* that we create in our usage scenario, since 
> the stacks can't be reused from the local pool of the ES's that are 
> executing our ULTs.
> 
> Is the moral of the story that we should set ABT_MEM_MAX_NUM_STACKS much 
> lower in our use case?  I'm going see if I can do that automatically 
> from the library that we are using to set up this scenario (Margo).
> 
> thanks,
> -Phil
> 
> On 02/23/2018 02:01 PM, Phil Carns wrote:
>> Is the issue that when a ULT is created it draws from the stack queue 
>> on the calling ES, but when the ULT is free'd it is put on the stack 
>> queue of the ES that executed it?
>>
>> In the example I have that is consuming more memory than expected, the 
>> ULTs are always dispatched by one specific ES (the one that is driving 
>> progress on the network transport) and executed on a different ES (the 
>> dedicated pool set aside for servicing I/O operations).
>>
>> thanks,
>> -Phil
>>
>> On 02/23/2018 01:09 PM, Phil Carns wrote:
>>> Hi all,
>>>
>>> I'm trying to debug problem with a service that spawns a new ULT for 
>>> each incoming client request.  The service works correctly, but 
>>> memory consumption is considerably higher over time if I create a 
>>> dedicated pool with it's own execution streams to run the ULTs 
>>> instead of just running them on the main ES.
>>>
>>> There are some details here: 
>>> https://xgitlab.cels.anl.gov/sds/margo/issues/40
>>>
>>> That specific test example is creating a total of 40,000 ULTs over 
>>> the course of execution.  It doesn't have that many active 
>>> concurrently, though.  The client program is  issuing no more than 4 
>>> concurrent requests.  A ULT will slightly outlive the request 
>>> handler, but the number of active ULTS isn't growing indefinitely.  I 
>>> can confirm that argobots is freeing them throughout execution if I 
>>> turn on Argobots logging.
>>>
>>> I can see in the Argobots source code that when a ULT is freed it 
>>> doesn't literally free() the stack memory for that ULT; it is kept on 
>>> a queue:
>>>
>>> https://github.com/pmodels/argobots/blob/master/src/include/abti_mem.h#L287 
>>>
>>>
>>> If I print the value of num_stacks in Argobots at the above line, I 
>>> get the following:
>>>
>>> - when using the default/main ES: no higher than 512
>>>
>>> - when explicitly creating a new pools and ES: 40,000
>>>
>>> I haven't tracked down the logic to understand why there is a 
>>> difference here, but is this expected?  It looks like Argobots is 
>>> keeping a much larger number of stacks around (without reusing them?) 
>>> if I create a new pool and ES to run my ULTs.
>>>
>>> thanks,
>>>
>>> -Phil
>>>
>>> _______________________________________________
>>> discuss mailing list
>>> discuss at lists.argobots.org
>>> https://lists.argobots.org/mailman/listinfo/discuss
>>
>>
>> _______________________________________________
>> discuss mailing list
>> discuss at lists.argobots.org
>> https://lists.argobots.org/mailman/listinfo/discuss
> 
> 
> _______________________________________________
> discuss mailing list
> discuss at lists.argobots.org
> https://lists.argobots.org/mailman/listinfo/discuss


More information about the discuss mailing list