OK, that sounds reasonable to me. Can you update the comments to reflect that sFlow should be OK now - assuming that you think it is. I see two: ofproto/ofproto-dpif.c:port_construct() and the one in ofproto/tunnel.c about metadata for packet outs, which was intended to be for sFlow.
On Thu, Apr 25, 2013 at 8:18 PM, Neil McKee <neil.mc...@inmon.com> wrote: > Thank you for spending time thinking about this. > > There is no loss of information in changing from a per-interface sampling > model to a per-bridge sampling model. > > If there is a difference it's only on the configuration side, and since the > OVS sFlow config is already per-bridge, there is no conflict there. > > Hypothetically, if the datapath offered separate per-physical-port sampling > probability and we always knew what physical port a packet came in/went out > on, then we would have the choice of staying with the per-interface model and > changing the config schema to expose it. However that seems like a stretch > -- and not worth the effort at all if you remember that the normal practice > for sFlow monitoring is to configure the same sampling rate on every port of > every switch in the LAN. > > Neil > > > > On Apr 25, 2013, at 5:06 PM, Jesse Gross <je...@nicira.com> wrote: > >> OK, thanks for the explanation. I guess the part that I'm not entirely >> sure about is what is the tradeoff in modeling this as being >> per-bridge rather than per-port? It seems like like in the case of >> per-bridge sampling you are still including the ifIndex with the >> sample metadata so you don't lose any information. Is there any >> disadvantage? >> >> On Wed, Apr 24, 2013 at 2:04 PM, Neil Mckee <neil.mc...@inmon.com> wrote: >>> Actually it wasn't just tunnel ports. Anything that didn't have an ifIndex >>> was mapping to the same sFlow datasource. Even if it was on another bridge. >>> >>> Besides, sFlow wouldn't want to model every tunnel as a separate datasource >>> either -- even if they did have ifIndex numbers. There might be thousands. >>> The idea is to have a small number of fairly-persistent datasources and >>> report on tunnels by annotating individual packet samples (see below). >>> >>> I think the original thinking (years ago) was that we might ignore all >>> samples that did not ingress on an ifindex-interface, but that's not what >>> is happening, and it's not what we want to happen now anyway. Now it's >>> quite common to see ingress-sampled packets that we really want to report >>> on where that ingress port doesn't have an ifIndex (GRE tunnels being just >>> the most obvious example). So if we drop the per-interface-sampler >>> representation and adopt one that more accurately represents what is going >>> on below then it falls out correctly, and still conforms to the sFlow v5 >>> standard. >>> >>> So looking at the code, the hash-table that the ofproto-sflow module >>> maintains to look up odp_port -> struct of_port becomes just a cache of the >>> ifindex ports. It is still needed so that the counter-push data-sources >>> can retrieve the latest stats from the netdev, and so that the packet >>> samples can have their ingress ifindex filled in where applicable. >>> However if an ingress sample comes in for some other port and there is no >>> lookup in the table then it's no longer a show-stopper. It just means that >>> the packet sample goes out with inputPort = 0 (meaning "ifindex unknown "). >>> >>> Ideally, we would want to know the original ifIndex of the physical port >>> where that tunnel first entered the hypervisor, but that seems hard to >>> know. >>> >>> Looking ahead, it would be good to know the details of the tunnel too, so >>> we could annotate the packet-sample with another structure: >>> http://sflow.org/sflow_tunnels.txt >>> >>> but that might be part of a broader discussion where we look at ways to >>> expose more state to the ofproto-sflow module. For example, I am >>> currently looking at how the bundle information might be exposed so that we >>> can also fill in these structures: >>> http://www.sflow.org/sflow_lag.txt >>> >>> And sFlow has standard structures for reporting on MPLS too: >>> http://www.sflow.org/SFLOW-STRUCTS5.txt >>> >>> It seems like there is choice between (1) pushing the information down to >>> ofproto-sflow on a state-change (as we do with that odp_port -> of_port >>> lookup) or (2) providing callback hooks that allow ofproto-dpif-sflow to >>> ask ofproto-dpif questions about tunnels, bundles and more. Right now it >>> looks to me like the latter would be better, because it allows >>> ofproto-dpif to completely control what is exposed and keep a tight grip on >>> all it's internal pointers. But maybe there are other architectural >>> considerations? >>> >>> Neil >>> >>> >>> On Apr 24, 2013, at 11:09 AM, Jesse Gross wrote: >>> >>>> On Wed, Apr 24, 2013 at 10:46 AM, Neil Mckee <neil.mc...@inmon.com> wrote: >>>>> Adjust sFlow packet samplers to better reflect the underlying per-bridge >>>>> sampling that is really happening, rather than modeling it as >>>>> per-interface >>>>> sampling. This fixes an aliasing issue: tunnel traffic sampled on >>>>> different >>>>> bridges was all being reported against the same sFlow datasource. >>>>> >>>>> The sFlow counter samples remain unchanged, reporting only on interfaces >>>>> that have valid ifIndex numbers. >>>>> >>>>> See definition of SFlowDataSource in http://sflow.org/sflow_version_5.txt. >>>>> >>>>> Signed-off-by: Neil McKee <neil.mc...@inmon.com> >>>> >>>> It actually is possible to disambiguate between tunnel ports in order >>>> to continue reporting on a per-port basis, have you considered doing >>>> that? >>> _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev