Bill Fischofer(Bill-Fischofer-Linaro) replied on github web page:

platform/linux-generic/Makefile.am
line 4
@@ -175,6 +175,7 @@ noinst_HEADERS = \
                  include/odp_name_table_internal.h \
                  include/odp_packet_internal.h \
                  include/odp_packet_io_internal.h \
+                 include/odp_packet_io_pool.h \


Comment:
Both pools and shmem's are ODP objects. The difference is a pool is a 
structured collection of objects that can be allocated and freed from the pool 
and that contain both data and metadata, while a shmem is a "slab" of memory 
that has no structure beyond how the application chooses to use it.  Given this 
distinction, a pool seems more useful here.

> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
> This definitely should not be part of the API spec. It's an implementation 
> artifact.


>> nagarahalli wrote
>> This should be part of odp_pktio_ops_subsystem.h file.


>>> nagarahalli wrote
>>> Should we rename it to odp_packet_io_shm.h and odp_packet_io_shm.c?


>>>> nagarahalli wrote
>>>> '_p' is not required as the macro is returning 'ops_data'. Makes the macro 
>>>> simple as well.
>>>> 
>>>> Similarly for odp_ops_data_free can just take 'ops_data' as input.
>>>> 
>>>> This will be inline with future plans to not expose 'pktio_entry_t' to the 
>>>> drivers.


>>>>> He Yi(heyi-linaro) wrote:
>>>>> In future, since each pktio_ops module will not expose their private data 
>>>>> type, this macro can be changed to
>>>>> >`#define odp_ops_data(_entry, _pdata) \
>>>>>         pdata = (typeof(_pdata))(_entry->s.ops_data)`
>>>>> 
>>>>> So the odp_pktio_ops_subsystem.h header won't need to know all pktio_ops' 
>>>>> private data structure declaration. Can be considered next time.


>>>>>> He Yi(heyi-linaro) wrote:
>>>>>> Like this!


>>>>>>> He Yi(heyi-linaro) wrote:
>>>>>>> Look good no more comments from me to this commit after Honnappa and 
>>>>>>> Josep's, this is a step forward for the pktio ops data
>>>>>>> 
>>>>>>> This commit also reveals how complex in ODP to allocate an arbitrary 
>>>>>>> sized piece of memory, need to prepare a pool (and guess the largest 
>>>>>>> usage), lookup this pool in every allocation/free by name, and do the 
>>>>>>> allocation/free after then. 


>>>>>>>> He Yi(heyi-linaro) wrote:
>>>>>>>> seems no need to add an extra macro here?
>>>>>>>> 
>>>>>>>> ODP_SUBSYSTEM_FOREACH_TEMPLATE(...) is extern
>>>>>>>> we can just use to generate a static function use the same macro:
>>>>>>>> static ODP_SUBSYSTEM_FOREACH_TEMPLATE(...)


>>>>>>>>> nagarahalli wrote
>>>>>>>>> Temporarily, roundup the size to cache line size. This way all the 
>>>>>>>>> memory allocations will be cache line aligned.


>>>>>>>>>> nagarahalli wrote
>>>>>>>>>> Should be odp_ops_data_alloc(_p, size).
>>>>>>>>>> 
>>>>>>>>>> As per the pkt I/O changes document, _p (pktio_entry_t) is not 
>>>>>>>>>> required to be exposed to drivers. Do you plan to do it as part of 
>>>>>>>>>> this PR?


>>>>>>>>>>> nagarahalli wrote
>>>>>>>>>>> Same here, this can be part of odp_pktio_term_global


>>>>>>>>>>>> nagarahalli wrote
>>>>>>>>>>>> This functionality can be done in odp_pktio_global_init function. 
>>>>>>>>>>>> This will avoid the changes to modular framework as well.
>>>>>>>>>>>> 
>>>>>>>>>>>> When we have done additional enhancements to shared memory, this 
>>>>>>>>>>>> code will be deleted. So, can be part of odp_pktio_global_init 
>>>>>>>>>>>> without affecting the modular framework.


>>>>>>>>>>>>> Josep Puigdemont(joseppc) wrote:
>>>>>>>>>>>>> ah, yes, true, I didn't think about this detail... 


>>>>>>>>>>>>>> bogdanPricope wrote
>>>>>>>>>>>>>> @joseppc   Btw, 'odp_ops_data_alloc(_p, _mod)' vs. 
>>>>>>>>>>>>>> odp_ops_data_alloc(_p, _size) ?


>>>>>>>>>>>>>>> bogdanPricope wrote
>>>>>>>>>>>>>>> No, this pool is used to allocate packets (for recv side).


>>>>>>>>>>>>>>>> Josep Puigdemont(joseppc) wrote:
>>>>>>>>>>>>>>>> Ok, I may be splitting hairs now, but I thought we were just 
>>>>>>>>>>>>>>>> checking whether the pool parameter passed to pktio_open was 
>>>>>>>>>>>>>>>> valid, and bail out if not. We are not actually using this 
>>>>>>>>>>>>>>>> pool to allocate this pktio's private data, right?


>>>>>>>>>>>>>>>>> bogdanPricope wrote
>>>>>>>>>>>>>>>>> Alloc/free vs. array has this disadvantage: you need to 
>>>>>>>>>>>>>>>>> allocate the memory at some point and free it if the 
>>>>>>>>>>>>>>>>> operation fails for any reason. It is better to delay the 
>>>>>>>>>>>>>>>>> allocation until after some common checks.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> stncmp: open calls are not on fast path ... no reason to 
>>>>>>>>>>>>>>>>> optimize the performance ... but repeated memory alloc/free 
>>>>>>>>>>>>>>>>> may affect some pool implementations 


>>>>>>>>>>>>>>>>>> bogdanPricope wrote
>>>>>>>>>>>>>>>>>> It will require a cast when is called. 
>>>>>>>>>>>>>>>>>> A pktio_type may implement another way to allocate memory 
>>>>>>>>>>>>>>>>>> starting form the name of the pool / is not mandatory to use 
>>>>>>>>>>>>>>>>>> those macros but are helpful for existing pktio types.


>>>>>>>>>>>>>>>>>>> bogdanPricope wrote
>>>>>>>>>>>>>>>>>>> _p comes form (pktio_entry_t *)


>>>>>>>>>>>>>>>>>>>> Josep Puigdemont(joseppc) wrote:
>>>>>>>>>>>>>>>>>>>> It probably belongs to its own patch, but now that you are 
>>>>>>>>>>>>>>>>>>>> at it, it could even be moved even further up, as it is 
>>>>>>>>>>>>>>>>>>>> probably faster than checking for "tap:" in the device 
>>>>>>>>>>>>>>>>>>>> string.


>>>>>>>>>>>>>>>>>>>>> Josep Puigdemont(joseppc) wrote:
>>>>>>>>>>>>>>>>>>>>> (_p)?  There are a couple more, also in odp_ops_data_free.


>>>>>>>>>>>>>>>>>>>>>> Josep Puigdemont(joseppc) wrote:
>>>>>>>>>>>>>>>>>>>>>> Maybe we can return (void *)? This way we would not care 
>>>>>>>>>>>>>>>>>>>>>> if pktios name (or define) their private structures 
>>>>>>>>>>>>>>>>>>>>>> according to the naming conventions implicit in the 
>>>>>>>>>>>>>>>>>>>>>> macro.


https://github.com/Linaro/odp/pull/297#discussion_r151797282
updated_at 2017-11-20 12:52:30

Reply via email to