[ovs-dev] [PATCH] classifier: Documentation clarifications.
Jarno Rajahalme
jrajahalme at nicira.com
Sat Jun 6 19:50:13 UTC 2015
This applies after the bundles v3 series patch 07/12.
Jarno
> On Jun 6, 2015, at 12:48 PM, Jarno Rajahalme <jrajahalme at nicira.com> wrote:
>
> Signed-off-by: Jarno Rajahalme <jrajahalme at nicira.com>
> ---
> lib/classifier.h | 63 +++++++++++++++++++++++++++++++++++-------------------
> 1 file changed, 41 insertions(+), 22 deletions(-)
>
> diff --git a/lib/classifier.h b/lib/classifier.h
> index 2798752..f41fed3 100644
> --- a/lib/classifier.h
> +++ b/lib/classifier.h
> @@ -227,24 +227,25 @@
> * in a way to not remove the rule before all ongoing lookups are finished, the
> * rule should be marked as "to be deleted" by setting the rule's visibility to
> * the negation of the last version number in which it should be visible.
> - * Then, when all the lookups use that future version number, the rule can be
> - * actually deleted from the classifier. A rule that is marked for deletion in
> - * a future version will not appear in iterations, although it will still be
> - * found by lookups using an earlier lookup version number.
> + * Then, when all the lookups use a later version number, the rule can be
> + * actually deleted from the classifier. A rule that is marked for deletion
> + * after a future version will not appear in iterations, although it will still
> + * be found by lookups using a lookup version number up to that future version
> + * number.
> *
> * Classifiers can hold duplicate rules (rules with the same match criteria and
> - * priority) when at most one of the duplicates is visible in any given lookup
> - * version. The caller responsible for classifier modifications must maintain
> - * this invariant.
> + * priority) when at most one of the duplicates with the same priority is
> + * visible in any given lookup version. The caller responsible for classifier
> + * modifications must maintain this invariant.
> *
> * The classifier supports versioning for two reasons:
> *
> - * 1. Support for versioned modifications makes it possible to support
> - * an arbitraty series of classifier changes as one atomic transaction,
> + * 1. Support for versioned modifications makes it possible to perform an
> + * arbitraty series of classifier changes as one atomic transaction,
> * where intermediate versions of the classifier are not visible to any
> * lookups. Also, when a rule is added for a future version, or marked
> - * for removal in a future version, such modifications can be reverted
> - * without any visible effects to any of the current lookup versions.
> + * for removal after the current version, such modifications can be
> + * reverted without any visible effects to any of the current lookups.
> *
> * 2. Performance: Adding (or deleting) a large set of rules can, in
> * pathological cases, have a cost proportional to the number of rules
> @@ -253,23 +254,28 @@
> * typically avoided, as long as it is OK for any new rules to be
> * invisible until the batch change is complete.
> *
> + * Note that the classifier_replace() function replaces a rule immediately, and
> + * is therefore not safe to use with versioning. It is still available for the
> + * users that do not use versioning.
> + *
> *
> * Deferred Publication
> * ====================
> *
> * Removing large number of rules from classifier can be costly, as the
> - * supporting data structures are teared down, just to be re-instantiated right
> - * after. In the worst case, as when each rule has a different match pattern
> - * (mask), the maintenance of the match pattern can have cost O(N^2), where N
> - * is the number of different match patterns. To alleviate this, the
> - * classifier supports a "deferred mode", in which changes in internal data
> - * structures used for lookups may not be fully computed yet. The computation
> - * is finalized when the deferred mode is turned off.
> + * supporting data structures are teared down, in many cases just to be
> + * re-instantiated right after. In the worst case, as when each rule has a
> + * different match pattern (mask), the maintenance of the match patterns can
> + * have cost O(N^2), where N is the number of different match patterns. To
> + * alleviate this, the classifier supports a "deferred mode", in which changes
> + * in internal data structures needed for future version lookups may not be
> + * fully computed yet. The computation is finalized when the deferred mode is
> + * turned off.
> *
> * This feature can be used with versioning such that all changes to future
> - * versions are made in the deferred mode. Then, right before making the new
> + * versions are made in the deferred mode. Then, right before making the new
> * version visible to lookups, the deferred mode is turned off so that all the
> - * data structures are ready for lookups.
> + * data structures are ready for lookups with the new version number.
> *
> * To use deferred publication, first call classifier_defer(). Then, modify
> * the classifier via additions (classifier_insert() with a specific, future
> @@ -281,8 +287,21 @@
> * Thread-safety
> * =============
> *
> - * The classifier may safely be accessed by many reader threads concurrently or
> - * by a single writer. */
> + * The classifier may safely be accessed by many reader threads concurrently
> + * and by a single writer, or by multiple writers when they guarantee mutually
> + * exlucive access to classifier modifications.
> + *
> + * Since the classifier rules are RCU protected, the rule destruction after
> + * removal from the classifier must be RCU postponed. Also, when versioning is
> + * used, the rule removal itself needs to be typically RCU postponed. In this
> + * case the rule destruction is doubly RCU postponed, i.e., the second
> + * ovsrcu_postpone() call to destruct the rule is called from the first RCU
> + * callback that removes the rule.
> + *
> + * Rules that have never been visible to lookups are an exeption to the above
> + * rule. Such rules can be removed immediately, but their destruction must
> + * still be RCU postponed, as the rule's visibility attribute may be examined
> + * parallel to the rule's removal. */
>
> #include "cmap.h"
> #include "match.h"
> --
> 1.7.10.4
>
More information about the dev
mailing list