[ovs-dev] [ovs-discuss] Hackaton follow-up: DPI engine integration proposal
Justin Pettit
jpettit at nicira.com
Fri Mar 28 16:39:06 UTC 2014
Franck BAUDIN wrote:
>> - It requires OVS to link against the library. We don't want to link
>> against third-party libraries, and I don't think this will work for most
>> distributions anyway, unless you're planning to upstream a library to the
>> various Linux distributions.
> The DPI library itself is loaded via dlopen, so there is no "link" to a third party library. Moreover, I propose a generic DPI API (BWT, comments welcome on the API!): any DPI engine could be plugged via a thin wrapper to this simple and compact API. For instance ndpi (open source DPI library) . Also, this API could be reused in any vswitch or any stack.
This would still require some sort of stable API.
>> - It requires that new flows continue to be sent to userspace. This
>> may have worked before megaflows (although the performance would be
>> even worse, since we're delaying packet set up even longer), but it's
>> something that we can't go back to now. Performance is just too critical.
> This can be addressed with the new Openflow "dpi" action: the megaflow could be partially disabled by the action for the matching flow only (5-tuple only).
As mentioned below, this will still cause bad megaflows.
>> - Based on this mechanism, when you've white-listed a flow, it will be
>> based on at least a five-tuple, which means megaflows in the kernel will
>> always include the L4 port. This means when this is enabled, it will essentially
>> bring the performance back to pre-megaflow levels.
> You mean the datapath lookup, right?
Correct.
>> Based on a prior conversation, I thought we were looking at integrating in the
>> kernel. That still seems like the best approach, since it would take care of
>> these the above concerns.
> The problem with this approach is that all flows will be processed by the DPI, with performance impact. Targeted DPI is not possible in the case that you propose, at least with an OpenFlow rule.
I was thinking that the kernel module would be responsible for
determining whether it needed to look at the packet itself. It could
contain a 5-tuple (or more likely a 5-tuple plus context) and ignore the
packet if classification has occurred. It wouldn't depend on OVS's flow
table.
>> I spoke with Jesse, and he thinks we could only
>> supply the necessary hooks, though, if the DPI engine (or at least the pass-
>> thru mechanism to the DPI engine in
>> userspace) was upstreamed. Have you looked into doing that?
> Not yet, it would be great if Jesse gave me some insight about the implementation he has in mind. Maybe there is an elegant way to implement selective DPI, but I just don't see how now.
I think what he had in mind is that the kernel supports DPI, and then we
hook into that. Similar to what I proposed at the hackfast for
conntrack support.
With megaflows, on flow tables that looked at the L4 ports, we saw at
least an order of magnitude flow setup performance increase (and in some
cases orders of magnitude). Any proposal which removes the ability to
use megaflows for a significant number of flows is a non-starter.
(I moved the thread to the ovs-dev mailing list, since that's a more
natural place to have this.)
--Justin
More information about the dev
mailing list