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

Reply via email to