I agree with Ola here on preserving the ingress order. However, I have experienced same performance issue as Nikhil pointed out (atomic queues have too much overhead for short critical section)
I am not sure about any other HW but Cavium has support for introducing the critical section while maintain the ingress order as a HW scheduler feature. IMO, if such support is available in other HW then odp_schedule_ordered_lock()/unlock() kind of API will solve the performance issue for the need for short critical section in ordered flow. /Jerin. From: lng-odp <lng-odp-boun...@lists.linaro.org> on behalf of Ola Liljedahl <ola.liljed...@linaro.org> Sent: Thursday, May 7, 2015 9:06 PM To: nikhil.agar...@freescale.com Cc: lng-odp@lists.linaro.org Subject: Re: [lng-odp] Query regarding sequence number update in IPSEC application Using atomic queues will preserve the ingress order when allocating and assigning the sequence number. Also you don't need to use an expensive atomic operation for updating the sequence number as the atomic queue and scheduling will provide mutual exclusion. If the packets that require a sequence number came from parallel or ordered queues, there would be no guarantee that the sequence numbers would be allocated in packet (ingress) order. Just using an atomic operation (e.g. fetch_and_add or similar) only guarantees proper update of the sequence number variable, not any specific ordering. If you are ready to trade absolute "correctness" for performance, you could use ordered or may even parallel (questionable for other reasons) queues and then allocate the sequence number using an atomic fetch_and_add. Sometimes packets egress order will then not match the sequence number order (for a flow/SA). For IPSec, this might affect the replay window check & update at the receiving end but as the replay protection uses a sliding window of sequence numbers (to handle misordered packets), there might not be any adverse effects in practice. The most important aspect is probably to preserve original packet order. -- Ola On 6 May 2015 at 11:29, nikhil.agar...@freescale.com <nikhil.agar...@freescale.com> wrote: Hi, In IPSEC example application, queues are used to update the sequence number. I was wondering why we have used queues to update sequence number which will add to scheduling delays and adversely hit the performance throughput. Is there any specific advantage of using queues over atomic variables. Thanks in advance Nikhil _______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp _______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp