The design doc says what I've been saying here. It's the application's responsibility to ensure that the rule set specified is unambiguous.
On Tue, Apr 21, 2015 at 8:08 AM, Bala Manoharan <bala.manoha...@linaro.org> wrote: > On 21 April 2015 at 18:15, Ola Liljedahl <ola.liljed...@linaro.org> wrote: > > On 21 April 2015 at 14:26, Maxim Uvarov <maxim.uva...@linaro.org> wrote: > >> > >> On 04/21/15 15:01, Bill Fischofer wrote: > >>> > >>> Behavior is undefined if rules are ambiguous. Consider the following > >>> rules: > >>> > >>> protocol == UDP --> CoS A > >>> port == 1234 --> CoS B > >>> > >>> What happens if a UDP packet for port 1234 arrives? Answer: undefined. > >> > >> > >> > >> Isn't pmr created one by one to the table? And first match will return > Cos > >> A in that case. > > > > Since we are having this discussion, it is obvious that we need a > definition > > of the ODP classification that cannot be misunderstood or misinterpreted. > > Probably a formal definition. Or do everyone here agree that the > (current) > > linux-generic implementation can serve as *the* definition? > > Shouldn't we use the classification design document as the definition > of classification and the linux-generic implementation can be used as > a reference and not "the" definition. > > Regards, > Bala > > > > > > > >> > >> > >> Maxim. > >> > >>> The result may be either CoS A or CoS B. > >>> > >>> A better rule set would be: > >>> > >>> protocol == UDP --> CoS A > >>> > >>> CoS A && port == 1234 --> CoS B > >>> > >>> Now this is unambiguous. UDP packets go to CoS A unless they also > >>> specify port 1234, in which case they go to CoS B. > >>> > >>> On Tue, Apr 21, 2015 at 4:52 AM, Ola Liljedahl < > ola.liljed...@linaro.org > >>> <mailto:ola.liljed...@linaro.org>> wrote: > >>> > >>> On 20 April 2015 at 21:49, Bill Fischofer > >>> <bill.fischo...@linaro.org <mailto:bill.fischo...@linaro.org>> > wrote: > >>> > >>> Classification is a collaboration between the implementation > >>> and the application. It is the application's responsibility to > >>> write unambiguous classification rules and it is the > >>> implementation's job to perform the match as efficiently and > >>> as specifically as possible. > >>> > >>> What should an implementation do if the classification rules are > >>> ambiguous? E.g. if partial matches (of different partially > >>> overlapping rules) use different CoS? Is this an error already > >>> when creating the PMR rules? > >>> > >>> -- Ola > >>> > >>> > >>> On Mon, Apr 20, 2015 at 7:33 AM, Ola Liljedahl > >>> <ola.liljed...@linaro.org <mailto:ola.liljed...@linaro.org>> > >>> wrote: > >>> > >>> On 17 April 2015 at 22:55, Rosenboim, Leonid > >>> <leonid.rosenb...@caviumnetworks.com > >>> <mailto:leonid.rosenb...@caviumnetworks.com>> wrote: > >>> > >>> > >>> Guys, > >>> > >>> There are several versions of the Classifier API > >>> document floating in Google docs, here is one such > copy: > >>> > >>> > >>> > https://docs.google.com/document/d/14KMqNPIgd7InwGzdP2EaI9g_V3o0_wxpgp3N-nd-RBE/edit?usp=sharing > >>> > >>> Here is a different perspective on what PMR and COS > >>> mean, perhaps in terms of an abstract hardware > >>> implementation: > >>> > >>> CoS is a meta-data field assigned to each packet as it > >>> traverses the classifier pipe-line. > >>> > >>> A packet is assigned an initial CoS by the pktio port > >>> which received it. > >>> > >>> Then, the packet is compared multiple times against a > >>> set of rules, and as it is common with TCAMs, each > >>> comparisons happens against all rules in parallel. > >>> > >>> Each rule has two values to match: 1. the current CoS > >>> meta-data field; and 2. a certain packet header field > >>> (value with a mask). > >>> If both these values match, the packet met-data CoS > >>> field is changed (Action taken) with the destination > >>> CoS of the matching rule. > >>> > >>> It is assumed that up to one such rule has matched. > >>> > >>> If a rule has matched, CoS has changed, the process > >>> continues one more time. > >>> > >>> If NO MATCH occured, the classification process is > >>> finished, and the packet is delivered in accordance to > >>> the current CoS (i.e. the last matching rule or the > >>> pktio default CoS if the first rule match failed). > >>> > >>> So partial matches are valid. Is this what we want, e.g. > >>> from application point of view and from HW point of view? > >>> > >>> Is partial matches what is commonly supported by HW > >>> classifiers? > >>> > >>> A classifier which supports these longest prefix matches > >>> can easily implement perfect matching (all partial matches > >>> just specify the "default" CoS). But a classifier which > >>> only supports perfect matching cannot directly support > >>> partial matches. I assume you would have to internally > >>> create rules/patterns for all (relevant) partial matches > >>> as well. The implementation can find all relevant partial > >>> matches (prefix rules which specify a CoS different from > >>> the default CoS) and add those to the list of rules. > >>> Longer prefix matches should be prioritized (however that > >>> is done) over shorter prefix matches. > >>> > >>> The reason I really want to understand the required > >>> semantics is that I am planning to design an optimized > >>> parser/classifier in SW. Pointer-chasing is a no-no, > >>> performance will come from cache-friendly access pattern > >>> and some kind of parallelism (e.g. SIMD). I don't know how > >>> good it can get. > >>> > >>> > >>> > >>> According to CoS, the packet buffer pool and the > >>> destination queue are selected, and the packet is > >>> ready for application processing. > >>> > >>> Here are some additional observations with regads to > >>> use of CoS values: > >>> > >>> Multiple pktio may assign the same CoS initially. > >>> (eaming many pktio to one CoS) > >>> > >>> Multple rules can assign the same CoS as destination > >>> (action). (meaning multuple PMR to one destination > CoS). > >>> > >>> Regarding the source CoS of a PMR, I can not rule out > >>> a PMR that can match multiple CoS values (that is > >>> creating a many-to-many src-CoS to PMR relationship), > >>> but this scheme seems problematic for ease of use as > >>> well as implementation, so I would recommend to assume > >>> that each PMR should only have a single source CoS. > >>> > >>> Multiple PMRs may have the same source-CoS, but > >>> different header fields ot value/mask (creating an OR > >>> combination of PMRs). > >>> > >>> I felt that I had to take this discussion ina > >>> completely different direction to avoid infinite > >>> recursion ;-) > >>> > >>> Good weekend all, > >>> > >>> - Leo > >>> > >>> > >>> > >>> _______________________________________________ > >>> lng-odp mailing list > >>> lng-odp@lists.linaro.org > >>> <mailto:lng-odp@lists.linaro.org> > >>> https://lists.linaro.org/mailman/listinfo/lng-odp > >>> > >>> > >>> > >>> _______________________________________________ > >>> lng-odp mailing list > >>> lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org> > >>> https://lists.linaro.org/mailman/listinfo/lng-odp > >>> > >>> > >>> > >>> > >>> > >>> > >>> _______________________________________________ > >>> lng-odp mailing list > >>> lng-odp@lists.linaro.org > >>> https://lists.linaro.org/mailman/listinfo/lng-odp > >> > >> > >> _______________________________________________ > >> lng-odp mailing list > >> lng-odp@lists.linaro.org > >> https://lists.linaro.org/mailman/listinfo/lng-odp > > > > > > > > _______________________________________________ > > lng-odp mailing list > > lng-odp@lists.linaro.org > > https://lists.linaro.org/mailman/listinfo/lng-odp > > > _______________________________________________ > lng-odp mailing list > lng-odp@lists.linaro.org > https://lists.linaro.org/mailman/listinfo/lng-odp >
_______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp