[dpdk-dev] [RFC v2 00/23] Dynamic memory allocation for DPDK

Burakov, Anatoly anatoly.burakov at intel.com
Wed Feb 14 11:07:43 CET 2018


On 14-Feb-18 8:04 AM, Thomas Monjalon wrote:
> Hi Anatoly,
> 
> 19/12/2017 12:14, Anatoly Burakov:
>>   * Memory tagging. This is related to previous item. Right now, we can only ask
>>     malloc to allocate memory by page size, but one could potentially have
>>     different memory regions backed by pages of similar sizes (for example,
>>     locked 1G pages, to completely avoid TLB misses, alongside regular 1G pages),
>>     and it would be good to have that kind of mechanism to distinguish between
>>     different memory types available to a DPDK application. One could, for example,
>>     tag memory by "purpose" (i.e. "fast", "slow"), or in other ways.
> 
> How do you imagine memory tagging?
> Should it be a parameter when requesting some memory from rte_malloc
> or rte_mempool?

We can't make it a parameter for mempool without making it a parameter 
for rte_malloc, as every memory allocation in DPDK works through 
rte_malloc. So at the very least, rte_malloc will have it. And as long 
as rte_malloc has it, there's no reason why memzones and mempools 
couldn't - not much code to add.

> Could it be a bit-field allowing to combine some properties?
> Does it make sense to have "DMA" as one of the purpose?

Something like a bitfield would be my preference, yes. That way we could 
classify memory in certain ways and allocate based on that. Which 
"certain ways" these are, i'm not sure. For example, in addition to 
tagging memory as "DMA-capable" (which i think is a given), one might 
tag certain memory as "non-default", as in, never allocate from this 
chunk of memory unless explicitly asked to do so - this could be useful 
for types of memory that are a precious resource.

Then again, it is likely that we won't have many types of memory in 
DPDK, and any other type would be implementation-specific, so maybe just 
stringly-typing it is OK (maybe we can finally make use of "type" 
parameter in rte_malloc!).

> 
> How to transparently allocate the best memory for the NIC?
> You take care of the NUMA socket property, but there can be more
> requirements, like getting memory from the NIC itself.

I would think that we can't make it generic enough to cover all cases, 
so it's best to expose some API's and let PMD's handle this themselves.

> 
> +Cc more people (6WIND, Cavium, Chelsio, Mellanox, Netronome, NXP, Solarflare)
> in order to trigger a discussion about the ideal requirements.
> 



-- 
Thanks,
Anatoly


More information about the dev mailing list