Thank you Joe for the response.

Regards
_Sugesh


> -----Original Message-----
> From: Joe Stringer [mailto:j...@ovn.org]
> Sent: Friday, May 26, 2017 7:02 PM
> To: Chandran, Sugesh <sugesh.chand...@intel.com>
> Cc: Zoltán Balogh <zoltan.bal...@ericsson.com>; Andy Zhou
> <az...@ovn.org>; William Tu <u9012...@gmail.com>;
> gvrose8...@gmail.com; ovs dev <d...@openvswitch.org>; Ben Pfaff
> <b...@ovn.org>; Jan Scheurich <jan.scheur...@ericsson.com>; Gray, Mark D
> <mark.d.g...@intel.com>
> Subject: Re: [ovs-dev] [PATCH v5] tunneling: Avoid recirculation on datapath
> by computing the recirculate actions at translate time.
> 
> On 26 May 2017 at 10:42, Chandran, Sugesh <sugesh.chand...@intel.com>
> wrote:
> >
> >
> > Regards
> > _Sugesh
> >
> >
> >> -----Original Message-----
> >> From: Zoltán Balogh [mailto:zoltan.bal...@ericsson.com]
> >> Sent: Friday, May 26, 2017 3:01 PM
> >> To: Joe Stringer <j...@ovn.org>
> >> Cc: Chandran, Sugesh <sugesh.chand...@intel.com>; Andy Zhou
> >> <az...@ovn.org>; William Tu <u9012...@gmail.com>;
> >> gvrose8...@gmail.com; ovs dev <d...@openvswitch.org>; Ben Pfaff
> >> <b...@ovn.org>; Jan Scheurich <jan.scheur...@ericsson.com>; Gray,
> Mark
> >> D <mark.d.g...@intel.com>
> >> Subject: RE: [ovs-dev] [PATCH v5] tunneling: Avoid recirculation on
> >> datapath by computing the recirculate actions at translate time.
> >>
> >>
> >> Hi Joe,
> >>
> >> > Backing up a bit for context, the stats attribution goes roughly like 
> >> > this:
> >> > * First upcall, handler thread calls through the translate code
> >> > with a packet. The resubmit_stats are derived from that packet.
> >> > This goes through xlate_actions().
> >> > * First dump of flow from revalidator thread fetches the flow and
> >> > runs the same xlate_actions() with whatever stats it has (may be zero).
> >> > This time, whenever stats attribution or side effects occur, an
> >> > xlate_cache entry is generated.
> >> > * Second and subsequent dumps of flows fetches the flow and
> >> > shortcuts the xlate_actions() by using the xlate_cache instead - ie
> >> > a call to xlate_push_stats().
> >> >
> >> > So, in the same place where the resubmit_stats is manipulated, you
> >> > would also need to generate a new XC entry which would manipulate
> >> > the stats - this would be a 'side-effect'. I'd imagine that prior
> >> > to the full output translation there would be a
> >> > XC_TRUNCATE(truncated_size) then afterwards there would be an
> >> > XC_TRUNCATE_RESET(). Or it could be just XC_SET_SIZE(...) where 0
> >> > is reset and non-zero is a truncate size. In the
> >> > implementation/execution in xlate_push_stats() when performing
> >> > XC_TRUNCATE you would need to store the original push_stats size
> >> > somewhere, then calculate a new 'n_bytes' based on the number of
> >> > packets and existing bytes*. For XC_TRUNCATE_RESET(), it would
> restore the original push_stats size.
> >>
> >>  Thank you for the explanation.
> >>
> >> > * Hmm, I'm not sure the calculation will be 100% here. Let's say
> >> > there were 3 packets hit the flow, 50B, 200B, 300B. If
> >> > output(max_len=100) was executed, then we don't know how many of
> >> > the packets were truncated. The maximum number of bytes that could
> >> > be transmitted is 300, but the actual number was 250. We could
> >> > divide the n_bytes by n_packets, subtract the max_len and then
> >> > multiply back up by the number of packets, which works for this
> >> > case assuming floating point arithmetic but is slightly off if using 
> >> > integer
> math..
> >>
> >> I don't think, that would be the proper way of calculating n_bytes.
> >> Let's say we have 3 packets with 50B, 200B, 200B and max_len=100. The
> >> output should be 50 + 100 + 100 = 250B.
> >> Following the instructions above we will get
> >> [(50 + 200 + 200) / 3 - 100 ] * 3 = [450 / 3 - 100 ] * 3 = 50 * 3 =
> >> 150B
> >>
> >> Any other idea how to calculate the truncated size with xlate cache?
> >> Or maybe I did not understand your calculation.
> > [Sugesh] Since we have this issue with the trunc action, How about
> > limit the combine action only for those tunnels that don’t have any post
> trunc action.
> > If there is a trunc action, Create two separate rules normally as now.
> > Is there any other action that would be considered as exception like this?
> 
> There's no need for different rules.
[Sugesh] Ok. What I meant here is do the combine only for the non trunc case.
> 
> Translation of truncate+output is done from xlate_output_trunc_action(),
> which calls the common
> xlate_output_action() translation after setting up the packet max_len.
> Perhaps this path just needs to keep the recirculation, while the common
> xlate_output_action() path should be capable of doing this 'combined'
> (patch-port-style) translation.
[Sugesh] yes.
> 
> I think your last question is effectively asking 'who calls 
> xlate_output_action'.
> I see output_reg, output_trunc enqueue, bundle, and regular output. I think
> that truncate is the only 'special' case from this perspective.
[Sugesh] So we can treat trunc as a special case then,
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to