On Tue, Oct 07, 2014 at 09:33:06AM +0000, Pattan, Reshma wrote:
> Hi All,
>
> I am planning to implement packet reorder library. Details are as below,
> please go through them and provide the comments.
>
> Requirement:
> To reorder out of ordered packets that are received from
> different cores.
>
> Usage:
> To be used along with distributor library. Next version of distributor are
> planned to distribute incoming packets to all worker cores irrespective of
> the flow type.
> In this case to ensure in order delivery of the packets at output side
> reorder library will used by the tx end.
>
> Assumption:
> All input packets will be marked with sequence number in seqn field of mbuf,
> this will be the reference for reordering at the tx end.
> Sequence number will be of type uint32_t. New sequence number field seqn will
> be added to mbuf structure.
>
> Design:
> a)There will be reorder buffer(circular buffer) structure maintained in
> reorder library to store reordered packets and other details of buffer like
> head to drain the packet from, min sequence number and other details.
> b)Library will provide insert and drain functions to reorder
> and fetch out the reordered packets respectively.
> c)Users of library should pass the packets to insert functions for reordering.
>
> Insertion logic:
> Sequence number of current packet will be used to calculate offset in reorder
> buffer and write packet to the location in the reorder buffer corresponding
> to offset.
> Offset is calculated as difference of current
> packet sequence number and sequence number associated with reorder buffer.
>
> During sequence number wrapping or wrapping over of reorder buffer size,
> before inserting the new packet we should move offset number of packets to
> other buffer called overflow buffer and advance the head of reorder buffer by
> "offset-reorder buffer size" and insert the new packet.
>
> Insert function:
> int rte_reorder_insert(struct rte_reorder_buffer *buffer, struct rte_mbuf
> *mbuf);
> Note: Other insert function is also under plan to insert burst of packets.
>
> Reorder buffer:
> struct rte_reorder_buffer {
> unsigned int size; /* The size (number of entries) of the
> buffer. */
> unsigned int mask; /* Mask (size - 1) of the buffer */
> unsigned int head; /* Current head of buffer */
> uint32_t min_seqn; /* latest sequence number associated with
> buffer */
> struct rte_mbuf *entries[MAX_REORDER_BUFFER_SIZE]; /* buffer to hold
> reordered mbufs */
> };
>
> d)Users can fetch out the reordered packets by drain function provided by
> library. Users must pass the mbuf array , drain function should fill passed
> mbuff array with the reordered buffer packets.
> During drain operation, overflow buffer packets will be fetched out first
> and then reorder buffer.
>
> Drain function:
> int rte_reorder_drain(struct rte_reorder_buffer *buffer,
> struct rte_mbuf **mbufs)
>
> Thanks,
> Reshma
>
This seems reasonable, but why not integrate it with the distributor library
rather than create a separate library for it? It seems as though the
distributor library is a pre-requisite for this libraries use anyway, as
otherwise there will not be anything to reorder
Neil
> --------------------------------------------------------------
> Intel Shannon Limited
> Registered in Ireland
> Registered Office: Collinstown Industrial Park, Leixlip, County Kildare
> Registered Number: 308263
> Business address: Dromore House, East Park, Shannon, Co. Clare
>
> This e-mail and any attachments may contain confidential material for the
> sole use of the intended recipient(s). Any review or distribution by others
> is strictly prohibited. If you are not the intended recipient, please contact
> the sender and delete all copies.
>
>