<?xml version="1.0" encoding="utf-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.26 (Ruby 2.6.8) -->


<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

<!ENTITY I-D.ietf-rtgwg-segment-routing-ti-lfa SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-rtgwg-segment-routing-ti-lfa.xml">
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3209 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3209.xml">
<!ENTITY RFC4090 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4090.xml">
<!ENTITY RFC5440 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5440.xml">
<!ENTITY RFC7490 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7490.xml">
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8402 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8402.xml">
]>


<rfc ipr="trust200902" docName="draft-li-rtgwg-tte-00" category="info" submissionType="IETF">
  <front>
    <title abbrev="TTE">Tactical Traffic Engineering (TTE)</title>

    <author initials="T." surname="Li" fullname="Tony Li">
      <organization>Juniper Networks</organization>
      <address>
        <postal>
          <street>1133 Innovation Way</street>
          <city>Sunnyvale</city>
          <region>CA</region>
          <code>94089</code>
          <country>United States of America</country>
        </postal>
        <email>tony.li@tony.li</email>
      </address>
    </author>
    <author initials="C." surname="Barth" fullname="Colby Barth">
      <organization>Juniper Networks</organization>
      <address>
        <postal>
          <street>1133 Innovation Way</street>
          <city>Sunnyvale</city>
          <region>CA</region>
          <code>94089</code>
          <country>United States of America</country>
        </postal>
        <email>cbarth@juniper.net</email>
      </address>
    </author>
    <author initials="A." surname="Smith" fullname="Andy Smith">
      <organization>Comcast</organization>
      <address>
        <postal>
          <street>1800 Arch St.</street>
          <city>Philadelphia</city>
          <region>PA</region>
          <code>19103</code>
          <country>United States of America</country>
        </postal>
        <email>andy_smith@comcast.com</email>
      </address>
    </author>
    <author initials="B." surname="Wen" fullname="Bin Wen">
      <organization>Comcast</organization>
      <address>
        <postal>
          <street>1800 Arch St.</street>
          <city>Philadelphia</city>
          <region>PA</region>
          <code>19103</code>
          <country>United States of America</country>
        </postal>
        <email>bin_wen@comcast.com</email>
      </address>
    </author>

    <date year="2023" month="January" day="06"/>

    
    <workgroup>RTGWG Working Group</workgroup>
    

    <abstract>


<t>Conventional traffic engineering approaches for resource management
used by RSVP-TE and SR-TE often leverage estimates of the ingress
traffic demands, during path placement.  Unforeseen and/or dynamic
events, can skew these estimates by significant enough margins to
result in unexpected network congestion.  Recomputed paths that
address the new demands may take a considerable amount of time,
leaving the network in a sub-optimal state for far too long.</t>

<t>This document proposes one mechanism that can avert congestion on a
real-time basis.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>Conventional traffic engineering approaches for resource management
used by RSVP-TE <xref target="RFC3209"/> and SR-TE <xref target="RFC8402"/> often leverage
estimates of the ingress traffic demands, during path placement.
Unforeseen and/or dynamic events, can skew these estimates by
significant enough margins to result in unexpected network
congestion.  Recomputed paths that address the new demands may take a
considerable amount of time, leaving the network in a sub-optimal
state for far too long.</t>

<t>Ideally, the network should be able to react to unforeseen congestion
events and attempt to distribute load automatically, avoiding as much
congestion as possible. Such mechanisms should be usable to compliment
the conventional traffic engineering approaches.</t>

<section anchor="REQ-lang" title="Requirement Language">

<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”,
“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and
“OPTIONAL” in this document are to be interpreted as described in BCP14
<xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.</t>

</section>
</section>
<section anchor="real-time-congestion" title="Real-Time Congestion">

<t>Various economic factors of operating real-world networks at scale
require network operators to run their networks at relatively high
utilizations.  While legacy shortest-path routing is helpful in basic
path placement, it does not consider the actual traffic demands on the
network, resulting in highly utilized paths that can quickly become
congested.</t>

<t>To address this, network operators have adopted various traffic
engineering (TE) techniques whereby an input to the path placement for
traffic engineering tunnels utilizes a bandwidth prediction and/or a
demand matrix, with bandwidth requirements for the major sources and
destinations in the network.  These predictions are typically
estimates based on historical telemetry and capture network and/or TE
tunnel usage.</t>

<t>In a more sophisticated view of network demand, a bandwidth
requirement can be more accurately viewed as a function over time,
with the demand waxing and waning, frequently in a diurnal pattern
driven by human interaction. Periodic demands may be driven by complex
processes, sometimes scheduled, sometimes in reaction to external
events. The salient point is that the elements in the demand matrix
are best regarded as time series estimates. As a result, a traffic
engineering solution is a set of paths that may themselves vary over
time, requiring a complex optimization not only for a static demand
but at several points along the time series.</t>

<t>This problem is further compounded by the dynamic changes to demand
that were not anticipated in the estimates. Traffic demands may spike
or ebb without warning. A singer may announce a concert, causing an
unexpected demand as the ticket vendor receives a wave of
traffic. Events on social media can cause an unexpected storm of
traffic to the media’s servers. New product announcements can cause
streaming sites to become overloaded.</t>

<t>Network resources are also not always consistently predictable. BGP
next-hops change, links fail, hardware fails, and software
fails. While traffic engineering tools can do contingency analysis and
creating protection paths that should mitigate potential congestion,
this is typically only done for single failures. In the rare event of
multiple failures, traffic engineering would be forced to completely
recalculate a solution, which might not be available for hours.</t>

<t>All of this leaves network operators in the very uncomfortable
situation that in unforeseen circumstances, they may find themselves
with a congested network, unable to meet Service Level Objectives
(SLOs) and potentially in violation of Service Level Agreements
(SLAs). Even more confounding is that this situation could happen even
if there is sufficient capacity in the network to support the actual
demand, but it cannot be implemented until a global optimization
computation completes.</t>

</section>
<section anchor="real-time-tactical-traffic-engineering" title="Real-Time Tactical Traffic Engineering">

<t>To address this issue, we propose an alternate strategy: real-time
tactical traffic engineering (TTE). This would be a set of mechanisms
that would allow the network to react in real-time to avert congestion
and optimize traffic flow. This would work in conjunction with
traditional traffic engineering bandwidth management techniques,
alleviating problems while optimal traffic assignment is being
recomputed.</t>

<t>Real-time traffic engineering is a practical approach to a thorny
problem: full blown optimality is very hard and can take a long
time. A network that can organically, dynamically, and quickly adapt
may provide a significant performance improvement while optimal
traffic engineering path placement is in-progress.</t>

<t>TTE allows the network to dynamically distribute load if congestion is
anticipated. The goal is to simply shift load away from congested
links and then, if the link congestion abates, shift traffic back.</t>

<t>If traffic is on an alternate path, then it has the potential to
create congestion elsewhere in the network. Bringing the traffic back
to its original path causes the network to be more aligned with its
original, near-optimal traffic pattern.</t>

<section anchor="recognizing-congestion" title="Recognizing Congestion">

<t>For TTE to operate effectively, it needs to understand when a link is
nearing congestion and conversely, when congestion has abated. Each
link that is protected by TTE is sampled periodically for its current
utilization. The boundaries of acceptable utilization are defined by
high and low utilization thresholds. To avoid oscillation, the link
must be outside of acceptable utilization for some consecutive number
of periodic samples before any action is performed. Further, the high
and low thresholds need to be sufficiently far apart such that small
load traffic changes will not cause a shift from high to low or low to
high.</t>

</section>
<section anchor="flows" title="Flows">

<t>TTE manipulates traffic flows by changing the IPv4 or IPv6 prefixes
found in the Forwarding Information Base (FIB), or by changing label
entries found the Label Forwarding Information Base (LFIB). For the
purposes of this document, both IP prefixes and labels constitute
‘flows’. A flow may have one or more paths to its destination.</t>

</section>
<section anchor="backup-paths" title="Backup Paths">

<t>A number of mechanisms exist that potentially create backup paths for
a single flow.  Typically, these backup paths are used in case of a
failure of the original path and allow for a very rapid transfer of
traffic from the failed link to the backup path. For this rapid
transfer to work, the backup paths are placed in the forwarding table
and then marked as being in a backup and inactive state.</t>

<t>The key properties of a backup path are that it cannot cause
forwarding loops and that it avoids the same link that the primary
path is using. TTE makes use of backup paths by turning them into
active paths in parallel with the primary path. This creates an Equal
Cost Multi-Path (ECMP) situation where some traffic will be forwarded
down each of the active paths. In most implementations, ECMP is
implemented by hashing of the traffic, so each path will have roughly
an equal share of the traffic, however, statistical anomalies are not
impossible.</t>

<t>Potential backup paths can be computed by several mechanisms:</t>

<t><list style="symbols">
  <t>TI-LFA, RLFA: Paths computed by Topology Independent Loop-free
Alternates (TI-LFA) <xref target="I-D.ietf-rtgwg-segment-routing-ti-lfa"/> and
Remote Loop-Free Alternate (RLFA) <xref target="RFC7490"/> can be used as backup
paths.</t>
  <t>Fast Reroute: Paths computed by RSVP Fast Reroute <xref target="RFC4090"/> can be
used as backup paths.</t>
  <t>Unequal Cost Multi-Path: Interior Gateway Protocols (IGPs) that
compute Unequal Cost Multi-Path (UCMP) paths can be used as backup
paths.</t>
  <t>PCE: Paths computed by a Path Computation Element (PCE) <xref target="RFC5440"/>
can be used as backup paths.</t>
</list></t>

</section>
<section anchor="activation-and-deactivation" title="Activation and Deactivation">

<t>When TTE selects a flow and makes appropriate data plane changes so
that traffic is balanced between the primary path(s) and the backup
path(s), we say that the flow is ‘active’. Similarly, when TTE shifts
traffic away from its backup path(s) back to the primary path(s), we
say that the flow is ‘inactive’ or ‘deactivated’.</t>

</section>
<section anchor="downstream-congestion" title="Downstream Congestion">

<t>In a carefully traffic engineered network, any change to the traffic
flow may have an impact in multiple places on the network. When a flow
is activated, it may shift traffic to an entirely different path, not
just around a single link, and the change may result in congestion
along the new path. Networks that are engineered to support protection
against link failures should already take this into account. However,
even this backup capacity can be saturated if TTE activates enough
flows on a variety of links. If TTE is also deployed along the backup
path, it may be triggered to activate further flows, further
distributing the traffic load.</t>

</section>
<section anchor="flow-distribution" title="Flow Distribution">

<t>TTE is necessarily stochastic. Since we cannot predict flow
utilization (and thus link utilization) with absolute certainty, any
flow selection is necessarily an estimate of future behavior. TTE
assumes that the flows on the link have a typical Gaussian
distribution and that there not many ‘elephant’ flows that have
requirements far above the mean and not many ‘mice’ flows that have
requirements far below the mean. TTE also assumes that there are
enough flows that the Law of Large Numbers applies. Our simulation
results suggest that even 50 flows with a good Gaussian distribution
is ample to meet this requirement.</t>

</section>
<section anchor="flow-selection" title="Flow Selection">

<t>When a link is outside of its bandwidth thresholds, TTE must select
certain paths to activate or deactivate.  TTE can select one or more
paths from one or more flows. Which paths and flows to select is a
critical decision that strongly affects how quickly TTE converges to a
solution where the link bandwidth is within its thresholds.  Ideally,
TTE selects the right paths and flows to activate to create a ‘working
set’ that avoids congestion.</t>

<t>When a link is above its high threshold, then the set of candidate
flows for activation are those flows on the link that have inactive
paths. Similarly, if a link is below its low threshold, then the set
of candidate flows are those that have a backup path that has been
previously activated. The task of flow selection is to choose the set
of candidates to activate or deactivate to bring the link back within
its bandwidth thresholds.</t>

<t>In the following sections, we discuss several different possible
strategies for flow selection. There are a variety of trade offs
between these strategies and the selection of a specific strategy is
implementation dependent. Many more strategies are possible.</t>

<section anchor="random-selection" title="Random Selection">

<t>One approach to flow selection is to randomly select a flow from the
set of candidate flows. This strategy has a significant advantage in
that it does not require any tracking of per-flow bandwidth, and thus
has minimal state and overhead requirements. The disadvantage of this
approach is that it may not converge very rapidly. If the discrepancy
between current bandwidth and target bandwidth is large, it may take
many iterations and many flows may have to be activated before
sufficient bandwidth has been moved.</t>

<t>In this strategy, overshoot is a distinct possibility. That is, a flow
that is selected and activated/deactivated may shift more bandwidth
than is required and may cause the link to shift from one extreme to
another. However, this is not seriously problematic.  Subsequent
iterations will correct this and shift bandwidth back. Since each flow
selection is an independent event, the odds of continually selecting
the same flow is inconsequential, and thus, the odds of persistent
oscillation are minimal.</t>

<t>More sophisticated strategies are possible, but do require that we
track the bandwidth utilization of each flow.</t>

</section>
<section anchor="no-elephants-selection" title="No Elephants Selection">

<t>An alternate selection strategy is to try to select a set of flows
that will shift the link bandwidth utilization from its current level
to a more comfortable level. We define the ‘target bandwidth’ as the
average of the high and low bandwidth thresholds. The objective of
flow selection is then to select flows that, in aggregate, amount to
the difference between the target bandwidth and the current
bandwidth. We call this the ‘target change’.</t>

<t>Flows with a bandwidth bigger than the target change are then
effectively elephant flows and should be discarded from the candidate
pool. Flows are iteratively randomly selected from the remaining pool
until the target change is satisfied.</t>

<t>Intuitively, this seems like an effective strategy, but our
simulations indicate that it has poor performance. In some situations,
there are simply not enough candidates in the pool to meet the target
change. As a result, this strategy may sometimes not converge to a
solution. From this, we observe that it may sometimes be best to
intentionally overshoot the target by selecting an elephant and then
converge by an opposing selection of other flows in the next
iteration.</t>

</section>
<section anchor="maximum-fit" title="Maximum Fit">

<t>A similar strategy is to first exclude elephant flows and then select
the largest remaining candidates to meet the target change. This has
the benefit that it moves fewer flows than purely random selection. It
still suffers from not selecting elephant flows if one is necessary.</t>

<t>Moving fewer flows is beneficial because it is less disruptive to
network traffic. Every time a flow is moved, transport protocols may
detect a change in latency and thus a change in round-trip time
(RTT). This may be misinterpreted as a congestion event and lead to
congestion avoidance. It would be beneficial to minimize this impact.</t>

</section>
<section anchor="minimum-fit" title="Minimum Fit">

<t>The opposite strategy is to first exclude elephant flows and then
select the smallest remaining candidates. This has the unfortunate
issue of moving the maximum number of flows and retains the problem of
not moving elephants when they are necessary.</t>

</section>
<section anchor="best-fit" title="Best Fit">

<t>Analogies to memory allocation problems suggest that selecting the
set of candidate flows that most closely total the target change would
be a possible strategy. Unfortunately, the number of possibilities is
the power set of the number of candidate flows. This can quickly
explode and become computationally intractable. This strategy was not
simulated.</t>

</section>
<section anchor="maximum-fit-with-elephants" title="Maximum Fit with Elephants">

<t>This strategy is a derivative of the maximum fit strategy. In this
strategy, if the target change cannot be satisfied by selecting all of
the non-elephant candidates, then the smallest elephant is selected
instead. This strategy showed excellent results.</t>

</section>
</section>
</section>
<section anchor="contributors" title="Contributors">

<t>The following people have substantially contributed to this document:</t>

<t>Tarek Saad, Hari Kotni, Minto Jeyananth, Raj Chetan
Boddireddy, Shraddha Hegde</t>

</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>This document makes no requests of IANA.</t>

</section>
<section anchor="security-considerations" title="Security Considerations">

<t>Tactical Traffic Engineering is a mechanism that shifts traffic across
pre-computed paths. It introduces no new protocols and operates
completely locally on a single system. As such, it creates no new
security issues.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>

&I-D.ietf-rtgwg-segment-routing-ti-lfa;
&RFC2119;
&RFC3209;
&RFC4090;
&RFC5440;
&RFC7490;
&RFC8174;
&RFC8402;


    </references>




  </back>

<!-- ##markdown-source:
H4sIAG2ZuGMAA9VcXXMbuZV9x69AjR9sb5GMPeNsZvQ0sizPKPGHVpLj2qcU
2A2SsJoNTqNbNDM1/33PvRdAoynZ8W7VVu2mKrFEdQP389xzL8DM53NV+dq1
6xM99Kv5j6p3fWNP9I2peleZRt90ZrVylT5v1661tsOj+snNzflTZZbLzt7h
0ZtzVfuqNVu8V+Pxft64edev9+t539v5s2dqj+Wvbn75+Iv+6LtbWuKXzg87
VZnern13ONGuXXkVhuXWheB82x92WOzi/Oa1crvuRPfdEPrvnz376dn3Spmh
3/juRGk9x3/5P64NEGSh37j0iYhz49tD8aHvIMhfh9btbKff2X4PaUL6Y+g7
a/sT/fz5Dz/oi7b1d6aHKPqjOaRHKtdD1uuhbQ93prHp486u8eCJPjvND/oa
u//04tmPP40fDW1Pqn5oXW9rfd1D+aD9Sp9uYdbKpAft1rgGKkP0ReN+jv/e
0/ZsoV+art9MFT7zzfIw/cP/J6WrJUn+8yeRdtHaXt1T/HShr7fuWPHTtj5M
P2e9z/y2MqG/p+6Pz57p067aQKLFVNHLjWtMbZvdxpljXS+PdH3+0/NnP/xP
dTWQ+B+BJP65EikX+Pe+vi8X+qNtp9q+dG354f91VZeu/cfetlM9W99tEWx3
ljL5Yv5q4SwQSHAj2PXWtv0cKNEDLua9mzcrQw9evT77/vnzn+KPP3z/LP34
AuAQf/zzixfpx7+8yJ/++PwvL050/PnFs+/pYzWfz7VZwlbAO6XOfHuHbWEA
IF8fkc8WyGd2u86bagNlV76DsYIfusrqrWnN2pLIaggwCHLw6vrvl/Obc3Kz
vr6in/yqt61u7J3t8LC2oXfbZLd+Y+HtNRYMKm1cw3ptHWa6Hnjznek3eteY
ijdaaFgfQthgsSoe/BMEqg+ID1cpS2rgzcq0OtzaPa0fyi0hYHDr1mEf0/bQ
0Q/rDdTooGsA9iisOzQ9ZNJDaz/vbEV+bgU94P92TWv5FlJcWbhzN9DfSUK8
vTG9MnVNyrBiLQSIymCLg+7NrdWGVgmuhjGWDX7dUkyxKdzWzlRjzR0pLe/L
thDGaBSJud+RHg1iHMqwJ1amg9ReN5AMUa5uNi5oVKWBTKXhtJ0PZOkWvrLV
xrQubFlQNpGBS/pCKzynDUxgmjlJo5cmuLBQHC1bV9dAQfUIcNl3vh4qeuN/
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
AA==

-->

</rfc>

