<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.25 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-giraltyellamraju-alto-bsg-requirements-02" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.1 -->
  <front>
    <title>Supporting Bottleneck Structure Graphs in ALTO: Use Cases and Requirements</title>
    <seriesInfo name="Internet-Draft" value="draft-giraltyellamraju-alto-bsg-requirements-02"/>
    <author initials="J." surname="Ros-Giralt" fullname="Jordi Ros-Giralt">
      <organization>Qualcomm</organization>
      <address>
        <email>jros@qti.qualcomm.com</email>
      </address>
    </author>
    <author initials="S." surname="Yellamraju" fullname="Sruthi Yellamraju">
      <organization>Qualcomm</organization>
      <address>
        <email>yellamra@qti.qualcomm.com</email>
      </address>
    </author>
    <author initials="Q." surname="Wu" fullname="Qin Wu">
      <organization>Huawei</organization>
      <address>
        <email>bill.wu@huawei.com</email>
      </address>
    </author>
    <author initials="L.M." surname="Contreras" fullname="Luis Miguel Contreras">
      <organization>Telefonica</organization>
      <address>
        <email>luismiguel.contrerasmurillo@telefonica.com</email>
      </address>
    </author>
    <author initials="R." surname="Yang" fullname="Richard Yang">
      <organization>Yale University</organization>
      <address>
        <email>yry@cs.yale.edu</email>
      </address>
    </author>
    <author initials="K." surname="Gao" fullname="Kai Gao">
      <organization>Sichuan University</organization>
      <address>
        <email>kaigao@scu.edu.cn</email>
      </address>
    </author>
    <date year="2022" month="September" day="23"/>
    <area>Application</area>
    <workgroup>ALTO</workgroup>
    <keyword>ALTO</keyword>
    <abstract>
      <t>This document proposes an extension to the base Application-Layer
Traffic Optimization (ALTO) protocol to support bottleneck structures
as an efficient representation of the state of a network.
Bottleneck structures are efficient computational graphs that allow
network operators and application service
providers to optimize application performance in a
variety of communication problems including routing, flow control,
flow scheduling, bandwidth
prediction, and network slicing, among others.  This document
introduces a new abstraction called Bottleneck Structure Graph (BSG)
and the necessary requirements to integrate it into the
ALTO standard.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://giralt.github.io/draft-ietf-alto-gradient-graph/draft-giraltyellamraju-alto-bsg-requirements.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-giraltyellamraju-alto-bsg-requirements/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        WG Working Group mailing list (<eref target="mailto:alto@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/alto/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/giralt/draft-ietf-alto-gradient-graph"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Bottleneck structures have been recently introduced in <xref target="G2-SIGCOMM"/> and
<xref target="G2-SIGMETRICS"/> as efficient computational graphs that embed information about
the topology, routing and flow information of a network. These
computational graphs allow network operators and application service
providers to compute network derivatives that can be used
to make traffic optimization decisions. For instance, using
the bottleneck structure of a network, a real-time communication (RTC)
application can efficiently infer the multi-hop end-to-end available
bandwidth, and use that information to tune the encoder's transmission
rate and optimize the user's Quality of Experience (QoE).
Bottleneck structures can be used by the application to address a wide
variety of communication optimization problems, including routing,
flow control, flow scheduling, bandwidth prediction, and network slicing,
among others.</t>
      <t>This document introduces a new abstraction called Bottleneck Structure Graph
(BSG) and the necessary requirements to integrate it into the existing
ALTO services (Network Map, Cost Map, Entity Property Map and Endpoint
Cost Map) exposing the properties of the bottleneck structure
to help optimize application performance. Use cases are also introduced
to motivate the relevancy of bottleneck structures in the context of the
ALTO standard and support the description of the integration requirements.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
    </section>
    <section anchor="brief-introduction-to-bottleneck-structures">
      <name>Brief Introduction to Bottleneck Structures</name>
      <t><xref target="G2-SIGMETRICS"/> and <xref target="G2-SIGCOMM"/> introduce a new mathematical
framework to optimize network performance called the
Quantitative Theory of Bottleneck Structures (QTBS).
The core building block of QTBS is a computational graph called
<em>bottleneck structure</em>, which allows to qualify and quantify the
forces of interactions that flows and bottleneck links exert on
each other. QTBS builds the bottleneck structure by assuming that
flows in a network aim at maximizing throughput while ensuring
fairness. This general principle holds for all the relevant
congestion control algorithms used in IP networks
(e.g., TCP Cubic, BBR, QUIC, etc.).</t>
      <section anchor="bs_example">
        <name>Example of Bottleneck Structure</name>
        <t>Consider as an example the following network configuration:</t>
        <figure anchor="net">
          <name>Network configuration example.</name>
          <artwork><![CDATA[
                         f3 f6 f1
                          | | |
                          | | |
                       +--+-+-+---+
                       |  | | |   |
                       |  | | +---+---   l1
                       |  | |     |      c1=25
                       |  | |     |
                       +--+-+-----+
                          | |
                          | | +----- f2
                          | | |
                       +--+-+-+---+
                       |  | | |   |
                   ----+--+ | |   |      l2
                       |    | |   |      c2=50
                f4 ----+--+ | |   |
                       |    | |   |
                       +--+-+-+---+
                          | | |
                          | | +-----
                          | |
                       +--+-+-----+
                       |  | |     |
                   ----+--+ +-----+----  l3
                       |          |      c3=100
                   ----+----+     |
                       |    |     |
                       +----+-----+
                            |
                            |
                       +----+-----+
                       |    |     |      l4
                 f5 ---+----+     |      c4=75
                       |          |
                       |          |
                       +----------+
]]></artwork>
        </figure>
        <t>Each link li is represented by a squared box and has a capacity ci.
For instance, link l1 is represented by the top most squared box
and has a capacity of c1=25 units of bandwidth. In addition, each
flow is represented by a line that passes through the set of links it
traverses. For instance, flow f6 traverses links l1, l2 and l3.</t>
        <t>The bottleneck structure of this network corresponds to the following
digraph (see <xref target="G2-TREP"/> for details on how a bottleneck structure is
computed):</t>
        <figure anchor="fgg">
          <name>Bottleneck structure of the network in Figure 1.</name>
          <artwork><![CDATA[
   +------+  +------+               +------+
   |      |  |      |               |      |
   |  f1  <-->  l1  <--------------->  f6  |
   |      |  |      |  +------------+      |
   +------+  +--^---+  |            +---+--+
                |      |                |
                |      |                |
             +--v---+  |                |
             |      |  |                |
             |  f3  |  |                |
             |      |  |                |
             +--+---+  |                |
                |      |                |
                |      |                |
             +--v---+  |  +------+   +--v---+  +------+
             |      <--+  |      |   |      |  |      |
             |  l2  <---->|  f4  +--->  l3  |  |  l4  |
             |      |     |      |   |      |  |      |
             +--^---+     +------+   +--^---+  +---^--+
                |                       |          |
             +--v---+                   | +------+ |
             |      |                   | |      | |
             |  f2  |                   +->  f5  <-+
             |      |                     |      |
             +------+                     +------+
]]></artwork>
        </figure>
        <t>The bottleneck structure is interpreted as follows:</t>
        <ul spacing="normal">
          <li>Links and flows are represented by vertices in the graph.</li>
          <li>There is a directed edge from a link l to a flow f if and only if flow f is bottlenecked at link l.</li>
          <li>There is a directed edge from a flow f to a link l if and only if flow f traverses link l.</li>
        </ul>
        <t>For instance, in <xref target="fgg"/> we have that flow f3 is bottlenecked at link l1 (since there is a directed edge from
l1 to f3) and it traverses links l1 and l2 (since there is a directed edge from f3 to l1 and from f3
to l2). Note that when a flow is bottlenecked at a link, then the edge connecting them in the bottleneck
structure must necessarily be bidirectional. This is because a flow that is bottlenecked at a link,
must necessarily traverse that link too. Indeed, in <xref target="fgg"/> we can see that all the directed edges
from a link to a flow, are in fact bidirectional edges. This is important to ensure that
bottleneck structures correctly model how perturbations in a network propagate, as we explain in the
next section.</t>
      </section>
      <section anchor="propagation-properties">
        <name>Propagation Properties</name>
        <t>Under the assumption of max-min fairness <xref target="GALLAGER"/>, QTBS demonstrates the following two properties <xref target="G2-SIGMETRICS"/>:</t>
        <ul spacing="normal">
          <li>
            <strong>Property 1. Flow perturbation</strong>. An infinitesimal change in the transmission rate of a flow f will have an effect on the transmission rate
of a flow f' if and only if the bottleneck structure has a directed path from flow f to flow f'.</li>
          <li>
            <strong>Property 2. Link perturbation</strong>. An infinitesimal change in the capacity of a link l will have an effect on the transmission rate
of a flow f' if and only if the bottleneck structure has a directed path from link l to flow f.</li>
        </ul>
        <t>The above two properties qualitatively relate to the classic question in chaos theory: Can the flap of a butterfly's wings
in Brazil set off a tornado in Texas? <xref target="LORENZ"/> Obviously a butterfly alone cannot create a tornado, but every element
is interconnected in a distributed system, and even the flap of a butterfly's wings in Brazil will have an effect in Texas.
Bottleneck structures are graphs that characterize and quantify such type of effects in a communication network.
In particular, a bottleneck structure reveals how a perturbation propagates through the network,
describing which flows will be affected and by what magnitude.</t>
      </section>
      <section anchor="forces-of-interaction-among-flows-and-links">
        <name>Forces of Interaction among Flows and Links</name>
        <t>Bottleneck structures are powerful computational graphs because they are able to capture the forces of interaction
that flows and bottleneck links exert on each other. These forces of interaction are in general non-intuitive,
even for a small simple network configuration like the one in <xref target="net"/>. For instance, from Property 2, the bottleneck structure reveals
that a small variation in the capacity of link l2 (e.g., in a wireless network, a variation in the capacity of a link
could be due to a change in the signal to noise ratio of the communication channel) will propagate through the network
and have an impact on the transmission rate of flows f2, f4 and f5 (since from Property 2, the bottleneck structure
has a directed path from link l2 to each of these flows). However, such a perturbation will have no effect
on the transmission rate of flows f1, f3 and f6 (since there is no path from l2 to any of these other flows). Similarly,
from property 1, a small perturbation on the rate of flow f4 (e.g., this could be due to the effect of a traffic
shaper altering the transmission rate of flow f4), will have an impact on the rate of flows f2 and f5, but it
will have no effect on the rate of flows f1, f3 and f6.</t>
      </section>
      <section anchor="ripple-effects-in-a-communication-network">
        <name>Ripple Effects in a Communication Network</name>
        <t>As another example, given the network in Figure 1, it is also not
intuitive to foresee that flows f1 and f5 are related to each
other by the forces of interaction inherent to the communication
network, even though they do not traverse any common link.
Specifically, flow f1 traverses link l1, while flow f5 traverses links
l3 and l4. In between both flows, there is an additional hop
(link l2) further separating them.  Despite not being directly
connected, the bottleneck structure reveals that a small perturbation
on the performance of flow f1 (i.e., a change in its transmission
rate), will create a ripple effect that will reach flow f5, affecting
its transmission rate.  In particular, the perturbation on flow f1 will
propagate through the bottleneck structure and reach flow f5
via the following two paths:</t>
        <artwork><![CDATA[
f1 -> l1 -> f3 -> l2 -> f4 -> l3 -> f5

f1 -> l1 -> f6 -> l3 -> f5
]]></artwork>
        <t>It is also not intuitive to see that the reverse is not true.  That
is, a small perturbation on flow f5, will have no effect on flow f1,
since the bottleneck structure has no direct path from vertex f5 to
vertex f1.  In <xref target="G2-SIGMETRICS"/>, extensive empirical validation of
these results is presented for a variety congestion-controlled
IP networks.</t>
      </section>
      <section anchor="not-all-bottleneck-links-are-born-equal">
        <name>Not all Bottleneck Links Are Born Equal</name>
        <t>Bottleneck structures also reveal that not all bottleneck links have the same
relevancy.  In Figure 2, links at the top of the graph have a higher
impact on the overall performance of the network than links at the
bottom.  For instance, consider link l1.  A variation on its
capacity will create a ripple effect that will impact the performance
of all the flows in the network, since all flow vertices are
reachable from vertex l1 according to the bottleneck structure.  In
contrast, link l3 has a much smaller impact on the overall
performance of the network, since a variation of its capacity will
affect flow f5, but have no impact on any of the other flows.  This
information is valuable to network operators and application service
providers as it can be used to make informed network optimization
decisions. For instance, in edge computing, an operator could choose
to place a containerized service (e.g., for extended reality, XR)
on compute nodes that would yield communication paths traversing
bottleneck links with lower impact on the overall performance of
the network (See the use case in <xref target="placement_use_case"/> for more
details). Similarly, in network slicing (or capacity planning
in general), operators could choose to allocate more bandwidth on
those links that are more influential (i.e., those links that
are at lower levels in the bottleneck structure)
according to the expected traffic pattern in the network slice.
<!--
TOBEUNCOMMENTED
(See the use case in {{slicing}} for more details).
-->
        </t>
        <t>Overall, bottleneck structures provide a mechanism to rank bottleneck
links according to their impact on the overall performance of the network.
This information can be used in a variety of optimization problems, such
as traffic engineering, routing, capacity planning, or resilience analysis,
among others.</t>
      </section>
      <section anchor="quantifying">
        <name>Quantifying the Ripple Effects</name>
        <t>Bottleneck structures not only allow network operators to reason
about the qualitative nature of the forces that flows and links exert
on each other, but they also provide a mathematical framework to quantify
such forces. In particular, the Quantitative Theory of Bottleneck
Structures (QTBS) introduced in <xref target="G2-TREP"/> provides a mathematical
framework that uses bottleneck structures as efficient computational
graphs to quantify the impact that perturbations in a network have
on all of its flows.</t>
        <t>One of the core building blocks of the QTBS framework
is the concept of <em>link and flow equations</em>,
which mathematically characterize how a perturbation in a network
propagates through each of the link and flow vertices in the
bottleneck structure. (See <xref target="G2-TREP"/> for an exact mathematical formulation.)
Because quantifying the effect of a perturbation on a system is nothing more
than computing a derivative of the system's performance with respect to
the parameter that's been perturbed, bottleneck structures can be used as
efficient and scalable computational graphs to calculate
flow and link derivatives in a communication network.</t>
        <t>Consider for instance the computation of the following derivative:</t>
        <artwork><![CDATA[
dF()/dri
]]></artwork>
        <t>where F() represents the total throughput of the network (the sum of
all flows' throughput) and ri is the transmission rate of flow fi.
For example, this expression can be used
to compute the effect of traffic shaping
a flow (slightly reducing its rate) on the total throughput of the network.
Computing this derivative using a traditional calculus approach is
both very complex and costly, since it requires modeling the
congestion control algorithm in the function F(), for which there is
no closed form solution. Using bottleneck structures, however, the
computation of this derivative is both simple and inexpensive.  It is
simple because it can be done by applying an infinitesimal
change to the rate of flow fi and then using the link and flow
equations to measure how this perturbation propagates through the
bottleneck structure <xref target="G2-TREP"/>, <xref target="G2-SIGCOMM"/>.
It is also very efficient because the computation is
performed by applying delta calculations on the bottleneck structure,
without involving links and flows that are not affected by the
perturbation.  For instance, in Figure 1, the computation of dF()/df4
only requires recomputing the transmission rates of flows f2
and f5, without the need to recompute the rates of f1, f3 and f6,
since these other flows are not affected by the perturbation.  In
practice, QTBS provides a methodology to
compute network derivatives two or three orders of magnitude faster than
general purpose methods such as liner programming <xref target="G2-SC"/>.</t>
        <t>We finish this brief introduction to QTBS by stating the monotonic
bandwidth allocation property that all bottleneck structures satisfy:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Property 3. Monotonic bandwidth allocation (MBA).</strong> Let si be
the transmission rate of the flows bottlenecked at link li.
Then, for any path in the bottleneck structure of the form  </t>
            <artwork><![CDATA[
  l1 -> f1 -> l2 -> f2 -> (...) -> ln -> fn
]]></artwork>
            <t>
we have that  </t>
            <artwork><![CDATA[
  s1 < s2 < (...) < sn
]]></artwork>
          </li>
        </ul>
        <t>The MBA property is relevant in that it states that bottlenecks located
at higher levels in the bottleneck structure will have more
bandwidth available than those located at lower levels. For instance,
this property indicates that an application requiring high bandwidth
should route its traffic through paths that involve links at higher levels
in the bottleneck structure. We will be
using the MBA property to reason about application performance in some
of the examples described in this document.</t>
      </section>
      <section anchor="types_bs">
        <name>Types of Bottleneck Structures</name>
        <t>While QTBS introduces a core definition of bottleneck structure (see
<xref target="bs_example"/>), there exist multiple types of bottleneck structures
that can be computed depending on the level of granularity and
information desired by the operator. Next, we introduce
three types of bottleneck structures that will be used in this document
and that are suitable to optimize application performance in the
context of the ALTO standard:</t>
        <ul spacing="normal">
          <li>
            <strong>Flow gradient graph (FGG)</strong>. This type of bottleneck structure
corresponds to the base definition introduced in <xref target="bs_example"/>. The
FGG has the finest level of granularity, including a vertex in
each graph for each link and flow in the network. Therefore,
an FGG can be relatively large (e.g, with millions of vertices).</li>
          <li>
            <strong>Path gradient graph (PGG)</strong>. One technique to reduce the size
of the bottleneck structure without affecting its accuracy is
to collapse all the vertices of the flows that follow the same
path into a single vertex called a <em>path vertex</em>.
The resulting bottleneck structure
is called the path gradient graph (PGG). A PGG usually has 2 or 3
orders of magnitude less vertices than the FGG.</li>
          <li>
            <strong>QoS-Path gradient graph (Q-PGG)</strong>. Some networks assign different
types of traffic to different QoS classes. A Q-PGG can model QoS
by collapsing all the vertices of the flows that follow the
same path and have the same QoS class into a single vertex called
a <em>Q-path vertex</em>. A
Q-PGG is slightly larger than a PGG (with about |Q| times more vertices,
where |Q| is the number of QoS classes supported by the network) but
still significantly smaller than the FGG.</li>
        </ul>
        <t>For most of the applications, it is recommended to use a PGG,
or a Q-PGG if the network supports QoS classes, since these
bottleneck structures are significantly smaller and faster to
process than an FGG, and it is often the case that the operator
does not need to know flow-level information in order to
make proper application performance optimization decisions.
Note also that the PGG and the Q-PGG provide the additional
security advantage of hiding flow-level information
from the graph. This can be important to operators that are
sensitive about security and privacy.</t>
      </section>
      <section anchor="computing-optimized-network-reconfigurations">
        <name>Computing Optimized Network Reconfigurations</name>
        <t>A central element to the theory of bottleneck structures is
the ability to efficiently compute derivatives on a network.
Derivatives are a core building block of the optimization
framework, as they reveal the directions (gradients) in the
feasible set that can help bring the network to a higher
level of performance. In this document, we will refer to these
directions in the feasible set as <em>network reconfigurations</em>,
since that's what they effectively are in the physical world.</t>
        <t>For instance, an example of network reconfiguration can be
the action of rate limiting a flow carrying XR traffic to
match the available bandwidth along its path with the goal
to improve its QoE. Another example of network reconfiguration
is the action of rerouting traffic through a new path in order
to accelerate the transfer of a large backup data set
between two cloud data centers. A third example can be
the deployment of a new network slice in a 5G network in order
to ensure the QoS of a V2X service. In each of these actions,
the network configuration is moved along a direction
(a gradient, if the change maximally improves
the performance objective) within the feasible set of possible
configurations.</t>
        <t>While derivatives describe how the performance of a network
changes when a very small (infinitesimal) change is applied
to its configuration, network reconfigurations can accept
changes to the network that are arbitrarily large. For instance,
traffic shaping a set of flows to reduce their rates by 10 Mbps
is a network reconfiguration that is not infinitesimal.
We note that bottleneck structures can also be used to compute
optimized network reconfigurations consisting of non-infinitesimal
changes in the network. This can be done by first computing
derivatives using the bottleneck structure
to find a direction (gradient) in the feasible set, and then reconfiguring
the network by following that direction. This process can be repeated iteratively
until a final optimized reconfiguration is achieved. (See for example
<xref target="G2-SIGCOMM"/> and <xref target="G2-TREP"/> for examples of algorithms using
this technique.)</t>
        <t>In the next section, we summarize some of the network reconfigurations
that can be optimized by using bottleneck structures.</t>
      </section>
      <section anchor="types_reconfigurations">
        <name>Types of Network Reconfigurations</name>
        <t>The following is a list of some of the network reconfigurations
that can be efficiently computed and optimized using bottleneck structures:</t>
        <ul spacing="normal">
          <li>
            <strong>Flow routing</strong>. Both the operation of routing a new flow or
rerouting an existing flow on a network can be modeled as a perturbation,
whose impact can be efficiently measured using bottleneck structures.
In particular, QTBS can be used to resolve the joint congestion
control and routing optimization problem for individual
flows (see Section 3.1 in <xref target="G2-TREP"/>).</li>
          <li>
            <strong>Traffic shaping</strong>. Traffic shaping a flow corresponds to the action
of taking a derivative with respect to the rate of the flow. Bottleneck
structures can be used by network operators and application service
providers to compute such perturbations. For instance, to accelerate
a large scale data transfer, an application can use bottleneck structures
to identify optimal traffic shaping configurations (see Section 3.3 in
<xref target="G2-TREP"/>).</li>
          <li>
            <strong>Bandwidth enforcement</strong>. In high-performance networks that target
close to 100% link utilization such as Google's B4 network <xref target="B4-SIGCOMM"/>,
a centralized SDN controller is used collect the state of the network
and compute an optimized multipath bandwidth allocation vector. The
solution is then deployed at the edge of the network using a technique
known as bandwidth enforcement <xref target="BE-SIGCOMM"/>. By using bottleneck structures
to efficiently compute changes in the bandwidth allocated to each flow path,
operators can efficiently derive improved bandwidth allocation vectors.</li>
          <li>
            <strong>Flow scheduling</strong>. When a flow initiates transmitting data on a network,
it uses bandwidth along its path, creating a ripple effect that impacts
the performance of other flows in the network. Similarly, the termination
of a flow frees bandwidth along its path, creating another perturbation
that propagates through the network. Bottleneck structures can efficiently
model and compute the effect of flow arrival and departure in a communication
network by using simple delta calculations according to the link and flow
equations (see <xref target="quantifying"/> and <xref target="G2-SIGCOMM"/>). This information can be used by
applications that need to perform bulk data transfer to decide when
to schedule a flow.  More in particular, it can be used to enhance the
ALTO Cost Calendar service <xref target="RFC8896"/>.</li>
          <li>
            <strong>Service placement</strong>. Deploying application services in a network
requires deciding the location of the compute and storage resources
needed to run the service. For instance, in edge computing, an extended
reality (XR) server could be deployed at the distributed unit (DU), the central
unit (CU), the mobile core (MC) or the central cloud <xref target="PETERSON"/>. Bottleneck
structures can be used to measure the effect of placing a service on each of the
candidate locations, helping the application service provider to make
optimized decisions.</li>
          <li>
            <strong>Multi-job scheduling</strong>. Running a job on a network implies a number
of flows will be initiated and terminated throughout the execution of the job.
the ripple effects generated from the execution of a job can also be measured
using bottleneck structures. This can be used to decide when to optimally
launch one or more jobs. For instance, in a data center, bottleneck structure
analysis can help the application decide how to optimally schedule multiple AI
training or inference jobs that are sharing the same interconnect <xref target="G2-SIGCOMM"/>.</li>
          <li>
            <strong>Link capacity upgrades</strong>. In capacity planning, operators often
have a fixed budget and need to decide how to optimally add capacity
to a network in order to maximize its performance. The effect of a link
upgrade operation can be computed as a derivative with respect to a change
(an increase) in the capacity of a link. Through the processing of historical
flow information from the network (e.g., NetFlow logs), bottleneck structures
can efficiently compute the effect of each link upgrade and identify
those that yield maximal performance.</li>
          <li>
            <strong>Path shortcuts</strong>. Operators in wide area networks need to
decide whether a communication path should be set up as purely optical (bypassing layer 3
routing) or undergo an optical-to-electrical-to-optical (OEO) conversion at certain
routers in order to perform layer 3 routing <xref target="SH-SIGCOMM"/>.
The trade-off is one of cost-efficiency versus
better routing control of the network. Bottleneck structures can be used
to search for paths that are optimally suitable for being offloaded to
a purely optical path. These are also known in the literature
as path shortcuts <xref target="SH-SIGCOMM"/>.</li>
        </ul>
      </section>
    </section>
    <section anchor="use_cases">
      <name>ALTO Bottleneck Structure Service Use Cases</name>
      <t>Applications of bottleneck structure analysis expand through
a broad class of optimization problems that include traffic
engineering, routing, flow scheduling, resiliency analysis,
network slicing, service level agreement (SLA) management,
network design and capacity planning, to name only a few.
In this section, we briefly describe some of
the use cases that relate to the objectives of the
IETF ALTO Standard.</t>
      <section anchor="rate_limiting">
        <name>Application Rate Limiting for CDN and Edge Cloud Applications</name>
        <t>In applications such as CDN, XR or gaming, it is important
to throttle the transmission rate of flows to match the true available
capacity along their communication path. Transmitting at a lower rate
than the available bandwidth leads to lower
quality of experience (QoE). Transmitting at a higher rate increases
packet losses, which wastes network resources and also leads to a
lower QoE.</t>
        <t>Estimating the available bandwidth for a flow is complex because
it depends on multiple factors including the network topology, the
routing configuration and the set of dynamic flows using the
network resources. Bottleneck structures capture in a single digraph
these three factors, creating a model that allows to estimate
the performance of each flow. See for instance Sections 3.1 and
3.2 in <xref target="G2-TREP"/> for examples on how bottleneck structures can be
used to estimate the available bandwidth of an application.</t>
        <t>An ALTO server could help the application service provider obtain
the available bandwidth on a given path by exposing the bottleneck
structure of the network. With this information alone, the
provider could directly obtain the available bandwidth.
Alternatively, the application service could query the
ALTO server by passing the path for which the available
bandwidth needs to be computed,
and the ALTO server could return this value without the need to
share the complete bottleneck structure.</t>
      </section>
      <section anchor="time-bound-constrained-flow-acceleration-for-large-data-set-transfers">
        <name>Time-bound Constrained Flow Acceleration for Large Data Set Transfers</name>
        <t>Bulk data transfer is an important application to both commercial and
government supported networks. For instance, Google's B4 network supports
large-scale data push synchronizing state across multiple global
data centers <xref target="B4-SIGCOMM"/>. Another common use case is found in
science networks, where massive data sets such as those originated
from the Large Hadron Collider at CERN, Switzerland, need to be shared
with scientific labs around the world. In this section, we show how
bottleneck structures can be used to reconfigure a network towards
accelerating a given data transfer with the goal to meet a certain
time constraint.</t>
        <t>To illustrate this use case, we will assume the simple bottleneck
structure shown in <xref target="flowaccel"/>.</t>
        <figure anchor="flowaccel">
          <name>Reducing the rate of flow f1 maximally accelerates flow f5.</name>
          <artwork><![CDATA[
            +------+
            |      |
            |  l1  <-----------+
            |      |           |
            +--^---+           |
               | -1            | +1
               |               |
            +--v---+           |
            |      |           |
            |  f1  |           |
            |      |           |
            +------+           |
                               |
            +------+        +--v---+
            |      |   +1   |      |
            |  l2  <--------+  f2  |
            |      |        |      |
            +--^---+        +--+---+
               | -1            | +1
               |               |
            +--v---+        +--v---+
            |      |        |      |
            |  f3  |        |  l3  |
            |      |        |      |
            +--+---+        +--^---+
               | -1            | -1
               |               |
            +--v---+        +--v---+
            |      |   -1   |      |
            |  l4  <--------+  f4  |
            |      |        |      |
            +--^---+        +------+
               | +2
               |
            +--v---+
            |      |
            |  f5  |
            |      |
            +------+
]]></artwork>
        </figure>
        <t>Suppose our goal is to accelerate flow f5. To achieve this objective,
we will also assume that we are allowed to traffic shape (reduce) the
rate of any of the other flows. Effectively, for each flow fi
different than f5, we need to compute the following derivative</t>
        <artwork><![CDATA[
-dr5/d_ri
]]></artwork>
        <t>and then pick the maximum value. Note that in the above expression,
we take the left-derivative (d_), since a traffic shaper reduces
the rate of a flow. We also negate the derivative (-d), since we
are interested in a positive impact induced on flow f5 when
reducing the rate of another flow fi.</t>
        <t>Such a calculation can be efficiently performed using the
bottleneck structure. As an example, <xref target="flowaccel"/> illustrates how the
value of (-dr5/d_r1) is computed. First, we reduce the rate of
flow f1 by 1 unit. This perturbation propagates through the
bottleneck structure reaching flow f5 via two paths:</t>
        <artwork><![CDATA[
l1 -> f2 -> l2 -> f3 -> l4 -> f5

l1 -> f2 -> l3 -> f4 -> l4 -> f5
]]></artwork>
        <t>Using the link and flow equations (<xref target="quantifying"/>),
each path simply flips the
sign of the perturbation every time a link vertex is
traversed. (The reason why the sign is flipped at each link vertex
is explained by the link and flow equations that dictate how perturbations
propagate through the bottleneck structure. Further mathematical
descriptions to explain this effect are outside the scope of this
document. For detailed mathematical derivations and additional
examples, please see <xref target="G2-TREP"/>).</t>
        <t>When reaching vertex f5, we find that each path
contributes 1 unit of bandwidth. Thus we have:</t>
        <artwork><![CDATA[
-dr5/d_r1 = 1 + 1 = 2
]]></artwork>
        <t>In fact, it can be seen that this derivative is maximal. That
is, traffic shaping any other flow would yield a smaller
increase in the rate of f5. Thus, an operator can conclude
that traffic shaping flow f1 yields an optimal strategy
to maximally accelerate the rate of flow f5. Note also that
in this case, there is a positive multiplier effect, since
reducing flow f1's rate by 1 unit, leads to an increase
on flow f5's rate by more than 1 unit.
This is known as a power gradient <xref target="G2-SIGCOMM"/>.</t>
        <t>While left outside the scope
of this document, bottleneck structures can also be used
to efficiently compute the value of the optimal traffic
shaper (i.e., in our example, to find by how much we should
traffic shape flow f1) and to quantify the impact on the
flow being accelerated. This information can also be used by
the application to estimate the flow's completion time.</t>
        <t>An ALTO server could help the application service provider identify
an optimized traffic shaping strategy by exposing the bottleneck
structure of the network. With this information alone, the
provider could efficiently compute an optimized set of traffic
shapers. Alternatively, the application service could query the
ALTO server by passing the set of flows that are allowed
to be traffic shaped and the flow that needs to be accelerated,
and the ALTO server could return the set of recommended
traffic shapers.</t>
      </section>
      <section anchor="application-performance-optimization-through-ai-modeling">
        <name>Application Performance Optimization Through AI Modeling</name>
        <t>A relevant and emerging area in the field of application
performance is AI-based network modeling. Several global
initiatives are been undertaken to apply AI to the field
of understanding and predicting network performance. For
instance, OpenNetLab <xref target="BE-ONL"/> provides a distributed networking
platform with many collaborative nodes (universities and
companies) and common benchmarking datasets for
researchers to collect real networking data and
train their AI models for various networking
environments, including the Internet, cloud, and
wireless networks. There also exist global
benchmarks and challenges to foster innovation in this field,
such as the ACM MMSys Challenge <xref target="MMSYS"/>, which focuses
on novel AI-based bandwidth estimation algorithms to
enable superior overall QoE on a global production
testbed built for real-time communications (RTC) of video
and audio.</t>
        <t>Modeling communication networks using purely AI frameworks
such as deep learning is challenging as it requires
very large production data sets that often times are not
available. They also require many years of intense, global
collaborative R&amp;D. To address these challenges, it has been
seen that hybrid models built by combining AI with a
"physics" model of the network can outperform purely
AI models, as they may require less training data to achieve
the same or better performance. For instance, the top two
winners of the ACM MMSys 2021 Bandwidth Prediction Challenge
<xref target="MMSYS"/> were based on hybrid models.</t>
        <t>Because bottleneck structures provide a "physics" model
of the network that can both qualify and quantify the
forces of interactions among flows and links, they can be
used in combination with AI to enable better performance
than purely AI-based models. For instance, this
area is being discussed in the IETF ALTO WG (e.g., <xref target="BE-ONL"/>) as a
potential use case in the ALTO Standard to help optimize the performance
of RTC applications. In particular, a key building block to optimize the QoE
performance of RTC applications is the bandwidth estimation
module. This module runs on the endpoint
of a real-time video application and aims at dynamically adapting the video
bitrate to stay within the available network capacity.
A limitation in the current algorithms, however, is their lack of
network state visibility. This requires the algorithms
to rely entirely on local indicators such as packet loss or latency,
which leads to poor training and inference performance.
Information provided by the bottleneck structure (which includes
topological, routing and flow information of the network in a single
digraph) exposed via the ALTO service could help unlock a richer set of
machine learning algorithms to optimize application performance.</t>
        <t>An ALTO server could help the application service provider implement
AI-assisted prediction algorithms by exposing the bottleneck
structure of the network. Alternatively, ALTO could implement
an AI-assisted prediction module with the help of bottleneck
structures. The application would then query the ALTO server
to obtain the predicted value.</t>
      </section>
      <section anchor="joint_use_case">
        <name>Optimized Joint Routing and Congestion Control</name>
        <t>In traditional IP networks, the problems of flow routing and congestion
control are separately resolved by following a two-step process:
first, a routing protocol is used to
determine the path between any two nodes in a network; then, flows are
routed according to such paths and their transmission rates are regulated
using a congestion control algorithm. This layered
and disjoint approach is known to be scalable but suboptimal because
the routing algorithm identifies paths without taking into account the
flow transmission rates assigned by the congestion control algorithm.</t>
        <t>Suppose that an application is trying to launch a new flow between
two endpoints with the goal to maximize the available
bandwidth. One can be tempted to think that, to identify the path
with maximal available bandwidth, it suffices to look at the current
state of the network and find the least congested path offering
the highest capacity. This approach, however, is naive since it does
not take into account the fact that the placement of the new flow
onto the network will itself create a perturbation in the network,
potentially making the chosen path suboptimal or, even more troublesome,
negatively affecting the performance of other priority flows.</t>
        <t>The goal of the joint routing and congestion control
problem between two given endpoints E1 and E2 consists in finding the path
from E1 to E2 that will yield the highest throughput <em>after</em> the flow is
placed on the network (i.e., taking into account the effect of placing
the flow).</t>
        <t>The solution to this problem is introduced in <xref target="G2-TREP"/> by employing a
strategy that combines the strengths of both the Dijkstra algorithm
and the insights revealed by the bottleneck structure. The algorithm
can both compute the optimal path and measure the overall network-wide
impact of deploying the new flow on the path. It also enables a framework
to identify new good-performing paths that have a limited
negative impact on the rest of the flows in the network.
This allows network and application providers to identify paths that
can both provide good performance to the newly added application flow
while preserving the performance of the existing high-priority flows.</t>
        <t>An ALTO server could help the application service provider optimize the
path selection decision by exposing the bottleneck structure of the
network. With this information alone, the provider could efficiently
compute the optimal path (e.g., using the algorithm introduced
in <xref target="G2-TREP"/>). Alternatively,
the application service could query the ALTO server by passing the
information of the two endpoints that need to be connected, and the
ALTO server could return a list of the top-N paths with the
highest throughput and their expected performance.</t>
      </section>
      <section anchor="placement_use_case">
        <name>Service Placement for Edge Computing</name>
        <t>Determining the proper location to deploy an application service in the
edge cloud is critical to ensure a good quality of experience
(QoE) for its users. Yet the service placement problem is known to
be NP-Hard <xref target="JSP-INFOCOM"/>, requiring heuristics to compute good (albeit
suboptimal) solutions.</t>
        <t>In <xref target="G2-SIGCOMM"/>, it is shown that Bottleneck structures can also be
used as highly scalable network simulators to evaluate the performance
of a network reconfiguration such as the placement of a new
service on a edge cloud. In particular, bottleneck structures
can very efficiently (1) compute the performance of each flow
in the network and (2) quantify the effects of the arrival (departure) of
new (existing) flows to (from) the network. This allows to simulate the
full transmission of an application traffic pattern very efficiently,
three or more orders of magnitude faster than traditional packet
simulators.</t>
        <t>Network and application providers can use this capability in two ways:</t>
        <ul spacing="normal">
          <li>Given a set of possible placement strategies, bottleneck structures
can be used to simulate them in real time, helping the operator
select the one that provides the best performance
while guaranteeing the service level agreements (SLAs) of the other
existing applications.</li>
          <li>Despite the server placement problem being intractable, bottleneck
structures provide a framework to identify good candidate solutions.
In particular, by capturing the topology, routing, and flow information
in a single computational graph, they can be used to efficiently explore
directions in the feasible set that yield incrementally better
performance.  By moving in these incremental directions, the placement
algorithm can progress within the enormous feasible set towards the
optimal solution.</li>
        </ul>
        <t>An ALTO server could help the application service provider optimize the
placement decision by exposing the bottleneck structure of the network.
With this information alone, the provider could compute the effect of
placing the service in one location versus another. Alternatively,
the application service could query the ALTO server by passing the
information of the possible locations where it can be placed, and the
ALTO server could return an ordered list of the locations and their
expected performance.</t>
      </section>
      <section anchor="training-neural-networks-and-ai-inference-for-edge-clouds-data-centers-and-planet-scale-networks">
        <name>Training Neural Networks and AI Inference for Edge Clouds, Data Centers and Planet-Scale Networks</name>
        <t>Neural network training and inference using distributed computing
systems are the subject of intense research and one of the leading
target applications in today's communication networks.
<xref target="TOPOOPT-MIT"/> <xref target="FLEXFLOW-STFORD"/> <xref target="SINGULARITY-MSFT"/>. To illustrate
this use case, we will focus our discussion on three types of
networks: edge clouds, data centers and planet-scale networks.</t>
        <t>5G and Edge Clouds enable for the first time the ability
to provide intelligence at the edge of the network. This capability
is disruptive in that humans and machines will have access to
unprecedented compute power to perform AI inference in real time.
For instance, using augmented reality (AR), humans will be able to
make better informed decisions as they navigate through an environment
by leveraging AI-inference on video and audio signals captured
in real time from their user equipments (UEs).
Similarly, machines such as vehicles
or factory robots will be able to use AI inference to optimize their
actions.</t>
        <t>Two resources are needed to perform inference:
(1) Input data from the environment (e.g., image and
audio signals captured from a video camera) and (2) compute
(typically in the form of GPUs and CPUs). The input data needs to be
transmitted from the location where it is captured (e.g., a micro-camera
running on a human's glasses) to the location where it is to be
processed for inference. The transmission of the input data requires
communication resources, whereas the inference process requires
computing resources. Since computing resources in the edge
cloud (<xref target="mec"/>) are distributed across the user equipment (UE),
the radio unit (RU), the distributed unit (DU) and the central unit
(CU) <xref target="PETERSON"/>, the problem of efficiently performing AI-inference is
one of optimizing the trade-off communication-compute as follows:
compute (communication) power is more scarce (abundant) if the
inference is performed closer to the UE, and more abundant (scarce)
if performed closer to the CU. For instance, if an AR application
running on a UE needs to perform an inference task at a time when the
communication path from the RU to the DU is highly congested,
then it will have an incentive to perform such a task directly
in the UE or in the RU. If instead the network offers an uncongested
path to the DU and the CU, it will
have an incentive to run the inference task on these other
nodes since they offer more compute power.</t>
        <figure anchor="mec">
          <name>An AI-inference application in the edge cloud needs to place the inference task on a compute node location (UE, RU, DU or CU) that will perform well from both a compute and a communication standpoint.</name>
          <artwork><![CDATA[
   +------+       +------+       +------+       +------+
   |      |       |      |       |      |       |      |
   |  UE  +-------+  RU  +-------+  DU  +-------+  CU  +
   |      |       |      |       |      |       |      |
   +------+  Air  +------+       +------+       +------+
          Interface      Fronthaul       Backhaul
]]></artwork>
        </figure>
        <t>Using ALTO path vector <xref target="I-D.ietf-alto-path-vector"/> and performance
metrics <xref target="I-D.ietf-alto-performance-metrics"/> features,
the application could retrieve
the amount of compute resources located in the RU, DU and CU.
By extending ALTO to support bottleneck structures, the application
would also be able to estimate in real-time the available
bandwidth for the paths UE-RU, UE-RU-DU, and UE-RU-DU-CU.
Further, using bottleneck structure methods described in <xref target="G2-SIGCOMM"/>,
the application would be able to estimate the time to complete
the inference task for each of the four possible scenarios (running in
the UE, the RU, the DU or, or the CU) and choose the
configuration with the fastest execution.</t>
        <t>Similar joint compute-communication optimization problems appear when
performing neural network training in large-scale data centers.
Large-scale data centers with millions
of compute nodes are used to train gigantic neural networks (with
potentially trillions of parameters). Such a massive task needs
to be broken down into smaller subtasks that are then executed on
the nodes. Once again, compute and communication need to
be jointly optimized (see <xref target="TOPOOPT-MIT"/> and <xref target="FLEXFLOW-STFORD"/>)
in order to ensure regions in the network don't become bottlenecks.
By exposing bottleneck structure information using ALTO, the
AI-training application can make better subtask placement decisions
that avoid potential network bottlenecks.</t>
        <t>Finally, AI-training using planet-scale networks generalizes
the same joint compute and communication problem to an Internet level
<xref target="SINGULARITY-MSFT"/>, with the need to implement a global
scheduler that is responsible for placing workloads
onto clusters of globally-distributed compute nodes.
Here too enabling better network state visibility using ALTO
and bottleneck structure graphs could help the scheduler make
better task placement decisions.</t>
        <!--

## 5G Network Slicing {#slicing}

Bottleneck structures can also be used by network operators and
application service providers to design optimized network slices.
See [G2-SIGCOMM] for examples on how bottleneck structures can be
used to design network slices in data centers.

TOBECOMPLETED
-->

</section>
    </section>
    <section anchor="req_example">
      <name>Example: Application Layer Traffic Optimization using Bottleneck Structures</name>
      <t>In this section we provide an example illustrating how bottleneck
structures can be used to optimize application performance. This
example will then be referenced in <xref target="requirements"/> to discuss and
introduce the necessary requirements to integrate the BSG service
into the ALTO standard. It is worth noticing that, as shown in
<xref target="use_cases"/>, bottleneck structures have numerous applications.
This section provides a complete example for just one of the use
cases. In particular, the focus of the next example is on the
joint routing and congestion control use case <xref target="joint_use_case"/>.</t>
      <t><xref target="b4"/> provides a view of Google's B4 network as presented in
<xref target="B4-SIGCOMM"/>, providing connectivity to 12
data centers distributed across the world (two in Asia, six
in America and four in Europe).</t>
      <figure anchor="b4">
        <name>Google's B4 network introduced in [B4-SIGCOMM].</name>
        <artwork><![CDATA[
    +-----+   +-----+  +-----+  +-----+   +------+    +------+
    |     |   |     |  |     |  |     |   |      |    |      |
    | DC1 +---+ DC3 +--+ DC4 +--+ DC7 +---+ DC11 +----+ DC12 |
    |     |   |     |  |     |  |     |   |      |    |      |
    +---+-+   +--+--+  +--+-++  +----++   +-+--+-+    +----+-+
        |        |        | |      | |      |  |           |
        |        +------+ | +----+ | |      |  +--------+  |
        |               | |      | | |      |           |  |
        |               | |      | | |      |           |  |
        |        +------|-+ +----|-+ |      |   +-------|--+
        |        |      |   |    |   |      |   |       |
    +---+-+   +--+--+  ++---++  ++---++   +-+---++    +-+---+
    |     |   |     |  |     |  |     |   |      |    |     |
    | DC2 +---+ DC5 +--+ DC6 +--+ DC8 +---+ DC10 +----+ DC9 |
    |     |   |     |  |     |  |     |   |      |    |     |
    +-----+   +-----+  +-----+  +-----+   +------+    +-----+

    |-----|   |-----------------------|   |-----------------|
      Asia                 America                 Europe
]]></artwork>
      </figure>
      <t>The 12 data centeres are connected via a total of 19 links, labeled
l1, l2, ... l19. <xref target="b4_links"/> presents the pair of data centers that
each link is connected to.</t>
      <table anchor="b4_links">
        <name>Link connectivity (adjacency matrix) in the B4 network.</name>
        <thead>
          <tr>
            <th align="right">Link</th>
            <th align="left">Adjacent data centers</th>
            <th align="right">Link</th>
            <th align="left">Adjacent data centers</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">l1</td>
            <td align="left">DC1, DC2</td>
            <td align="right">l11</td>
            <td align="left">DC10, DC12</td>
          </tr>
          <tr>
            <td align="right">l2</td>
            <td align="left">DC1, DC3</td>
            <td align="right">l12</td>
            <td align="left">DC4, DC5</td>
          </tr>
          <tr>
            <td align="right">l3</td>
            <td align="left">DC3, DC4</td>
            <td align="right">l13</td>
            <td align="left">DC5, DC6</td>
          </tr>
          <tr>
            <td align="right">l4</td>
            <td align="left">DC2, DC5</td>
            <td align="right">l14</td>
            <td align="left">DC11, DC12</td>
          </tr>
          <tr>
            <td align="right">l5</td>
            <td align="left">DC3, DC6</td>
            <td align="right">l15</td>
            <td align="left">DC4, DC7</td>
          </tr>
          <tr>
            <td align="right">l6</td>
            <td align="left">DC6, DC7</td>
            <td align="right">l16</td>
            <td align="left">DC4, DC8</td>
          </tr>
          <tr>
            <td align="right">l7</td>
            <td align="left">DC7, DC8</td>
            <td align="right">l17</td>
            <td align="left">DC7, DC8</td>
          </tr>
          <tr>
            <td align="right">l8</td>
            <td align="left">DC8, DC10</td>
            <td align="right">l18</td>
            <td align="left">DC9, DC11</td>
          </tr>
          <tr>
            <td align="right">l9</td>
            <td align="left">DC9, DC10</td>
            <td align="right">l19</td>
            <td align="left">DC10, DC11</td>
          </tr>
          <tr>
            <td align="right">l10</td>
            <td align="left">DC7, DC11</td>
            <td align="right"> </td>
            <td align="left"> </td>
          </tr>
        </tbody>
      </table>
      <t>For the sake of illustration, we will assume a simple configuration
consisting of a pair of flows
(one for each direction) connecting every data center in the US
with every data center in Europe, with all flows routed along a
shortest path from source to destination. Since there are six data
centers in the US and four in Europe, this configuration has
a total of 48 flows. All links are assumed to have a capacity of
10 Gbps except for the transatlantic links (DC7-DC11 and DC8-DC10),
which are configured at 25 Gbps.</t>
      <t>The next Figure presents the bottleneck structure of Google's B4 network
with the assumed flow configuration.
Please see <xref target="bs_example"/> for a description of how to interpret the
bottleneck structure. (See also <xref target="G2-SC"/>, <xref target="G2-TREP"/> for details
on the algorithm used to compute the bottleneck structure.)</t>
      <figure anchor="b4fgg">
        <name>Bottleneck structure of Google's B4 network example.</name>
        <artwork><![CDATA[
   +--------+    +--------+
   |        |    |        |
   |  l15   |    |   l7   |
   |        |    |        |
   +-^----^-+    +--^--^--+
     |    |         |  |
     |    |         |  +--------------------------+
     |    |         |                             |
     |    +---------|------------------+          |
     |              |                  |          |
   +-v------+    +--v----+        +---v---+  +---v---+
   |        |    |       |        |       |  |       |
   |   f1   |    |  f2   |        |  f3   |  |  f10  | (...)
   |        |    |       |        |       |  |       |
   +-+-+-+--+    +-+---+-+        +--+--+-+  +-------+
     | | |         |   |             |  |
     | | +---------|---|-------------|--|--------------+
     | |           |   |             |  |              |
     | | +---------+   +-----------+ |  |              |
     | | |                         | |  |              |
     | +-|---------+    +----------|-+  +---------+    |
     |   |         |    |          |              |    |
     |   |         |    |          |              |    |
   +-v---v--+    +-v----v-+      +-v----+       +-v----v-+
   |        |    |        |      |      |       |        |
   |   l8   |    |  l10   |      |  l5  |       |   l3   |
   |        |    |        |      |      |       |        |
   +-^---^--+    +-^---^--+      +------+       +--------+
     |   |         |   |
     |   |         |   +-----------------------+
     |   |         |                           |
     |   +---------|---------------+           |
     |             |               |           |
   +-v----+    +---v---+       +---v---+   +---v---+
   |      |    |       |       |       |   |       |
   |  f6  |    |   f9  |       |  f23  |   |  f18  | (...)
   |      |    |       |       |       |   |       |
   +------+    +-------+       +-------+   +-------+
]]></artwork>
      </figure>
      <t>For the sake of compactness,
<xref target="b4fgg"/> only includes the bottleneck links
and a subset of the flow vertices that are part of the complete bottleneck
structure. In particular, out of the 19 links that are part of B4,
six links (l15, l7, l8, l10, l5, l3) are bottlenecks.</t>
      <t>The bottleneck structure graph shows the existence of two
bottleneck levels in our configuration example:</t>
      <ul spacing="normal">
        <li>The first level at the top of the bottleneck structure includes
links l15 and l7. Flows f1, f2, f3, f10, etc. are bottlenecked
at this level.</li>
        <li>The second level of the bottleneck structure includes links l8, l10,
l5 and l3. Flows f6, f9, f23, f18, etc. are bottlenecked at this level.</li>
      </ul>
      <t>From the MBA Property (Property 3), we know that flows bottlenecked by
a link at level 2 will enjoy higher available bandwidth than flows
bottlenecked at level 2. For instance, consider the following directed
path in the bottleneck structure:</t>
      <artwork><![CDATA[
l15 -> f1 -> l8 -> f6
]]></artwork>
      <t>Using the MBA property, we have that since l15 precedes l8, it must be
that s15 &lt; s8, where s15 is the rate of flow f1 bottlenecked
at l15 and s8 is the rate of flow f6 bottlenecked at l8.</t>
      <!--
The Perturbation Property (Property 2) also tells us that links at
level 1 will have a higher influence to the overall performance of
the network than links at level 2. Consider a level-1 link, for instance
l15. In {{b4fgg}}, we can see that flows f1, f3, etc. from level 1
and flows f6, f9, f23, f18, etc. from level 2 will be impacted
by the performance of link l15 (since there is a directed path
from l15 to all of these flows). Consider now a level-2 link, for
instance l8. Only flows f6, f23, etc. at level 2 will be impacted
by the performance of link l8.
-->

<t>Suppose now that an application needs to place a new flow on Google's
B4 network to transfer a large data set from data center 11 (DC11)
to data center 4 (DC4). The application needs to select and
configure a path
from DC11 to DC4 (for instance, this could be done by using
SR <xref target="RFC8402"/>). The shortest path DC11 -&gt; l10 -&gt;
DC7 -&gt; l15 -&gt; DC4 is often used as the default option.
Doing so, however, implies that the flow will be bottlenecked at
link l15 at the upper level of the bottleneck structure, leading to
a lower transmission rate. If instead we choose the non-shortest path
DC11 -&gt; l19 -&gt; DC10 -&gt; l8 -&gt; DC8 -&gt; l16 -&gt; DC4, now the flow
will be bottlenecked at link l8 (at the lower level of the
bottleneck structure), leading to a higher transmission rate.</t>
      <t>Using QTBS, we can also numerically compute the transmission rate of the flow
on each of the two path options.  (See Section 3.1 in <xref target="G2-TREP"/> for a detailed
description of how to compute the transmission rate assigned to
the flow on each of these paths.) In particular, we obtain that when the
application chooses the shortest path (bottlenecked at level 1 of the
bottleneck structure), it gets a transmission rate of 1.429 Gbps.
If instead the application chooses the slightly longer path (bottlenecked at
level 2 of the bottleneck structure), then it gets a transmission
rate of 2.5 Gbps, an increase of 74.95% with respect to the
shortest path solution.</t>
      <t><xref target="G2-TREP"/> introduces also a very efficient routing algorithm that
uses the bottleneck structure to find the maximal throughput path
for a flow in O(V+E*log(V)) steps, where V is the number of routers
and E is the number of links in the network.</t>
      <t>Overall, this example illustrates that, equipped with knowledge
about the bottleneck structure of a network, an application
can make better informed decisions on how to route a flow. In
the next sections, we will use this example to support a discussion
on the requirements for integrating the Bottleneck Structure Graph
(BSG) service into the ALTO standard.</t>
    </section>
    <section anchor="requirements">
      <name>Requirements</name>
      <t>This section provides a discussion on the necessary requirements
to integrate the BSG service into the ALTO standard.</t>
      <section anchor="requirement-1-bottleneck-structure-graph-bsg-abstraction">
        <name>Requirement 1: Bottleneck Structure Graph (BSG) Abstraction</name>
        <t>The first base requirement consists in extending the ALTO
server with the capability to compute bottleneck structures.
For instance, with this capability, given the network
configuration in <xref target="b4"/>, the ALTO server would be able to
compute the bottleneck structure shown in <xref target="b4fgg"/>:</t>
        <ul spacing="normal">
          <li>Requirement 1A (R1A). The ALTO server <bcp14>MUST</bcp14> compute the
bottleneck structure graph to allow applications optimize
their performance using the BSG service.</li>
        </ul>
        <t>We note that the alternative, which would consists in ALTO
simply providing the necessary information for applications
to compute their own bottleneck structures, would not scale
due to the following issues:</t>
        <ul spacing="normal">
          <li>Suppose that 1 ALTO server is providing support to N ALTO
clients. Then, requiring each application to compute the
bottleneck structure would imply performing N identical
and redundant computations. By computing the bottleneck structure
in the ALTO server, a one-time computation can be leveraged
by all N clients. We also note that <xref target="G2-SC"/> demonstrates
that bottleneck structures can be efficiently computed in
real time by the server even for large scale networks.</li>
          <li>A production-ready high-speed implementation of
QTBS is relatively sophisticated.
Requiring the applications to implement their own QTBS
optimization library would impose unnecessary and (perhaps
more importantly) out-of-scope requirements to the application,
which should focus on providing its service rather than implementing
a network optimization math library.</li>
        </ul>
        <t>The next requirement focuses on the type of bottleneck structure
an ALTO server must compute:</t>
        <ul spacing="normal">
          <li>Requirement 1B (R1B). The ALTO server <bcp14>MUST</bcp14> at least support
the computation of one bottleneck structure type from <xref target="types_bs"/>.
Depending on the network information available (e.g., presence of QoS
class information), the ALTO server <bcp14>MAY</bcp14> support all the three
bottleneck structure types, in which case the ALTO client <bcp14>MAY</bcp14>
be able to choose the bottleneck structure type for retrieval.
Also, it is <bcp14>RECOMMENDED</bcp14> that the ALTO server supports the
computation of the path gradient graph (PGG)
as the default bottleneck structure implementation for retrieval
by the ALTO clients.</li>
        </ul>
      </section>
      <section anchor="requirement-2-information-received-from-the-network">
        <name>Requirement 2: Information Received from the Network</name>
        <t>To compute a bottleneck structure, two pieces of information
are required:</t>
        <ul spacing="normal">
          <li>
            <t>Topology Object (T). The T Object is a data structure
that includes:  </t>
            <t>
(1) A Topology Graph (V, E), where V is the set of routers and E
 is the set of links connecting the routers in the network.  </t>
            <t>
(2) A Capacity Dictionary (C), a key-value table mapping each link
 with its capacity (in bps).</t>
          </li>
          <li>Flow Dictionary (F). The F Dictionary is a key-value table
mapping every flow with the set of links it traverses.</li>
        </ul>
        <t>As shown in <xref target="G2-TREP"/>, the above information is enough to compute
the bottleneck structure. In fact, with only the F and C dictionaries,
one can compute the bottleneck structure. The topology graph (V, E) is
needed to perform optimal routing computations (for instance, to find new
paths in the network that yield higher throughput, as illustrated
in <xref target="req_example"/>).</t>
        <t>The above discussion leads to the following requirement:</t>
        <ul spacing="normal">
          <li>Requirement 2A (R2A). The ALTO server <bcp14>MUST</bcp14> collect information about
(1) the set of routers and links in a network, (2) the capacity of each
link and (3) the set of links traversed by each flow.</li>
        </ul>
        <t>Information about the set of routers, links and link capacity is
typically available from protocols and technologies such as
SNMP, BGP-LS, SDN, or domain specific topology logs. This
information is enough to construct the T Object.
Information about the set of links traversed by each flow can
be obtained from protocols such as NetFlow, sFlow, IPFIX, etc.
See <xref target="FLOWDIR"/> and <xref target="G2-SC"/> for examples of how requirement R2A
is implemented in real-world production networks.</t>
      </section>
      <section anchor="requirement-3-information-passed-to-the-application">
        <name>Requirement 3: Information Passed to the Application</name>
        <t>The following requirement is necessary so that applications
can optimize their performance using bottleneck structure
information:</t>
        <ul spacing="normal">
          <li>Requirement 3A (R3A). The ALTO client <bcp14>MUST</bcp14> be able to query the
ALTO server to obtain the current bottleneck structure
of the network, represented as a digraph.</li>
        </ul>
        <!--
- Requirement 3B (R3B). The ALTO client MUST be able to query
the ALTO server to obtain the resulting effect of a network
reconfiguration (see {{types_reconfigurations}}).

For example, an application may be interested in finding a
high-throughput path. Using requirement R3A, it can obtain
a copy of the bottleneck structure, and use it to
select a few paths that comply with the application
constraints and that are located at the higher levels of the
bottleneck structure (since from the MBA property,
these yield higher performance). Then using requirement R3B,
it could query the ALTO server again to obtain the expected
performance on each of the selected paths.
-->

<t>In addition, the current ALTO services can be extended with
additional information obtained from the bottleneck structure:</t>
        <ul spacing="normal">
          <li>Requirement 3B (R3C). One or more ALTO services (the Network
Map, the Cost Map, the Entity Property Map or the Endpoint Cost
Map) <bcp14>MUST</bcp14> support reporting to ALTO
clients additional network state information derived from
the bottleneck structure to the ALTO client.</li>
        </ul>
        <t>For example, the ALTO Cost Map Service can be extended with
a new cost metric that corresponds to the estimated available
bandwidth between two endpoints according to the bottleneck
structure model.</t>
      </section>
      <section anchor="requirement-4-features-needed-to-support-the-use-cases">
        <name>Requirement 4: Features Needed to Support the Use Cases</name>
        <t>Bottleneck structures offer a rich framework to optimize
application performance for a variety of use cases.
In addition to the base requirement to construct the bottleneck
structure graph (see R1A), in this section we enumerate additional
capabilities that must be supported by the ALTO BSG service
to ensure it is effective in helping applications optimize
their performance for each of the supported use cases.</t>
        <ul spacing="normal">
          <li>Requirement 4A (R4A). The ALTO BSG service <bcp14>MUST</bcp14> be able to
compute the effect of network reconfigurations using bottleneck
structure analysis and according to the types described in
<xref target="types_reconfigurations"/>.</li>
        </ul>
        <t>For example, an extended reality (XR) application might need to
choose where to place a containerized instance of
the XR service among a set of possible server racks located
in various edge cloud locations. The application would
query the ALTO BSG service to obtain the projected performance
results of placing the new service instance on each possible
location, allowing it to select the one that would yield
the highest performance.</t>
        <t>The following requirement is necessary to ensure that the
information provided by the BSG service is not stale:</t>
        <t>Requirement 4B (R4B). The BSG service <bcp14>MUST</bcp14> be able to update
the bottleneck structure graph in near-real time, at least
once a minute or less.</t>
        <t>In <xref target="G2-SC"/> it is shown that bottleneck structures can be computed
in a fraction of a session for a production US wide network
with about 100 routers and 500 links.
Thus, the above requirement should be achievable with a good
implementation of the bottleneck structure algorithm <xref target="G2-TREP"/>.</t>
        <!--

# Bottleneck Structure Graph Extension: Overview

TODO

# Specification: Basic Data Types

TODO

# Specification: Service Extensions

TODO

# Compatibility with Other ALTO Services and Extensions

TODO

# General Discussions

TODO

# Examples

TODO

-->

</section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Future versions of this document may extend the base ALTO
protocol, so the Security Considerations <xref target="RFC7285"/> of the
base ALTO protocol fully apply when this proposed extension
is provided by an ALTO server.</t>
      <t>The Bottleneck Structure Graph extension requires additional scrutiny
on three security considerations discussed in the base protocol:
Confidentiality of ALTO information (Section 15.3 of <xref target="RFC7285"/>),
potential undesirable guidance from authenticated ALTO information
(Section 15.2 of <xref target="RFC7285"/>), and availability of ALTO service
(Section 15.5 of <xref target="RFC7285"/>).</t>
      <t>For confidentiality of ALTO information, a network operator should be
aware that this extension may introduce a new risk:
As the Bottleneck Structure information may reveal more fine-grained
internal network structures than the base protocol, an attacker may
identify the bottleneck link and start a distributed denial-of-service
(DDoS) attack involving minimal flows to conduct in-network
congestion. Given the potential risk of leaking sensitive
information, the BSG extension is mainly applicable in
scenarios where:</t>
      <ul spacing="normal">
        <li>The properties of the Bottleneck Structure Graph
do not impose security risks to the ALTO service provider, e.g., by
not carrying sensitive information.</li>
        <li>The ALTO server and client have
established a reliable trust relationship, for example, operated in
the same administrative domain, or managed by business partners with
legal contracts and proper authentication and privacy protocols.</li>
        <li>The ALTO server implements protection mechanisms to reduce
information exposure or obfuscate the real
information. Implementations involving reduction or
obfuscation of the Bottleneck Structure information <bcp14>SHOULD</bcp14> consider
reduction/obfuscation mechanisms that can preserve the integrity of
ALTO information, for example, by using minimal feasible region
compression algorithms <xref target="NOVA"/> or obfuscation protocols
<xref target="MERCATOR">RESA</xref>. We note that these obfuscation methods are
experimental and their practical applicability to
the generic capability provided by this extension is not fully
assessed.</li>
      </ul>
      <t>We note that for operators that are sensitive about disclosing
flow-level information (even if it is anonymized), then
they <bcp14>SHOULD</bcp14> consider using the Path Gradient Graph (PGG) or
the QoS-Path Gradient Graph (Q-PGG) since these objects provide
the additional security advantage of hiding flow-level
information from the graph.</t>
      <t>For undesirable guidance, the ALTO server must be aware that,
if information reduction/obfuscation methods are implemented,
they may lead to potential misleading information from
Authenticated ALTO Information. In such cases, the Protection
Strategies described in Section 15.2.2 of <xref target="RFC7285"/> <bcp14>MUST</bcp14> be considered.</t>
      <t>For availability of ALTO service, an ALTO server should be cognizant
that using Bottleneck Structures might have a new risk: frequently
querying the BSG service might consume intolerable amounts of
computation and storage on the server side.
For example, if an ALTO server implementation dynamically computes
the Bottleneck Structure for each request, the BSG service
may become an entry point for denial-of-service attacks on the
availability of an ALTO server.</t>
      <t>To mitigate this risk, an ALTO server may consider using
optimizations such as precomputation-and-projection mechanisms
<xref target="MERCATOR"/> to reduce the overhead for processing each query.
An ALTO server may also protect itself from malicious clients by
monitoring the behaviors of clients and stopping serving clients with
suspicious behaviors (e.g., sending requests at a high frequency).</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>Future versions of this document may register new entries
to the ALTO Cost Metric Registry, the ALTO Cost Mode Registry,
the ALTO Domain Entity Type Registry and the
ALTO Entity Property Type Registry.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC7285">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Protocol</title>
            <author fullname="R. Alimi" initials="R." role="editor" surname="Alimi">
              <organization/>
            </author>
            <author fullname="R. Penno" initials="R." role="editor" surname="Penno">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." role="editor" surname="Yang">
              <organization/>
            </author>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="S. Previdi" initials="S." surname="Previdi">
              <organization/>
            </author>
            <author fullname="W. Roome" initials="W." surname="Roome">
              <organization/>
            </author>
            <author fullname="S. Shalunov" initials="S." surname="Shalunov">
              <organization/>
            </author>
            <author fullname="R. Woundy" initials="R." surname="Woundy">
              <organization/>
            </author>
            <date month="September" year="2014"/>
            <abstract>
              <t>Applications using the Internet already have access to some topology information of Internet Service Provider (ISP) networks.  For example, views to Internet routing tables at Looking Glass servers are available and can be practically downloaded to many network application clients.  What is missing is knowledge of the underlying network topologies from the point of view of ISPs.  In other words, what an ISP prefers in terms of traffic optimization -- and a way to distribute it.</t>
              <t>The Application-Layer Traffic Optimization (ALTO) services defined in this document provide network information (e.g., basic network location structure and preferences of network paths) with the goal of modifying network resource consumption patterns while maintaining or improving application performance.  The basic information of ALTO is based on abstract maps of a network.  These maps provide a simplified view, yet enough information about a network for applications to effectively utilize them.  Additional services are built on top of the maps.</t>
              <t>This document describes a protocol implementing the ALTO services. Although the ALTO services would primarily be provided by ISPs, other entities, such as content service providers, could also provide ALTO services.  Applications that could use the ALTO services are those that have a choice to which end points to connect.  Examples of such applications are peer-to-peer (P2P) and content delivery networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7285"/>
          <seriesInfo name="DOI" value="10.17487/RFC7285"/>
        </reference>
        <reference anchor="RFC8402">
          <front>
            <title>Segment Routing Architecture</title>
            <author fullname="C. Filsfils" initials="C." role="editor" surname="Filsfils">
              <organization/>
            </author>
            <author fullname="S. Previdi" initials="S." role="editor" surname="Previdi">
              <organization/>
            </author>
            <author fullname="L. Ginsberg" initials="L." surname="Ginsberg">
              <organization/>
            </author>
            <author fullname="B. Decraene" initials="B." surname="Decraene">
              <organization/>
            </author>
            <author fullname="S. Litkowski" initials="S." surname="Litkowski">
              <organization/>
            </author>
            <author fullname="R. Shakir" initials="R." surname="Shakir">
              <organization/>
            </author>
            <date month="July" year="2018"/>
            <abstract>
              <t>Segment Routing (SR) leverages the source routing paradigm.  A node steers a packet through an ordered list of instructions, called "segments".  A segment can represent any instruction, topological or service based.  A segment can have a semantic local to an SR node or global within an SR domain.  SR provides a mechanism that allows a flow to be restricted to a specific topological path, while maintaining per-flow state only at the ingress node(s) to the SR domain.</t>
              <t>SR can be directly applied to the MPLS architecture with no change to the forwarding plane.  A segment is encoded as an MPLS label.  An ordered list of segments is encoded as a stack of labels.  The segment to process is on the top of the stack.  Upon completion of a segment, the related label is popped from the stack.</t>
              <t>SR can be applied to the IPv6 architecture, with a new type of routing header.  A segment is encoded as an IPv6 address.  An ordered list of segments is encoded as an ordered list of IPv6 addresses in the routing header.  The active segment is indicated by the Destination Address (DA) of the packet.  The next active segment is indicated by a pointer in the new routing header.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8402"/>
          <seriesInfo name="DOI" value="10.17487/RFC8402"/>
        </reference>
        <reference anchor="RFC8896">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Cost Calendar</title>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy">
              <organization/>
            </author>
            <author fullname="R. Yang" initials="R." surname="Yang">
              <organization/>
            </author>
            <author fullname="Q. Wu" initials="Q." surname="Wu">
              <organization/>
            </author>
            <author fullname="L. Deng" initials="L." surname="Deng">
              <organization/>
            </author>
            <author fullname="N. Schwan" initials="N." surname="Schwan">
              <organization/>
            </author>
            <date month="November" year="2020"/>
            <abstract>
              <t>This document is an extension to the base Application-Layer Traffic Optimization (ALTO) protocol.  It extends the ALTO cost information service so that applications decide not only 'where' to connect but also 'when'.  This is useful for applications that need to perform bulk data transfer and would like to schedule these transfers during an off-peak hour, for example.  This extension introduces the ALTO Cost Calendar with which an ALTO Server exposes ALTO cost values in JSON arrays where each value corresponds to a given time interval.  The time intervals, as well as other Calendar attributes, are specified in the Information Resources Directory and ALTO Server responses.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8896"/>
          <seriesInfo name="DOI" value="10.17487/RFC8896"/>
        </reference>
        <reference anchor="I-D.ietf-alto-path-vector">
          <front>
            <title>An ALTO Extension: Path Vector</title>
            <author fullname="Kai Gao" initials="K." surname="Gao">
              <organization>Sichuan University</organization>
            </author>
            <author fullname="Young Lee" initials="Y." surname="Lee">
              <organization>Samsung</organization>
            </author>
            <author fullname="Sabine Randriamasy" initials="S." surname="Randriamasy">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Y. Richard Yang" initials="Y. R." surname="Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Jingxuan Zhang" initials="J." surname="Zhang">
              <organization>Tongji University</organization>
            </author>
            <date day="20" month="March" year="2022"/>
            <abstract>
              <t>   This document is an extension to the base Application-Layer Traffic
   Optimization (ALTO) protocol.  It extends the ALTO Cost Map and ALTO
   Property Map services so that an application can decide which
   endpoint(s) to connect based on not only numerical/ordinal cost
   values but also fine-grained abstract information of the paths.  This
   is useful for applications whose performance is impacted by specified
   components of a network on the end-to-end paths, e.g., they may infer
   that several paths share common links and prevent traffic bottlenecks
   by avoiding such paths.  This extension introduces a new abstraction
   called Abstract Network Element (ANE) to represent these components
   and encodes a network path as a vector of ANEs.  Thus, it provides a
   more complete but still abstract graph representation of the
   underlying network(s) for informed traffic optimization among
   endpoints.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-alto-path-vector-25"/>
        </reference>
        <reference anchor="I-D.ietf-alto-performance-metrics">
          <front>
            <title>ALTO Performance Cost Metrics</title>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Y. Richard Yang" initials="Y. R." surname="Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Young Lee" initials="Y." surname="Lee">
              <organization>Samsung</organization>
            </author>
            <author fullname="Dhruv Dhody" initials="D." surname="Dhody">
              <organization>Huawei</organization>
            </author>
            <author fullname="Sabine Randriamasy" initials="S." surname="Randriamasy">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Luis M. Contreras" initials="L. M." surname="Contreras">
              <organization>Telefonica</organization>
            </author>
            <date day="21" month="March" year="2022"/>
            <abstract>
              <t>   The cost metric is a basic concept in Application-Layer Traffic
   Optimization (ALTO), and different applications may use different
   types of cost metrics.  Since the ALTO base protocol (RFC 7285)
   defines only a single cost metric (namely, the generic "routingcost"
   metric), if an application wants to issue a cost map or an endpoint
   cost request in order to identify a resource provider that offers
   better performance metrics (e.g., lower delay or loss rate), the base
   protocol does not define the cost metric to be used.

   This document addresses this issue by extending the specification to
   provide a variety of network performance metrics, including network
   delay, delay variation (a.k.a, jitter), packet loss rate, hop count,
   and bandwidth.

   There are multiple sources (e.g., estimation based on measurements or
   service-level agreement) to derive a performance metric.  This
   document introduces an additional "cost-context" field to the ALTO
   "cost-type" field to convey the source of a performance metric.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-alto-performance-metrics-28"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="G2-SIGMETRICS">
          <front>
            <title>On the Bottleneck Structure of Congestion-Controlled Networks</title>
            <author initials="J." surname="Ros-Giralt" fullname="Jordi Ros-Giralt">
              <organization>Reservoir Labs / Qualcomm</organization>
            </author>
            <author initials="A." surname="Bohara">
              <organization/>
            </author>
            <author initials="S." surname="Yellamraju">
              <organization/>
            </author>
            <author initials="H." surname="Langston">
              <organization/>
            </author>
            <author initials="R." surname="Lethin">
              <organization/>
            </author>
            <author initials="Y." surname="Jiang">
              <organization/>
            </author>
            <author initials="L." surname="Tassiulas">
              <organization/>
            </author>
            <author initials="J." surname="Li">
              <organization/>
            </author>
            <author initials="Y." surname="Tan">
              <organization/>
            </author>
            <author initials="M." surname="Veeraraghavan">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
          <seriesInfo name="ACM SIGMETRICS" value=""/>
        </reference>
        <reference anchor="G2-SIGCOMM">
          <front>
            <title>Designing data center networks using bottleneck structures</title>
            <author initials="J." surname="Ros-Giralt" fullname="Jordi Ros-Giralt">
              <organization>Reservoir Labs</organization>
            </author>
            <author initials="N." surname="Amsel">
              <organization/>
            </author>
            <author initials="S." surname="Yellamraju">
              <organization/>
            </author>
            <author initials="J." surname="Ezick">
              <organization/>
            </author>
            <author initials="R." surname="Lethin">
              <organization/>
            </author>
            <author initials="Y." surname="Jiang">
              <organization/>
            </author>
            <author initials="A." surname="Feng">
              <organization/>
            </author>
            <author initials="L." surname="Tassiulas">
              <organization/>
            </author>
            <author initials="Z." surname="Wu">
              <organization/>
            </author>
            <author initials="K." surname="Bergman">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
          <seriesInfo name="ACM SIGCOMM" value=""/>
        </reference>
        <reference anchor="G2-TREP">
          <front>
            <title>A Quantitative Theory of Bottleneck Structures for Data Networks</title>
            <author initials="J." surname="Ros-Giralt" fullname="Jordi Ros-Giralt">
              <organization>Reservoir Labs</organization>
            </author>
            <author initials="N." surname="Amsel">
              <organization/>
            </author>
            <author initials="S." surname="Yellamraju">
              <organization/>
            </author>
            <author initials="J." surname="Ezick">
              <organization/>
            </author>
            <author initials="R." surname="Lethin">
              <organization/>
            </author>
            <author initials="Y." surname="Jiang">
              <organization/>
            </author>
            <author initials="A." surname="Feng">
              <organization/>
            </author>
            <author initials="L." surname="Tassiulas">
              <organization/>
            </author>
            <author initials="Z." surname="Wu">
              <organization/>
            </author>
            <author initials="K." surname="Bergman">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
          <seriesInfo name="Reservoir Labs (Qualcomm) Technical Report" value=""/>
        </reference>
        <reference anchor="G2-SC">
          <front>
            <title>Computing Bottleneck Structures at Scale for High-Precision Network Performance Analysis</title>
            <author initials="N." surname="Amsel" fullname="Noah Amsel">
              <organization>Reservoir Labs</organization>
            </author>
            <author initials="J." surname="Ros-Giralt">
              <organization/>
            </author>
            <author initials="S." surname="Yellamraju">
              <organization/>
            </author>
            <author initials="B." surname="von Hoffe">
              <organization/>
            </author>
            <author initials="R." surname="Lethin">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
          <seriesInfo name="IEEE International Workshop on Innovating the Network for Data Intensive Science (INDIS), Supercomputing" value=""/>
        </reference>
        <reference anchor="LORENZ">
          <front>
            <title>Does the flap of a butterfly's wings in Brazil set off a tornado in Texas?</title>
            <author initials="E." surname="Lorenz">
              <organization/>
            </author>
            <date year="1972"/>
          </front>
          <seriesInfo name="American Association for the Advancement of Science, 139th Meeting" value=""/>
        </reference>
        <reference anchor="GALLAGER">
          <front>
            <title>Data Networks</title>
            <author initials="R." surname="Gallager">
              <organization/>
            </author>
            <author initials="D." surname="Bertsekas">
              <organization/>
            </author>
            <date year="1992"/>
          </front>
        </reference>
        <reference anchor="B4-SIGCOMM">
          <front>
            <title>B4: Experience with a Globally-Deployed Software Defined WAN</title>
            <author initials="S." surname="Jain et al">
              <organization/>
            </author>
            <date year="2013"/>
          </front>
          <seriesInfo name="ACM SIGCOMM" value=""/>
        </reference>
        <reference anchor="BE-SIGCOMM">
          <front>
            <title>BwE: Flexible, Hierarchical Bandwidth Allocation for WAN Distributed Computing</title>
            <author initials="A." surname="Kumar et al">
              <organization/>
            </author>
            <date year="2015"/>
          </front>
          <seriesInfo name="ACM SIGCOMM" value=""/>
        </reference>
        <reference anchor="SH-SIGCOMM">
          <front>
            <title>Cost-effective capacity provisioning in wide area networks with Shoofly</title>
            <author initials="R." surname="Singh et al">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
          <seriesInfo name="ACM SIGCOMM" value=""/>
        </reference>
        <reference anchor="PETERSON">
          <front>
            <title>5G Mobile Networks: A Systems Approach</title>
            <author initials="L." surname="Peterson">
              <organization/>
            </author>
            <author initials="O." surname="Sunay">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
          <seriesInfo name="Open Networking Foundation" value=""/>
        </reference>
        <reference anchor="MMSYS" target="https://2021.acmmmsys.org/rtc_challenge.php">
          <front>
            <title>Bandwidth Estimation for Real-Time Communications</title>
            <author>
              <organization/>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="BE-ONL" target="https://datatracker.ietf.org/meeting/112/materials/slides-112-alto-bandwidth-estimation-service-00">
          <front>
            <title>Bandwidth Estimation on OpenNetLab</title>
            <author>
              <organization/>
            </author>
            <date year="2021"/>
          </front>
          <seriesInfo name="IETF Plenary 112, IETF ALTO WG" value=""/>
        </reference>
        <reference anchor="FLOWDIR">
          <front>
            <title>Steering Hyper-Giants' Traffic at Scale</title>
            <author initials="E." surname="Pujol" fullname="Enric Pujol">
              <organization>BENOCS</organization>
            </author>
            <author initials="I." surname="Poese">
              <organization/>
            </author>
            <author initials="J." surname="Zerwas">
              <organization/>
            </author>
            <author initials="G." surname="Smaragdakis">
              <organization/>
            </author>
            <author initials="A." surname="Feldmann">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
          <seriesInfo name="ACM CoNEXT" value=""/>
        </reference>
        <reference anchor="JSP-INFOCOM">
          <front>
            <title>Joint Service Placement and Request Routing in Multi-cell Mobile Edge Computing Networks</title>
            <author initials="D." surname="Poularakis et al">
              <organization>Yale University</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="NOVA" target="https://doi.org/10.1109/IWQoS.2017.7969117">
          <front>
            <title>An objective-driven on-demand network abstraction for adaptive applications</title>
            <author initials="K." surname="Gao">
              <organization/>
            </author>
            <author initials="Q." surname="Xiang">
              <organization/>
            </author>
            <author initials="X." surname="Wang">
              <organization/>
            </author>
            <author initials="Y." surname="Yang">
              <organization/>
            </author>
            <author initials="J." surname="Bi">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
          <seriesInfo name="IEEE/ACM" value="IEEE/ACM Transactions on Networking (TON) Vol 27, no. 2 (2019): 805-818."/>
        </reference>
        <reference anchor="MERCATOR" target="https://doi.org/10.1109/JSAC.2019.2927073">
          <front>
            <title>Toward Fine- Grained, Privacy-Preserving, Efficient Multi-Domain Network Resource Discovery</title>
            <author initials="Q." surname="Xiang">
              <organization/>
            </author>
            <author initials="J." surname="Zhang">
              <organization/>
            </author>
            <author initials="X." surname="Wang">
              <organization/>
            </author>
            <author initials="C." surname="Guok">
              <organization/>
            </author>
            <author initials="F." surname="Le">
              <organization/>
            </author>
            <author initials="J." surname="MacAuley">
              <organization/>
            </author>
            <author initials="H." surname="Newman">
              <organization/>
            </author>
            <author initials="Y." surname="Yang">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
          <seriesInfo name="IEEE/ACM" value="IEEE/ACM IEEE Journal on Selected Areas of Communication 37(8): 1924-1940"/>
        </reference>
        <reference anchor="SINGULARITY-MSFT" target="https://arxiv.org/pdf/2202.07848.pdf">
          <front>
            <title>Singularity: Planet-Scale, Preemptive and Elastic Scheduling of AI Workloads</title>
            <author initials="D." surname="Shukla et al">
              <organization>Microsoft</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="TOPOOPT-MIT" target="https://arxiv.org/pdf/2202.00433.pdf">
          <front>
            <title>TOPOOPT: Optimizing the Network Topology for Distributed DNN Training</title>
            <author initials="W." surname="Wang et al">
              <organization>MIT, Facebook, CMU, Telescent</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="FLEXFLOW-STFORD" target="https://arxiv.org/pdf/1807.05358.pdf[">
          <front>
            <title>Beyond Data And Model Parallelism For Deep Neural Networks</title>
            <author initials="Z." surname="Jia et al">
              <organization>Stanford</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <!--
# Acknowledgments
{:numbered="false"}

TODO acknowledge.
-->



  </back>
  <!-- ##markdown-source:
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
b6kbE/wrKwEA

-->

</rfc>
