Contra: A Programmable System For Performance-aware

2y ago
2 Views
1 Downloads
1.79 MB
23 Pages
Last View : 1m ago
Last Download : 3m ago
Upload by : Francisco Tran
Transcription

Contra: A Programmable Systemfor Performance-aware RoutingKuo-Feng Hsu, Rice University; Ryan Beckett, Microsoft Research;Ang Chen, Rice University; Jennifer Rexford, Praveen Tammana,and David Walker, Princeton /presentation/hsuThis paper is included in the Proceedings of the17th USENIX Symposium on Networked Systems Designand Implementation (NSDI ’20)February 25–27, 2020 Santa Clara, CA, USA978-1-939133-13-7Open access to the Proceedings of the17th USENIX Symposium on NetworkedSystems Design and Implementation(NSDI ’20) is sponsored by

Contra: A Programmable System for Performance-aware RoutingKuo-Feng HsuRyan BeckettAng ChenRice UniversityMicrosoft ResearchRice UniversityJennifer RexfordPraveen TammanaDavid WalkerPrinceton UniversityPrinceton UniversityPrinceton UniversityAbstractWe present Contra, a system for performance-aware routingthat can adapt to traffic changes at hardware speeds. Whilepoint solutions exist for a fixed topology (e.g., a Fattree) witha fixed routing policy (e.g., use least utilized paths), Contra can operate seamlessly over any network topology anda wide variety of sophisticated routing policies. Users ofContra write network-wide policies that rank network pathsgiven their current performance. A compiler then analyzessuch policies in conjunction with the network topology anddecomposes them into switch-local P4 programs, which collectively implement a new, specialized distance-vector protocol. This protocol generates compact probes that traverse thenetwork, gathering path metrics to optimize for the user policy dynamically. Switches respond to changing network conditions by routing flowlets along the best policy-compliantpaths. Our experiments show that Contra scales to large networks, and that in terms of flow completion times, it is competitive with hand-crafted systems that have been customizedfor specific topologies and policies.1IntroductionConfiguring a network to achieve a diverse range of objectives, such as routing constraints (e.g., traffic should gothrough a series of middleboxes), and traffic engineering(e.g., minimize latency and maximize throughput), is a challenging task. To handle this complexity, one approach hasbeen to use SDN solutions, which have a centralized pointfor management [25, 26]. However, centralized controllersare inherently too slow to respond to fine-grained trafficchanges, such as short traffic bursts. In fact, even the software control planes locally on the switches are often limitedin their ability to select new routes fast enough.Recent work has developed load-balancing mechanismsthat operate entirely in the data plane to enable real-timeadaptation [11, 30]. By making use of fine-grained performance information on hardware timescales, these systemscan deliver considerable performance benefits over staticload-balancing mechanisms like ECMP. Unfortunately, existing systems, such as Conga [11] and Hula [30], are pointsolutions that only work under specific assumptions aboutthe network topology, routing constraints, and performanceUSENIX Associationobjectives—they only support a “least utilized shortest path”policy on a data center topology. It is not obvious how toadapt them for other kinds of topologies or policies.In this paper, we describe Contra, a general and programmable system for performance-aware routing. Networkoperators configure Contra by describing the network topology as well as a high-level policy that defines routing constraints and performance objectives. Contra then generatesP4 programs for switches in the network, which execute ina fully distributed fashion. Collectively, they implement aspecialized version of a distance-vector protocol that forwards traffic based on routing constraints and optimizes forthe user-defined performance objectives. This protocol operates by generating periodic probes that traverse policycompliant paths and collect user-defined performance metrics. Switches analyze the incoming probes and rank pathsin real time, storing the current best next hop to reach anygiven destination. Since the programs run in the data plane,switches can react to performance changes quickly. Overall,Contra is designed to achieve the following objectives: General – operates over a wide range of policiesReusable – works correctly for any topologyDistributed – does not require central coordinationResponsive – adapts to changing metrics quicklyImplementable – on today’s programmable data planesPolicy-compliant – packets only use allowed pathsLoop-free – mitigates persistent/transient loopsOptimal – converges to best paths under stable metricsStable – mitigates oscillation under changing metricsEfficient – avoids undue traffic and switch overheadOrdered – limits out-of-order packet deliveryTo achieve these objectives, we need to address severalchallenges. First, to operate over arbitrary topologies, Contrarequires new techniques to search the set of possible paths foroptimal routes. State-of-the-art solutions, such as Conga [11]and Hula [30], assume a tree-based data center topology,which makes exploring possible paths, avoiding forwarding loops, and finding optimal routes straightforward. Second, link and path metrics can change constantly, which may17th USENIX Symposium on Networked Systems Design and Implementation701

ObjectiveGeneralReusableDistributedResponsive le &EfficientOrderedKey idea(s)Language for performance-aware routingPolicies as path-ranking functionsPolicy analyzed jointly with topologySynthesis of data-plane routing protocolPeriodic probes to collect path metricsImplemented in P4Probes and packets carry policy statesSwitches keep track of state transitionsMonotonicity analysisProbes carry version numbersEarly loop breaking for flowletsIsotonicity analysisLimit the frequency of probesFailure detection and metric expirationPolicy-aware flowlet switchingSection(s)24.14.1–4.34.1–4.32, 5.1, 5.52, 5.2, 5.45.3Figure 1: Key ideas in Contra.cause unsynchronized views at different switches. Makingforwarding decisions based on inconsistent views may leadto forwarding loops or paths that violate the routing policy.Third, a naı̈ve solution that constantly changes routes cancause transient or even persistent chaos. We draw inspirations from wireless network routing [16, 38, 39], and designmechanisms that leverage programmable data planes to address this. Finally, we develop policy-aware flowlet switching, which routes flowlets to mitigate out-of-order packet delivery while ensuring policy compliance.Summary. We make several contributions in the design ofContra, and Figure 1 summarizes the key ideas. We define a new programming abstraction that viewspolicies as path-ranking functions, and generalizes existing languages by allowing operators to specify pathconstraints and dynamic metrics simultaneously. We design a new configurable, performance-aware,distance-vector routing protocol. We develop compilation algorithms that generateswitch-local P4 programs that implement a particularconfiguration of the protocol based on user policy. We have built a system prototype, and conducted thorough experiments to demonstrate that Contra is competitive with state-of-the-art systems that are customizedfor a specific topology and routing policy.Non-goals. There has been abundant recent research on efficient load-balancing strategies, especially in data centers.The goal of this work is not to outperform such strategies inthe contexts for which they have been manually optimized.Rather, our goal is to facilitate the deployment of such techniques on a much broader set of networks and with a broadercollection of optimization criteria, and to do so without asking network operators to take the time, or acquire the expertise necessary, to write “assembly-level” P4 programs.2Policy languageContra includes a high-level language that can express a widerange of user policies, which are functions that rank networkpaths. Our compiler then ensures that switches always usethe best policy-compliant paths. Users can combine regular702expressions, which express hard constraints on the allowedpaths, with performance metrics to express dynamic preferences. As a concrete example, consider the following policy:minimize( if A . then path.util else path.lat )It first classifies paths using a regular expression (A .*), andthen based on the classification, it defines the rank to be either path utilization or latency. Each node will separatelychoose its best paths according to this function. So nodeA will always choose the least utilized path, while all othernodes will select the path with the lowest latency.The Contra language can also capture static policies in existing systems that are not related to performance. For instance, FatTire [40] uses regular expressions to classify legaland illegal paths (though it says nothing about the performance of such paths). To route packets through a waypointW, a FatTire policy would be (.* W .*), which allows anypath through W but no other paths. Contra can represent thisby mapping all legal paths to 0 and illegal paths to :minimize( if . W . then 0 else )This policy will ensure that every node always selects a paththrough W if one exists in the network, and drops traffic otherwise; no path is preferred to a path with rank .As another example, Propane [14] allows users to writepolicies about failover preferences. A Propane policy (AB D) (A C D) indicates a preference for sending traffic through path A B D and only using A C D if the first pathis not available (e.g., a link has failed). In Contra, we canachieve the same effect by ranking paths statically as below.minimize( if A B D then 0 else if A C D then 1 else )In Contra, it is also possible to rank paths based on multiple metrics. For example, suppose we prefer that A reachesD via B instead of via C, and we also prefer shorter, lessutilized paths. This can be achieved by lexicographicallyranking paths, e.g., prefer paths through B first, then shortestpaths, and finally, least utilized paths.minimize( if A . B . D then (0, path.len, path.util)else if A . C . D then (1, path.len, path.util)else )Ranking paths using regular expressions defines strict, inviolate preferences; however, operators may have softer constraints based on path performance: e.g., one path may bepreferred up to a point, but if the utilization is too high thensome traffic should be shunted along another path instead.For example, to prefer least-utilized paths when the networkload is light (utilization of the path is less than 80%), evenif those paths are long, but to prefer shortest paths when network load is heavy (and hence to save bandwidth globally),one might use the following policy.minimize( if path.util .8then (1, 0, path.util)else (2, path.len, path.util) )17th USENIX Symposium on Networked Systems Design and ImplementationUSENIX Association

Policypol :: minimize(e)optimizationExpressionse :: nconstant numeric rank infinite rank path.attrpath attribute e1 e2binary operation if b then e1 else e2if statement (e1 , . . . , en )tupleBoolean Testsb :: r e1 e2 not b b1 or b2 b1 and b2Regular Pathsr :: node id . r1 r2 r1 r2 r Figure 2: Syntax for Contra policies.Finally, to steer traffic towards or away from particularlinks, one may add or subtract weights. For instance, the following policy demonstrates how to add weight to costly linksAB and CD while otherwise using simple shortest paths.minimize( (if . AB . then 10 else 0) (if . CD . then 20 else 0) path.len )Figure 2 presents the full language syntax, and Table 1presents selected policy examples taken from the literature.The key novelty of the language is that it can capture many ofthe static conditions expressed by earlier work such as FatTire [40] or NetKAT [13] as well as the relative preferencesof Propane [14], and yet it also augment such policies withdynamic preferences based on current network conditions.PolicyP1. Shortest path routing [24]P2. Minimum utilization [30]P3. Widest shortest paths [32]P4. Waypointing [13]P5. Link preference [14]P6. Weighted link [19]P7. Source-local preference [12]P8. Congestion-aware routing [27]Implementationpath.lenpath.util(path.len, path.util)if .*(F1 F2 ).* then path.util else if .*XY.* then path.util else (if .*XY.* then 10 else 0) path.lenif X.* then path.util else path.latif path.util .8 then (1, 0, path.util)else (2, path.len, path.util)Table 1: Selected Contra policies.Policy analysis and guarantees. Contra requires user policies to be monotonic (metrics do not improve for longerpaths) and isotonic (switches have consistent preferences).If a policy is non-isotonic (e.g., P8), Contra will attempt todecompose it into multiple isotonic subpolicies that can beprocessed separately. Contra can do this for many conditional policies (e.g., P8), but it will not always succeed, e.g.,for “shortest widest paths”; see Appendix A for more discussion. These algebraic constraints guarantee that when metrics are stable, new flows will be sent along globally optimalpaths [22]. Our system also guarantees that hard constraintsexpressed by regular expressions are never violated. Underchanging metrics, when switches make distributed decisionsbased on their local views, routes may be suboptimal [11].USENIX Association3Selected ChallengesContra addresses three key challenges. To illustrate thesechallenges, we first describe a simple strawman solution designed for a specific topology (data center networks) and specific policy (use least utilized paths). Consider the simpleleaf-spine topology in Figure 3(a), where switch S wants tosend traffic to switch D over the least-utilized path:minimize( if S. D then path.util else )One strawman solution is to use a distance-vector protocol,where each switch propagates link metrics (i.e., utilization)to its neighbors via periodic probes, and builds up a localforwarding table of “best next hops” to reach other switches.Concretely, at time 1, D sends two probes to A and B carrying utilizations u(A-D) 0.1 and u(B-D) 0.2, respectively.Upon receiving a probe, a spine switch updates its metric,and then disseminates the probe to its downstream neighbors.The updated probe metric is the maximum of a) the originalprobe metric, and b) the utilization of the inbound link fromthe switch’s neighbor, so the probe always carries the utilization of the bottleneck link on its traversed path. For instance,when B receives the probe from D, it updates the utilizationto 0.3, which is the maximum of a) the original probe metric, u(B-D) 0.2, and b) the utilization u(S-B) 0.3; when Areceives the probe from D, it updates the utilization in theprobe to be 0.4, which is the maximum of u(A-D) 0.1 andu(S-A) 0.4. At time 2, both A and B disseminate the updatedprobes to S. Now, S has received probes on both paths S-A-D(u 0.4) and S-B-D (u 0.3), and it chooses B as the best nexthop to reach D due to its lower utilization. Changes in linkmetrics are then propagated by the next round of probes. Infact, this describes Hula [30], a state-of-the-art solution forutilization-aware routing in data centers.Challenge #1: Arbitrary topologies. On a tree topology,simple mechanisms (e.g., defining a set of “downstream”and “upstream” neighbors for each switch) suffice to explore paths and prevent forwarding loops [30], but on a nonhierarchical topology, it is insufficient.Consider the sequence of events in Figures 3(b)-(e), whereS prefers the least-utilized path to D. Suppose that at time 1,D sends out probes to A and S, and A propagates D’s probeto B and S, with the utilizations shown in Figure 3(b); now,both B and S prefer to reach D via A. At time 2, S propagates A’s probe to B about S-A-D (u 0.1), so B changes itspreference to go through S; B then propagates S’s probe to A(u 0.2), but it gets delivered only at time 4. At time 3, u(AD) increases to 0.5, which is discovered by a new periodicprobe from D to A and S. From A’s perspective, the best pathto reach D is still A-D, except that now the utilization is 0.5instead. At time 4, when B’s (old) probe to A arrives withu 0.2, A mistakenly thinks that it should instead reach D viaB, not knowing that A is itself on B’s best path to reach D.As a result, a forwarding loop S-A-B-S would form, and itwill persist as long as the link utilizations remain stable.17th USENIX Symposium on Networked Systems Design and Implementation703

AS0.2B0.40.20.30.1BDBA0.1S0.1D0.7(e) Arbitrary topologies (t 4)BA0.10.10.9S(f) Constrained routing (t 1)B0.7BA0.1- 0.70.10.10.20.10.9- 0.1S(g) Constrained routing (t 2)0.1- 0.5D0.10.1DAS0.7(d) Arbitrary topologies (t 3)(c) Arbitrary topologies (t 2)0.1DS0.2D0.10.10.20.10.1AB0.7(b) Arbitrary topologies (t 1)0.50.1S0.2D0.10.1(a) Strawman solution0.20.1AB0.70.1A0.2D0.10.1- 0.3S(h) Constrained routing (t 3)Figure 3: Supporting sophisticated policies over arbitrary topologies is challenging. (Solid, red arrows represent probes, anddotted, green arrows represent packet forwarding. Links are labeled with performance metrics.)It might seem that path-vector protocols would addressthis problem, where probes record their traversed paths, andswitches avoid picking paths that involve themselves. However, the root cause of transient loops is the inconsistentviews during network convergence; so transient loops canstill form even with path-vector protocols [37]. Carrying thepath traversed by the probe would also increase traffic overheads and the complexity for processing probes.automata with the network topology to obtain a productgraph [45, 14], which specifies a probe and packet taggingscheme for each switch. Intuitively, tags represent states ofthe user-defined automata; by checking that probes and packets carry the right state when arriving at a switch, it is possible to enforce the global user policy in a distributed fashion.This tagging scheme guarantees that no packet ever deviatesfrom a user’s regular expression constraints in the policy.Solution. Our solution is inspired by DSDV [39] and a morerecent proposal Babel [16], which were originally developedfor wireless mesh networks. At a high level, switches assign version numbers to probes, so that they can identify andavoid using outdated probes. In addition, Contra uses flowletswitching [44] to pin traffic to particular paths and avoid outof-order packet delivery. Still, because flowlet entries expireat different times, it is possible for transient loops to form onrare occasions. Contra quickly detects and breaks such loopsby monitoring hop counts.Challenge #3: Custom performance metrics. Supporting custom performance metrics also introduces new challenges. As discussed earlier, a switch only propagates theprobe with the best metric to its neighbors. However, suchlocal decisions do not always give rise to globally optimalresults, unless the policy is isotonic [22] (i.e., roughly speaking, downstream nodes respect the preferences of upstreamnodes). Unfortunately, some useful policies, such as somecongestion-aware routing schemes, are not isotonic [27].Challenge #2: Constrained routing. Supporting routingpolicies with path constraints leads to additional challenges.Consider the scenario in Figure 3(f), where the policy is notonly to prefer least-utilized paths, but also that traffic shouldnever first go through B and then A due to security concerns:minimize(if . B. A. then else path.util)Under this policy, S can only send traffic to D via a) S-D,b) S-A-D, c) S-B-D, or d) S-A-B-D; initially, S prefers c)(u 0.1). Now consider the sequence of events shown in Figures 3(f)-(h). Suppose that at time 1, the traffic from S arrivesat B. At time 2, the u(B-D) increases to 0.7, and u(S-D) decreases to 0.1, so B updates its best next hop (to reach D) tobe S, preferring the path B-S-D. At time 3, B sends the traffic back to S, which already forms a loop. But things can geteven worse: at time 3, u(S-D) increases to 0.3, so S changesits preference to be S-A-D (u 0.2). So the traffic has beenforwarded along a path S-B-S-A-D, which not only containsa loop but also violates the intended policy.Solution.Contra compiles the regular expression constraints in the user policy into automata, and intersects these704Solution. Contra analyzes the user policy to determine ifit is isotonic. If not, Contra decomposes the non-isotonicpolicy into multiple isotonic subpolicies. Information abouteach subpolicy is propagated separately in different classesof probe and the best probe from each class is chosen locally.The classes are recombined and a route corresponding to thebest current path is chosen only at a traffic source. Hence,if metrics are stable, then new flows will be sent along globally optimal paths. To avoid packet reordering due to unstable metrics, we follow Conga and Hula’s strategy anduse flowlet switching, which trades the fact that packets inpinned flowlets may follow suboptimal paths for stability.4Compilation: Stable metricsThe goal of the compiler is to generate a particular configuration of the Contra protocol that efficiently implements thedesired policy in the data plane. We describe compilation intwo phases. First, in this section, we describe an algorithmthat operates as if link metrics do not change, so probes onlyneed to be propagated once. The next section explains howthis algorithm is extended to handle changing metrics.Challenge. One key challenge during compilation involves17th USENIX Symposium on Networked Systems Design and ImplementationUSENIX Association

Figure 4: Naı̈ve solutions may lead to suboptimal paths.Node A uses ABCD even though a better path ABD exists.policies with conditional regular expression matches, such as(if r then m1 else m2), because nodes may rank pathsdifferently based on the branch of the conditional they use. Infact, conditional regular expression matches are one sourceof non-isotonicity: if every node selects the best next hopaccording to its own preferences alone, other nodes mightwind up with suboptimal routes. For example, consider thefollowing policy when applied to the topology in Figure 4:minimize( if (A B D) then 0 else path.util)In this example, A prefers path ABD, but B prefers the least utilized path BCD. The correct behavior in this scenario wouldbe for B to carry A’s traffic along path ABD while simultaneously sending its own traffic along path BCD.However, a naı̈ve (and erroneous) implementation maydisseminate probes along the paths DB and DCB1 and ask Bto decide which path is best. In this case, B would use theprobe from DCB and discard the one from DB. However, ifthe latter probe is discarded, A will not receive informationabout its preferred route! To avoid this, another naı̈ve solution would be to propagate probes along all possible pathsin the network to avoid missing good paths. For instance, Bmight send every probe it receives to A. However, this wouldlead to far too many probes, as the number of paths in a graphmay be exponential in the number of nodes.Solution. Instead, for a conditional (if r then m1 elsem2), if one could determine the path with minimal metric m1that matches r using one probe, and separately determine thepath with minimal metric m2 that does not match r using another probe, then nodes could delay choosing their best pathuntil both probes have been received and only then combinethe information to make a decision. This is one concrete instance where Contra needs to decompose the non-isotonicpolicy (due to regular expressions) into multiple isotonicsubpolicies. Contra achieves this by creating an efficient datastructure that combines all regular expressions appearing ina policy with the network topology, and by sending separateprobes for different regular expression matches.4.1Finding policy-compliant pathsInspired by Merlin [45] and Propane [14], Contra constructsa data structure called a product graph (PG), which compactly represents all paths allowed by the policy.1 Recallthat probes travel in the opposite direction to actual traffic.USENIX AssociationPolicy automata. A policy’s regular expressions define thedifferent ways the shape of a path can affect its ranking. Toprocess a policy, we first convert all such regular expressionsinto finite automata. Because probes disseminate information starting from the destination, but policies describe thedirection of traffic that flows in the opposite direction, weactually construct an automaton for the reverse of each regular expression. Each automaton is a tuple (Σ, Qi , Fi , q0i , σi ).Σ is the alphabet, where each character represents a switchID in the network. Qi is the set of states in automaton i. Theinitial state is q0i . Fi is the set of accepting / final states.σi : Qi Σ Qi is the transition function. Consider the example policy in Figure 5(b), which a) allows A to reach D viathe path A-B-D, b) allows B to reach D via any path with theleast utilization, and c) disallows all other paths. The Contracompiler would generate the automata in Figure 5(c).Network topology. The construction of the automata hasnot considered the actual network topology, so not all automaton transitions are legitimate. For instance, although theautomaton for D.*B could in principle accept a sequence oftransitions D-A-B, this sequence would never happen on thenetwork shown in Figure 5(a), simply because D is not directly connected to A. Therefore, our compiler merges thetopology with the automata and prunes invalid transitions.Product graph (PG). If there are k automata (one for eachregular expression used in the policy), then each state in thePG would have k 1 fields, (X, s1 , · · · , sk ), where the firstfield X is a topology location, and si is a state in the i-thautomaton; there is a directed edge from (X, s1 , · · · , sk ) to(X 0 , s01 , · · · , s0k ), if a) X X 0 is a valid link on the topology,and b) for each automaton i, we have σi (si , X 0 ) s0i .Concretely, in the PG in Figure 5(d), every edge represents both valid transitions on the two policy automata anda valid forwarding action on the topology. As examples, noedges exist from any (D,*,*) state to (A,*,*) state, because they have been eliminated due to topology constraints;also, there is a transition between node D0 and B0 because a)the topology connects D and B, and b) applying B to each automaton from state 1 leads to state 2. We use the symbol “ ”to denote the special “garbage” state—the state from whichthere is no valid transition in an automaton.Virtual nodes. We distinguish PG nodes (“virtual nodes”)from topology locations (“physical nodes”). A physical nodeX may have multiple virtual nodes, because probes could arrive via different paths, and reach different automaton statesas a result. For instance, the physical node B has two virtualnodes (B0,-,2) and (B1,2,2); we have labeled their location fields as B0, B1 to capture this, and we call them tags.If multiple virtual nodes exist, then probes must be duplicated to traverse paths that satisfy different constraints. Forinstance, B will receive a probe for B0 representing a path onthe way to matching regex ABD, and a second probe for B1representing a path on the way to matching regex B.*D.17th USENIX Symposium on Networked Systems Design and Implementation705

Figure 5: A running example of the compilation algorithm.Probe sending states. If a physical node X is a valid destination allowed by the policy, then exactly one of its virtual nodes is a probe sending state. This state has theform (X0, σ0 (q00 , X), · · · , σk (q0k , X)); all probes that originate from X initially carry this state. This is because, whenprobes start at the originating node, they have only traversedthe first hop “X” from the initial automata states q0i .Policy compliance. Any path in the PG from an acceptingstate to a probe sending state is a policy-compliant path. Allpolicy-compliant physical paths also exist in the PG.4.2Packet forwardingBefore describing the protocol itself, we first describe thestructure of the forwarding (FwdT) tables on each switch.The compiler only generates the table layout, and then actual entries are populated at runtime based on link metrics,which we describe in the next subsection.An entry in the forwarding table has the form[dst ,tag ,pid ,mv,ntag,nhop], where the star fieldsare table lookup keys. Each row of the table indicates wherethe given switch will send packets destined for dst whenthose packets carry a PG node tag and probe number idpid. The sender of packets will set the initial tag and theprobe number based on its best path. At each intermediatehop, when a packet with a given dst, tag, and pid matchesan entry in FwdT, the switch looks up the next tag (ntag) andreplace the packet’s tag with it; it also forwards the packet tothe next hop (nhop). The metrics vector (mv) is not used forpacket forwarding, but for populating the entries. A propertyof FwdT is that any tag-ntag pair in this table correspondsto a PG edge, and when a ntag is written into a packet itis then forwarded out the nhop port that leads to a topologynode corresponding to that ntag. This process implies thatforwarding will always follow edges in the PG.As an example, consider the FwdT table for switch B: thepolicy allows B to reach D either through a) B-D, satisfying(part of) the regular expression ABD, or through b) the bestof B-D, B-C-D, and B-A-C-D, satisfying the regular expres-706sion B.*D. The former corresponds to the virtual node B0 inthe PG, and the latter is implemented by a combination ofboth B0 and B1. Hence, the reader may observe that it ispossible for nodes of the product graph to contribute to theimplementation of more than one regular expression in thepolicy—this sharing improves algorithm performance as asingle probe can contribute to uncovering information usefulin more than one place in the policy.Ignoring for now how

mechanisms that leverage programmable data planes to ad-dress this. Finally, we develop policy-aware flowlet switch-ing, which routes flowlets to mitigate out-of-order packet de-livery while ensuring policy compliance. Summary. We make several contributions in t

Related Documents:

Bruksanvisning för bilstereo . Bruksanvisning for bilstereo . Instrukcja obsługi samochodowego odtwarzacza stereo . Operating Instructions for Car Stereo . 610-104 . SV . Bruksanvisning i original

10 tips och tricks för att lyckas med ert sap-projekt 20 SAPSANYTT 2/2015 De flesta projektledare känner säkert till Cobb’s paradox. Martin Cobb verkade som CIO för sekretariatet för Treasury Board of Canada 1995 då han ställde frågan

service i Norge och Finland drivs inom ramen för ett enskilt företag (NRK. 1 och Yleisradio), fin ns det i Sverige tre: Ett för tv (Sveriges Television , SVT ), ett för radio (Sveriges Radio , SR ) och ett för utbildnings program (Sveriges Utbildningsradio, UR, vilket till följd av sin begränsade storlek inte återfinns bland de 25 största

Hotell För hotell anges de tre klasserna A/B, C och D. Det betyder att den "normala" standarden C är acceptabel men att motiven för en högre standard är starka. Ljudklass C motsvarar de tidigare normkraven för hotell, ljudklass A/B motsvarar kraven för moderna hotell med hög standard och ljudklass D kan användas vid

LÄS NOGGRANT FÖLJANDE VILLKOR FÖR APPLE DEVELOPER PROGRAM LICENCE . Apple Developer Program License Agreement Syfte Du vill använda Apple-mjukvara (enligt definitionen nedan) för att utveckla en eller flera Applikationer (enligt definitionen nedan) för Apple-märkta produkter. . Applikationer som utvecklas för iOS-produkter, Apple .

15 Heat Pump 0.13 White Rogers Non-programmable N/A Nest 10/10/14 16 Resistance 0.07 Carrier Programmable Running Nest 7/29/15a 17 Heat Pump 0.12 Trane (XT500C) Programmable 'Hold' Nest 9/10/14 18 Heat Pump 0.05 Honeywell Programmable 'Hold' Nest 9/11/14 21 Heat Pump 0.12 White Rogers Programmable Program Running

och krav. Maskinerna skriver ut upp till fyra tum breda etiketter med direkt termoteknik och termotransferteknik och är lämpliga för en lång rad användningsområden på vertikala marknader. TD-seriens professionella etikettskrivare för . skrivbordet. Brothers nya avancerade 4-tums etikettskrivare för skrivbordet är effektiva och enkla att

Den kanadensiska språkvetaren Jim Cummins har visat i sin forskning från år 1979 att det kan ta 1 till 3 år för att lära sig ett vardagsspråk och mellan 5 till 7 år för att behärska ett akademiskt språk.4 Han införde två begrepp för att beskriva elevernas språkliga kompetens: BI