On Mon, Jan 19, 2015 at 10:17:22AM -0600, Bill Fischofer wrote:
> On Mon, Jan 19, 2015 at 10:00 AM, Jerin Jacob <
> jerin.ja...@caviumnetworks.com> wrote:
> 
> > On Mon, Jan 19, 2015 at 09:26:08AM -0600, Bill Fischofer wrote:
> > > On Mon, Jan 19, 2015 at 7:22 AM, Jerin Jacob <
> > jerin.ja...@caviumnetworks.com
> > > > wrote:
> > >
> > > > On Mon, Jan 19, 2015 at 06:09:34AM -0600, Bill Fischofer wrote:
> > > > > I think Petri should weigh in on these questions.  For the first one,
> > > > what
> > > > > problems do you anticipate some platforms having with that equation?
> > > >
> > > > I have two issues around the unit test case,
> > > > 1) packet_len = ODP_CONFIG_PACKET_BUF_LEN_MIN -
> > ODP_CONFIG_PACKET_HEADROOM
> > > > -
> > > > ODP_CONFIG_PACKET_TAILROOM creates two segments in my platform and
> > > > tailroom/headroom expects
> > > > to work within a segment ?
> > > >
> > >
> > > Can you elaborate on why this is the case?  The intent here was to define
> > > what constituted a single segment so if it's not accomplishing that goal
> > it
> > > would be useful to understand why not.
> >
> > OK. We have segment specific meta data(as I mentioned in beginning of the
> > mail thread)
> > in each segment that can't be counted in
> > ODP_CONFIG_PACKET_HEADROOM and/or ODP_CONFIG_PACKET_TAILROOM.
> >
> 
> If it's metadata then is doesn't come out of either of these. Regardless of
> how a platform stores metadata it is not addressable by the application as
> part of the packet and hence not included in
> ODP_CONFIG_PACKET_BUF_LEN_MIN.  So the equation should still hold.

ODP_CONFIG_PACKET_BUF_LEN_MIN has special hardware constraints(like size should 
be 
multiple of cache line size etc). If we are changing the 
ODP_CONFIG_PACKET_BUF_LEN_MIN
to hold the equations the it will create hole(unused space in buffer) for no 
reason. For example, if
segment specific meta data is 8 bytes and cache size 128 byte..in this case 
each buffer will waste
around 120 bytes.



> 
> You're articulating why applications neither know nor care about physical
> segment sizes used by implementations. The only thing applications can see
> are the logical segments exposed by the ODP APIs.
> 
> 
> >
> >
> > >
> > > >
> > > > 2) pool creation with number of buffers as one and creating a segmented
> > > > buffers as
> > > > packet_len is more than one segment.
> > > >
> > >
> > > A packet (I use that term here since in our current definition only
> > packets
> > > can support segmentation or headroom) is an object that consists of
> > packet
> > > metadata plus packet data.  Packet data is stored in one or more
> > segments,
> > > depending on how the pool it is allocated from is created, but
> > independent
> > > of the number of segments used to store this data it is still a single
> > > packet.  So num_bufs (which will presumably be num_packets in the new
> > pool
> > > definitions) always has a precise meaning.
> >
> > but it has to be num_bufs == num_packet segments
> 
> 
> And why is that?  They are logically different concepts.  Conflating them
> only leads to confusion.
> 
> 
> > >
> > >
> > > >
> > > > >
> > > > > I think the cleanest solution would be to have the platform segment
> > size
> > > > > for a given pool accessible as pool metadata, e.g.,
> > > > > odp_pool_seg_size(pool), but the real issue is why does the
> > application
> > > > > want this information?  If an application wants to ensure that
> > packets
> > > > are
> > > > > unsegmented then the simplest solution is to re-introduce the notion
> > of
> > > > > unsegmented pools.  If an application creates an unsegmented pool
> > then by
> > > > > definition any object allocated from that pool will only consist of a
> > > > > single segment.  By contrast, if the application is designed to
> > support
> > > > > segments then it shouldn't care.
> > > >
> > > > IMO, its simple to add a ODP_CONFIG or odp_packet_alloc of len == 0 for
> > > > default packet size
> > > >
> > >
> > > ODP_CONFIG is how we're doing things now.  More specific configurations
> > > should be doable on a per-pool basis (subject to implementation
> > > restrictions) given an expanded odp_pool_param_t definition.
> > >
> > >
> > > >
> > > > >
> > > > > On Mon, Jan 19, 2015 at 3:27 AM, Jerin Jacob <
> > > > jerin.ja...@caviumnetworks.com
> > > > > > wrote:
> > > > >
> > > > > > On Sat, Jan 17, 2015 at 09:45:12AM -0600, Bill Fischofer wrote:
> > > > > > > Application-visible sizes refer to application-visible data.
> > > > Metadata is
> > > > > > > always implementation-specific and not included in such counts.
> > > > Metadata
> > > > > > > is "off books" data that is associated with the packet but is not
> > > > part of
> > > > > > > any addressable packet storage. The advantage of having a packet
> > > > object
> > > > > > is
> > > > > > > that the packet APIs can refer to the packet independent of any
> > > > > > > implementation and not to how the packet may be represented in
> > > > storage
> > > > > > on a
> > > > > > > particular platform.
> > > > > >
> > > > > > But coming back to my question, How an application can create a one
> > > > segment
> > > > > > full length packet ?
> > > > > > Following equation may not be correct in all platforms
> > > > > > packet_len = ODP_CONFIG_PACKET_BUF_LEN_MIN -
> > > > ODP_CONFIG_PACKET_HEADROOM -
> > > > > > ODP_CONFIG_PACKET_TAILROOM;
> > > > > >
> > > > > >
> > > > > > >
> > > > > > > Trying to reason about buffers that are used to store packet
> > data is
> > > > > > > inherently non-portable and should be discouraged. Hopefully the
> > > > switch
> > > > > > to
> > > > > > > events will help move us in that direction since packets are no
> > > > longer a
> > > > > > > type of buffer using the new nomenclature.
> > > > > >
> > > > > > Should we remove  odp_buffer_size(buf) == odp_packet_buf_len(pkt))
> > test
> > > > > > case
> > > > > > or wait for event rework to happen ?
> > > > > >
> > > > > > >
> > > > > > > On Sat, Jan 17, 2015 at 5:52 AM, Jacob, Jerin <
> > > > > > > jerin.ja...@caviumnetworks.com> wrote:
> > > > > > >
> > > > > > > > Some odp_packet API queries based on exiting odp packet unit
> > test
> > > > case,
> > > > > > > >
> > > > > > > > 1) In exiting odp packet unit test case, In order to create one
> > > > full
> > > > > > > > length packet in one segment,
> > > > > > > > We have used following formula,
> > > > > > > > packet_len = ODP_CONFIG_PACKET_BUF_LEN_MIN -
> > > > > > ODP_CONFIG_PACKET_HEADROOM -
> > > > > > > > ODP_CONFIG_PACKET_TAILROOM;
> > > > > > > >
> > > > > > > > This may not be valid in all platform if the packet segment has
> > > > segment
> > > > > > > > specific meta data.
> > > > > > > > I think, we need to create either new ODP_CONFIG to define the
> > > > default
> > > > > > > > packet size
> > > > > > > > or odp_packet_alloc of len == 0 can be used to create default
> > > > packet
> > > > > > size.
> > > > > > > >
> > > > > > > > 2) If buffer is NOT aware of segmentation then
> > > > odp_buffer_size(buf) of
> > > > > > > > packet should be ODP_CONFIG_PACKET_BUF_LEN_MIN
> > > > > > > > instead of odp_buffer_size(buf) == odp_packet_buf_len(pkt)) .
> > > > > > > >
> > > > > > > > Any thoughts ?
> > > > > > > >
> > > > > > > > - Jerin
> > > > > > > > _______________________________________________
> > > > > > > > lng-odp mailing list
> > > > > > > > lng-odp@lists.linaro.org
> > > > > > > > http://lists.linaro.org/mailman/listinfo/lng-odp
> > > > > > > >
> > > > > >
> > > >
> >

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to