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

Reply via email to