openvswitch: Add support for unique flow IDs.
Previously, flows were manipulated by userspace specifying a full, unmasked flow key. This adds significant burden onto flow serialization/deserialization, particularly when dumping flows. This patch adds an alternative way to refer to flows using a variable-length "unique flow identifier" (UFID). At flow setup time, userspace may specify a UFID for a flow, which is stored with the flow and inserted into a separate table for lookup, in addition to the standard flow table. Flows created using a UFID must be fetched or deleted using the UFID. All flow dump operations may now be made more terse with OVS_UFID_F_* flags. For example, the OVS_UFID_F_OMIT_KEY flag allows responses to omit the flow key from a datapath operation if the flow has a corresponding UFID. This significantly reduces the time spent assembling and transacting netlink messages. With all OVS_UFID_F_OMIT_* flags enabled, the datapath only returns the UFID and statistics for each flow during flow dump, increasing ovs-vswitchd revalidator performance by 40% or more. Signed-off-by: Joe Stringer <joestringer@nicira.com> Acked-by: Pravin B Shelar <pshelar@nicira.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
7b1883cefc
commit
74ed7ab926
@@ -459,6 +459,14 @@ struct ovs_key_nd {
|
||||
* a wildcarded match. Omitting attribute is treated as wildcarding all
|
||||
* corresponding fields. Optional for all requests. If not present,
|
||||
* all flow key bits are exact match bits.
|
||||
* @OVS_FLOW_ATTR_UFID: A value between 1-16 octets specifying a unique
|
||||
* identifier for the flow. Causes the flow to be indexed by this value rather
|
||||
* than the value of the %OVS_FLOW_ATTR_KEY attribute. Optional for all
|
||||
* requests. Present in notifications if the flow was created with this
|
||||
* attribute.
|
||||
* @OVS_FLOW_ATTR_UFID_FLAGS: A 32-bit value of OR'd %OVS_UFID_F_*
|
||||
* flags that provide alternative semantics for flow installation and
|
||||
* retrieval. Optional for all requests.
|
||||
*
|
||||
* These attributes follow the &struct ovs_header within the Generic Netlink
|
||||
* payload for %OVS_FLOW_* commands.
|
||||
@@ -474,11 +482,23 @@ enum ovs_flow_attr {
|
||||
OVS_FLOW_ATTR_MASK, /* Sequence of OVS_KEY_ATTR_* attributes. */
|
||||
OVS_FLOW_ATTR_PROBE, /* Flow operation is a feature probe, error
|
||||
* logging should be suppressed. */
|
||||
OVS_FLOW_ATTR_UFID, /* Variable length unique flow identifier. */
|
||||
OVS_FLOW_ATTR_UFID_FLAGS,/* u32 of OVS_UFID_F_*. */
|
||||
__OVS_FLOW_ATTR_MAX
|
||||
};
|
||||
|
||||
#define OVS_FLOW_ATTR_MAX (__OVS_FLOW_ATTR_MAX - 1)
|
||||
|
||||
/**
|
||||
* Omit attributes for notifications.
|
||||
*
|
||||
* If a datapath request contains an %OVS_UFID_F_OMIT_* flag, then the datapath
|
||||
* may omit the corresponding %OVS_FLOW_ATTR_* from the response.
|
||||
*/
|
||||
#define OVS_UFID_F_OMIT_KEY (1 << 0)
|
||||
#define OVS_UFID_F_OMIT_MASK (1 << 1)
|
||||
#define OVS_UFID_F_OMIT_ACTIONS (1 << 2)
|
||||
|
||||
/**
|
||||
* enum ovs_sample_attr - Attributes for %OVS_ACTION_ATTR_SAMPLE action.
|
||||
* @OVS_SAMPLE_ATTR_PROBABILITY: 32-bit fraction of packets to sample with
|
||||
|
Reference in New Issue
Block a user