openvswitch/ovs — pull request #3 by joestringer (2014-04-18 00:15:43+00:00)
Title: Cache the modules affected by xlate_actions().

### Summary
This series implements a cache for xlate_actions() so that full flow translation does not need to be performed for long-lived flows; instead, references are kept to the modules affected by it, and this cache can be used to attribute stats and provide other side-effects of translation. Revalidator threads construct the cache the first time a flow is dumped, which is why this only improves the situation for long-lived flows.

The "modules" which logic is implemented for are:
* Stats attribution
+ Rules
+ Netdevs
+ Bonds
+ Mirrors
* Side effects:
+ Learn actions - hard timeout refresh
+ Normal actions - mac learning
+ Fin timeout

### Results
These changes only improve long-lived flows, and the most benefit is gained when there is little or no revalidation. The time spent per flow to process stats is reduced by ~80% under this patchset, as compared with master. Under test conditions with occasional revalidation, this translates to the ability to support an average of double the flows in the datapath. Flow setup rate is impacted slightly by these changes, reducing by around 5-10%.

I plan to look into shifting ukey creation into handler threads, further reducing the workload for revalidator threads. This will allow these savings to also be applied to short-lived flows. That work is left for a future patchset.

### Changelog
#### V1 -> V2
* Add Acked-by lines to commit messages.

#### RFC-> V1
* Dropped bond export patch for bond_should_account(), bond_account_by_hash().
* Deferred patch to make revalidation happen more promptly for flow table changes.
* Support fin_timeout.
* Expire netflows in xlate_cache_clear().
* Improve method for selecting high-throughput flows.
* Misc fixes and cleanups