Replies: 7 comments 10 replies
-
Adjacent cookies removals only work well (for one part of the removal convergence) when flow matches are equal or when it's removing entirely from a switch. Example where it doesn't work well is when only a set is being removed (current or failover path), and the other NApp might also have different flow matches (pretty rare case, but that's |
Beta Was this translation helpful? Give feedback.
-
Fourth method (what we currently have a general rule): don't change other NApps flows. If flows need to be augmented but there's a very closely tight coupled functionality (and it's not a generic type of relationship), it can potentially also just be a feature in the NApp. So, in this case users can propose a new feature on a NApp, and if that's considered useful without bloating too much but simplifying things than it might be accepted, otherwise they should stick with other solutions. |
Beta Was this translation helpful? Give feedback.
-
General comment about network convergence events:
Examples: A NApp that blocks traffic with higher priority flows in a given UNI. |
Beta Was this translation helpful? Give feedback.
-
A point we'll need to sort out to see which solutions/options will be supported is how |
Beta Was this translation helpful? Give feedback.
-
I think we should not concentrate on the number of flows at this point. Even though this is very important, migrating to P4 will bring many new possibilities for optimization in this sense in the near future, so optimizing this now wouldn't benefit us much. |
Beta Was this translation helpful? Give feedback.
-
For EVCs, the switch is doing two things, identifying what service the packet is part of, then update any routing headers and send it off to the next switch, or its destination. What if we instead have the EVC opts into these extensions, by telling the switch which of these extensions it opts into. To do so, we can use packet metadata. We have the first table identify the EVC, and add metadata containing an identifier, which will later be used for outputing the packet, plus flags for the various types of extensions to apply to the packet. The extensions, which the EVC subscribes to, always exist separate from the EVC. This means that extensions don't need any cleanup when it comes to removing any specific EVC, as the flows for the extension are meant for all EVCs on that switch. If there is an extension that needs to know about a specific EVC in order to work correctly, then it can use that EVC's identifier for that switch. |
Beta Was this translation helpful? Give feedback.
-
Let's try to summarize and settle on what we'll recommend, so far I think we should only support:
Now regarding the downsides of handling network convergence with higher priority flows:
See this topology here for an example:
The general thing is, if you're dealing with higher priority flows, you need to be aware of how network convergence works, but then if you strategically only deal with certain paths (or sometimes if you're only working at a interface or link level) the NApp can be simpler. Higher priority flows also compose well, and considering how the platform has evolve this is the least disruptive way of doing so. Optimizing for flow removals can be discussed too, but I don't expect that removals would be a bottle neck. If fact there are many other optimizations at mef_eline that we still didn't prioritize such as reusing existing paths (but that's a major undertaking that likely won't be prioritized in the medium term). Higher priority flows will still keep most of the NApps responsibilities independently, facilitating for potential consistency checks. It should be a core part of the design to ensure that you aim for a reasonable convergence, that's part of writing network applications, and then you measure what users can expect for your NApp, if it's not good enough then you can rethink about the design, and/or consider whether or not it needs to be a feature in the main NApp in the first place. |
Beta Was this translation helpful? Give feedback.
-
One feature of Kytos which we wish to see explored further is standardizing the way in which we extend the functionality of EVCs. EVCs, may be extended to have there traffic mirrored (
mirroring
), or have telemetry data attached (telemetry_int
), or to filter out specific types of traffic. However, at this moment, we have yet to develop a standardized methodology on how to do so. Various methods have different tradeoffs, so this issue is intended as a discussion on how to proceed.Currently, with
telemetry_int
, the way we handle extending EVCs is by adding a higher priority flow, which will then attach the telemetry data before it is routed to the next switch. Whenmef_line
updates or disables the EVC, thentelemetry_int
must handle convergence on the INT flows. However, this has the downside of additional flows, which take up additional space on switches, as well as tear down and installation still needing to be handled by the extending NApp.An alternative method that's been discussed, is to have the NApp extending the EVC, to modify the EVCs flows. This reduces the total number of flows on the switch, however it makes it more difficult for mef_eline and multiple NApps extending an EVC to coordinate. This does come with the advantage that
mef_eline
would naturally tear down these extensions with the EVC, when it comes time to update or remove the EVC.A third method, a sorta hybrid of the above two, is to still use higher priority flows, but to use flow cookies to add context information about the flows, while also making them classified as being part of the EVC. That way,
mef_eline
can tear them down automatically, while retaining the flexibility of multiple priority levels for extensions to use. This retains the downsize of taking up additional table space, but that ultimately shouldn't be too big a deal.EDIT:
According to @viniarck, we should be going for the following plan:
Beta Was this translation helpful? Give feedback.
All reactions