<?xml version="1.0" encoding="us-ascii"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version  (Ruby 3.1.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-ravi-ippm-csig-01" category="exp" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="CSIG">Congestion Signaling (CSIG)</title>

    <author initials="A." surname="Ravi" fullname="Abhiram Ravi">
      <organization>Google LLC</organization>
      <address>
        <email>abhiramr@google.com</email>
      </address>
    </author>
    <author initials="N." surname="Dukkipati" fullname="Nandita Dukkipati">
      <organization>Google LLC</organization>
      <address>
        <email>nanditad@google.com</email>
      </address>
    </author>
    <author initials="N." surname="Mehta" fullname="Naoshad Mehta">
      <organization>Google LLC</organization>
      <address>
        <email>naoshad@google.com</email>
      </address>
    </author>
    <author initials="J." surname="Kumar" fullname="Jai Kumar">
      <organization>Broadcom Inc.</organization>
      <address>
        <email>jai.kumar@broadcom.com</email>
      </address>
    </author>

    <date year="2024" month="February" day="02"/>

    <area>Internet</area>
    <workgroup>Networking Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document presents Congestion Signaling (CSIG), an in-band network telemetry protocol that allows end-hosts to obtain visibility into fine-grained network signals for congestion control, traffic management, and network debuggability in the network.  CSIG provides a simple, low-overhead, and extensible packet header mechanism to obtain fixed-length summaries from bottleneck devices along a packet path. This summarized information is collected over L2 CSIG-tags in a compare-and-replace manner across network devices along the path.   Receivers can reflect this information back to senders via L4+ CSIG reflection headers.</t>

<t>CSIG builds upon the successful aspects of prior work such as switch in-band network telemetry (INT) that incorporates multibit signals in live data packets. At the same time, CSIG&#39;s end-to-end mechanism for carrying the signals via fixed size header is simple, practical and deployable akin to Explicit Congestion Notification (ECN).</t>

<t>In addition to a detailed description of the end-to-end protocol, this document also motivates the use cases for CSIG and the rationale for design choices made in CSIG. It describes a set of signals of interest to applications (minimum available bandwidth, maximum link utilization, and maximum hop delay), methods to compute these signals in network devices, and how these signals can be leveraged in applications. Additionally, it describes how attributes about the bottleneck&#39;s location can be carried and made useful to applications. It also provides the framework to incorporate future signals. Finally, this document addresses incremental deployment, backward compatibility and nuances of CSIG&#39;s applicability in a range of scenarios.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>Many network control loops, including Congestion Control, Traffic
Engineering and Network Operations, make decisions based on the
congestion experienced by application flows.  The signals used to
determine congestion are often implicitly derived from end-to-end signals, approximated over larger timescales than desired, or obtained out-of-band from the network.  This can lead to suboptimal performance for applications or inefficiency in network usage.  CSIG (Congestion Signaling) provides direct, real-time, inband signals that network control loops can incorporate for performance and efficiency.</t>

<t>A number of congestion control algorithms (CCA) are deployed in
datacenters, including Swift <xref target="SWIFT"></xref>, BBR <xref target="BBR"></xref>, DCTCP <xref target="RFC8257"></xref>,
DCQCN <xref target="DCQCN"></xref> and HPCC++ <xref target="I-D.miao-tsv-hpcc"></xref>.  These CCA vary in the
congestion signals they use and in how they increase/decrease flow
rates in response to the signals.  Swift uses precise measurements of
round-trip time (RTT) to modulate its congestion window.  BBR uses a
combination of flow&#39;s delivery rate and RTT measurements.  DCTCP and
DCQCN rely on Explicit Congestion Notification (ECN <xref target="RFC3168"></xref>) from
switches that indicate if the queue build up is above a threshold.
HPCC++ leverages per-hop queue depth and transmit bytes along the
flow&#39;s path, obtained via inband telemetry probes, to update flow
rates.</t>

<t>Despite the advances in sophisticated signals on when to slow down
transfers, there continue to be blind-spots for CCA when it comes to
increasing flow rates, e.g., What is the appropriate starting rate
for a flow?  How quickly should a flow ramp up in the absence of
congestion?  Without explicit information from the network, end-to-
end CCA have come to rely on heuristics that can either undershoot or
overshoot the bottleneck bandwidth, which can lead to slower Flow
Completion Times (FCT) or increased round-trip times or packet
losses.  At the same time, applications&#39; appetite for fast network
performance is rising: AI/ML applications are pushing for fast
network transfers and avoid idling expensive Tensor Processing Units (TPUs) and Graphics Processing Units (GPUs). Similarly Storage disaggregation needs fast transfers to make a remote Storage device appear as a local device at host.</t>

<t>In this document we introduce Congestion Signaling (CSIG) to
explicitly notify the hosts of the bottleneck link metrics. There are several important use cases for CSIG, including:</t>

<t><list style="symbols">
  <t>Congestion Control Algorithms for making decisions on sending rate: CCA at senders can use CSIG for quickly and safely ramping up to the maximum feasible rate as determined by the bottleneck link, and react with precision to the bottleneck hop both in the presence and absence of congestion. The motivation for quick ramp-up stems from making maximal use of datacenter bandwidth, and decreasing latency even for large transfers. There are several ways in which CSIG can help complete transfers quickly, e.g., transfers belonging to an ML collective communication can ramp up quickly to maximally use all network bandwidth and complete close to the ideal transfer completion time.</t>
  <t>Traffic Management systems including Traffic Engineering (TE), Load Balancing and Multipathing too benefit from CSIG. TE systems infer congested flows through an offline multi-minute process via superimposition of network traffic stats, topology and routing information. With CSIG, TE has more up to date information on the congested points and the application flows experiencing congestion. Using such finer-grained information can lead to more efficient and timely provisioning for bursty traffic. Similarly, CSIG-enabled multipathed transport flows can choose paths in real time with the most available bandwidth.</t>
  <t>Troubleshooting and Performance Optimization. We also envision CSIG to assist with debugging the network-level performance of datacenter applications. Large-scale applications, including ML training workloads, open thousands of connections at the transport layer. When the network is slow for an application, it is almost impossible to identify the bottleneck hops without joining many data sources across switches and hosts. Because CSIG conveys the path bottleneck characteristics, it is valuable in pinpointing choke points in the network. Knowledge of these choke points can lead to better bandwidth provisioning, timely repair processes, and real-time control, such as better load balancing.</t>
</list></t>

<t>CSIG  provides simple, fixed-length summaries of bottleneck links along a path, such as maximum hop delay, minimum available bandwidth, and maximum link utilization. Information is collected at L2 from network devices along a packet path. Each data receiver then returns the collected information to the data sender via L4 transport options or payloads. CSIG uses a simple compare-and-replace operation at network devices, which allows it to scale with network topology, link speeds, and packet rates.</t>

<t>CSIG builds on the successful aspects of prior explicit feedback schemes, but is more capable. CSIG carries rich multi-bit switch telemetry in live data packets, drawing from the advancements in in-band network telemetry, also generally known as INT. At the same time, CSIG retains the fixed-size headers and reflection in L4 transports akin to Explicit Congestion Notification (ECN). The industry has three key variants of INT: the one first specified in P4.org <xref target="P4-INT"></xref>, the IOAM (In Situ Operations, Administration, and Maintenance) standard <xref target="RFC9378"></xref> in IETF and the Inband Flow Analyzer (IFA) spec <xref target="I-D.kumar-ippm-ifa"></xref> that is used in HPCC deployment <xref target="HPCCPLUS"></xref>. While they differ in the header definitions and encapsulation mechanisms, they all commonly stack up multiple per-switch telemetry data per-hop in the path of a packet. The packet size grows proportional to the metrics per switch and the number of forwarding devices along its path. Depending on the use case and header definition, the per-packet overhead ranges from 20B to above 100B. The large and variable size header overhead incurs challenges in end-to-end MTU limit conformation and parsing of the packet header data in the forwarding or receiving devices.</t>

<t>There exist several efforts to address the challenges incurred in INT variants, including: 1) carrying INT data in synthetically generated non-data packets also known as probe packets, and 2) carrying only the fixed-size INT instructions (e.g., specifying which data to collect per hop) in data packets, while hop devices generate separate report packets that deliver the requested per-hop data. While these techniques reduced the per-data-packet overhead, they did not fundamentally reduce the total amount of bytes or PPS overhead on the network devices or the data collector. TCP-INT <xref target="TCP-INT"></xref> was developed in parallel to carry fixed-size min/max/sum aggregate metric over the hops together with a hop locator in live data packets. However, it is limited to TCP Options, hence not applicable to various modern transports for AI/HPC, and furthermore there is no flexible way to introduce a new metric. CSIG&#39;s type-value format ensures a constant size overhead with future-proofness. The guaranteed constant size is small enough to fit into the 4B or 8B tag, enabling the unique placement of CSIG in L2, which frees the operators from the concerns around tunneling and encryption in deploying CSIG.</t>

<t>In the rest of the document, we describe the design of end-to-end CSIG at hosts and network devices.</t>

<section anchor="terminology"><name>Terminology</name>

<dl>
  <dt>ABW:</dt>
  <dd>
    <t>Available Bandwidth</t>
  </dd>
  <dt>AQM:</dt>
  <dd>
    <t>Active Queue Management</t>
  </dd>
  <dt>CCA:</dt>
  <dd>
    <t>Congestion Control Algorithms</t>
  </dd>
  <dt>Connection / Flow:</dt>
  <dd>
    <t>A 5-tuple transport connection, e.g. TCP connection</t>
  </dd>
  <dt>CSIG:</dt>
  <dd>
    <t>Congestion Signaling</t>
  </dd>
  <dt>CSIG data fields:</dt>
  <dd>
    <t>Fields in the CSIG tag excluding the TPID.</t>
  </dd>
  <dt>CSIG packets:</dt>
  <dd>
    <t>Packets that contain the CSIG-tag and optionally the CSIG reflection header</t>
  </dd>
  <dt>CSIG-capable path:</dt>
  <dd>
    <t>Path is termed CSIG-capable if all transit devices along the path support the CSIG protocol and end hosts have at least pass-through support for CSIG packets</t>
  </dd>
  <dt>CSIG-tagged packets:</dt>
  <dd>
    <t>Packets that contain the CSIG-tag in the packet header</t>
  </dd>
  <dt>CSIG-domain:</dt>
  <dd>
    <t>Secure network deployment domain where all devices in the domain have complete CSIG support or pass-through CSIG support</t>
  </dd>
  <dt>PD:</dt>
  <dd>
    <t>Per-hop delay</t>
  </dd>
  <dt>E2E:</dt>
  <dd>
    <t>End-to-End</t>
  </dd>
  <dt>IPSec:</dt>
  <dd>
    <t>Internet Protocol Security</t>
  </dd>
  <dt>MTU:</dt>
  <dd>
    <t>Maximum Transmission Unit</t>
  </dd>
  <dt>MSS:</dt>
  <dd>
    <t>Maximum Segment Size</t>
  </dd>
  <dt>NIC:</dt>
  <dd>
    <t>Network Interface Card</t>
  </dd>
  <dt>Packet Path:</dt>
  <dd>
    <t>The port-by-port network path taken by a given packet specified as a sequence of device interfaces</t>
  </dd>
  <dt>PSP:</dt>
  <dd>
    <t>PSP Security Protocol</t>
  </dd>
  <dt>TPID:</dt>
  <dd>
    <t>Tag Protocol ID</t>
  </dd>
  <dt>TE:</dt>
  <dd>
    <t>Traffic Engineering</t>
  </dd>
  <dt>Transit device:</dt>
  <dd>
    <t>Any switch, router or middlebox in the path of a CSIG packet</t>
  </dd>
  <dt>WRR:</dt>
  <dd>
    <t>Weighted Round Robin</t>
  </dd>
</dl>

</section>
</section>
<section anchor="assumptions"><name>Design Principles</name>

<t>CSIG was conceived to address problems in congestion control, traffic management and network debuggability in production networks.  We describe below the design principles that shaped CSIG, with simplicity and ease of deployment being at the forefront. <xref target="designrationale"/> discusses the rationale behind the specific design choices made in CSIG.</t>

<t><list style="symbols">
  <t>Simple Signals driven by Use Cases: Simple device port or queue
metrics that solve concrete use cases are at the heart of CSIG&#39;s
design principles.  This simplicity is not only important to
applications, but also keeps the area, power and cost of
implementation low on network devices.  Signals in CSIG are designed to be implementable in ASICs at line rate.  Signals that track per-flow state at the switch, for example, are harder to implement and deploy, and are hence avoided in CSIG.  CSIG is also flexible enough to accommodate new signals and use cases beyond those
described in this document.</t>
  <t>End-to-End Perspective: CSIG&#39;s design stems from an end-to-end perspective of requirements and trade-offs for both applications and the network. This document covers the necessary end-to-end aspects and the resulting design choices that make CSIG both useful to applications and practical to deploy.</t>
  <t>Small and Fixed Packet Overhead: It is important that the packet
size does not increase as it traverses the network, which means
that the MTU does not need to be changed.  Any overhead that is
introduced should be fixed and small, minimizing the cost
of implementation in switch / NIC pipelines.  Low protocol overhead
also means low bandwidth overhead for small packets, minimizing
impact to packet-per-second (PPS) load and bandwidth efficiency.
We make very few assumptions about which packets and devices CSIG
is enabled on.  Device implementations must be able to process CSIG on packets at line rate with minimal CPU involvement.  Keeping the
overhead small and fixed allows for CSIG to be enabled on every
single packet at line rate.  This is important because deployments may choose to enable CSIG on every packet rather than on a small sample of packets.</t>
  <t>Works easily under Tunneling and Encryption: Tunnels are broadly used in modern deployments e.g., Traffic-engineering systems and Cloud traffic frequently use tunnels. CSIG is designed to easily support end-to-end signaling on devices even in the presence of complex tunneling deployments. This is in contrast to other in-band telemetry schemes that put more pressure on the ASICs to relocate metadata across inner and outer headers to work in the presence of tunnels. In addition, CSIG also works with encrypted packets, including PSP, IPSec and 802.1AE MAC Security.</t>
  <t>Incremental Deployability: CSIG allows incremental deployment, where the mechanism can be deployed gradually into domains where some devices may support the new protocol and others may not.  This document addresses interoperability in heterogeneous networks, and addresses backward compatibility with legacy devices. We envision CSIG to be broadly valuable across wired networks, although our target domain for initial usage is datacenter networks. We make minimal assumptions about the network architecture around tunneling, number of hops (diameter), routing, topology etc. Configuring CSIG for end-to-end consistency in a private network, or deployments over the Internet are not in scope for this document.</t>
</list></t>

</section>
<section anchor="conventions"><name>Conventions</name>

<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; in this document are to be interpreted as described in RFC 2119 <xref target="RFC2119"></xref>. 
In this document, these words will appear with that interpretation only when in ALL CAPS. Lower case uses of these words are not to be    interpreted as carrying significance described in RFC 2119.</t>

</section>
<section anchor="csigprotocol"><name>Congestion Signaling Protocol</name>

<t>CSIG protocol defines two components in the packet header to achieve
end to end congestion signaling in a production network.</t>

<t><list style="symbols">
  <t>CSIG-tag: An L2 protocol that end hosts and transit devices
participate in.</t>
  <t>CSIG Reflection: A flexible L4+ protocol that only end hosts
participate in.</t>
</list></t>

<t>CSIG-tag is the core component of the CSIG specification.  It enables
end hosts to request network signals of interest and for transit
devices to provide these signals to end hosts over the specified
packet header bits.</t>

<t>However, to achieve end-to-end CSIG, CSIG-tag MAY be combined with
the CSIG reflection protocol to expose the signals of interest to the
relevant endpoints or consumers where the signals are needed.</t>

<t>This section first describes the header formats for CSIG-tag and CSIG
reflection.  Then it describes the life of a CSIG packet, outlining
the different roles of network devices in the context of CSIG, and
how these two packet header mechanisms work together to achieve end-
to-end signaling.</t>

<section anchor="csighdr"><name>CSIG-tag Header Format</name>

<t>CSIG tag is a fixed size tag at the layer 2 header.</t>

<t>CSIG-tag placement in various packet encapsulations is shown below
for completeness.  It is always the last tag in the layer 2 header.</t>

<t>ARPA:  dstmac / srcmac / csig-tag / ethertype / payload</t>

<t>802.1q:  dstmac / srcmac / vlan-tag / csig-tag / ethertype / payload</t>

<t>802.1ad:  dstmac / srcmac / vlan-tag / vlan-tag / csig-tag /
ethertype / payload</t>

<t>802.1ad tunnel:  dstmac / srcmac / vlan-tag / vlan-tag / vlan-tag /
vlan-tag / csig-tag / ethertype / payload</t>

<t>802.1ae:  dstmac / srcmac / security-tag / vlan-tag / csig-tag /
ethertype / payload</t>

<t>Consequently, the placement / offset of the CSIG tag is not affected
by the headers and payload at layers 3 and above. Layer 2.5 headers, such as MPLS, are also placed after the CSIG tag and do not impact its offset.</t>

<t>CSIG-tag is defined in two variants - Compact and Expanded. Each variant has a dedicated TPID codepoint to allow devices to infer which variant is in use.
Each variant supports a distinct set of requirements with respect to production deployment and identifies contrasting trade-off points in the solution space. Deployment considerations are discussed in <xref target="incrementaldeployment"/>.</t>

<t>Structurally, the compact CSIG-tag variant resembles a single VLAN tag and the expanded CSIG-tag variant resembles a double VLAN tag. This structural similarity is intentional and the reasons are elaborated in <xref target="backwardcompatibility"/>.</t>

<section anchor="compactcsig"><name>Compact Format</name>

<t>CSIG-tag compact format is as shown, with 2B allocated for the CSIG Tag Protocol ID (TPID) and 2B allocated for the data fields.</t>

<figure title="CSIG-tag Compact version" anchor="compactcsigfig"><artwork><![CDATA[
   0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             TPID              |  T  |R|    S    |      LM     |       
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |0-15|  TPID  : IEEE allocated Tag Protocol ID for 4 Byte CSIG tag
   |16-18| T     : Signal Type (0:min(ABW), 1: min(ABW/C), 2:max(PD))
   |19|    R     : Reserved
   |20-24| S     : Signal Value: Bucketed (32 configurable buckets)
   |25-31| LM    : Locator Metadata of bottleneck device / port
]]></artwork></figure>

</section>
<section anchor="expandedcsig"><name>Expanded Format</name>

<t>CSIG-tag expanded format is as shown, with 2B allocated for the Tag Protocol ID (TPID) and 6B allocated for the data fields</t>

<figure title="CSIG-tag Expanded version" anchor="expandedcsigfig"><artwork><![CDATA[
   0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             TPID              |               LM              |       
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
   |   T   |                  S                    |       R       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |0-15|  TPID : IEEE allocated Tag Protocol ID for 8 Byte CSIG tag
   |16-31| LM   : Locator Metadata of bottleneck device / port
   |0-3|   T    : Signal Type (0:min(ABW), 1: min(ABW/C), 2:max(PD))
   |4-23|  S    : Signal Value: Uniformly quantized
   |24-31| R    : Reserved for future use
]]></artwork></figure>

</section>
<section anchor="csig-tag-data-fields-description"><name>CSIG-tag Data fields Description</name>

<t>This section describes the format and usage of data fields within the CSIG-tag</t>

<section anchor="signal-type"><name>Signal Type</name>

<t>The Signal Type field T is three (four) bits long in the compact
(expanded) format and indicates the type of signal being carried in
the CSIG-tag.  End hosts set the signal type T and request it on each packet of interest.  Up to 8 signal types are supported in the compact
format, and up to 16 signal types are supported in the expanded
format.  This draft concretely defines three signals: min(ABW),
min(ABW/C) and max(PD), elaborated in <xref target="signals"/> and <xref target="usecases"/>. The remaining codepoints are reserved for future signals, and may be defined and used in future versions of CSIG.</t>

<t>A single packet can carry at most one Congestion Signal.  However,
end hosts MAY obtain multiple signals for a single 5-tuple flow by
requesting different signal types on alternating packets of a flow or
in a round-robin fashion across packets.  Therefore, end hosts need
not tie a single flow to a specific signal type, and MAY obtain all
supported CSIG signals for a single flow.</t>

</section>
<section anchor="signal-value"><name>Signal Value</name>

<t>The Signal Value field S is 5 bits (20 bits) long in the compact
(expanded) format and captures the value of the signal specified by
Signal Type T.  End hosts set the initial Signal Value S alongside
the requested Signal Type T, and each transit device along the packet
path in the network MAY modify S in accordance with the e2e signal
being computed.  E.g., For signals that are min() aggregations, end
hosts set the initial value of S to the maximum allowable value of
the signal or its encoding thereof, and transit devices perform
compare-and-replace to compute the min() across signals of individual
devices on the packet path.</t>

<t>In the compact format, the 5-bit Signal Value is bucketed with 32 fully configurable buckets. Each bucket is configured with (low, high) value range. This configuration is specific to each Signal Type and MAY vary across Signal Types.  This allows the Signal Value representation to be tailored to the specific needs of each Signal Type.  For example, in typical use cases of available bandwidth, it is more useful to have higher granularity at lower values of the signal (i.e., when ABW is close to 0) than at higher values of the signal.  This is because lower values of ABW have greater impact on application control decisions e.g., knowing whether there was 0 Gbps vs 1 Gbps available on a path makes a larger difference than knowing if there was 399 Gbps vs 400 Gbps available.  <xref target="encodings"/> shows how the buckets could be defined in order to provide such a non-linear encoding of value-ranges to buckets.  Such configurable encodings allow capturing useful information about the signal with fewer bits and is a core feature of the compact CSIG format.</t>

<t>In the expanded format, Signal Value is uniformly quantized into a 20
bit value.  The unit of quantization is configurable on a per Signal
Type basis, depending on the minimum and maximum value that needs to
be represented with the given bits.  The higher bit length allows for
enhanced signal granularity and fewer configuration knobs in domains
where the expanded CSIG format is viable to deploy (<xref target="greenfield"/>).  20-bits are sufficient to represent a wide range of values with high granularity. As an example, with a 8Mbps quantum for min(ABW), the signal value field can represent up to a max of 8Tbps. With a 128ns quantum for max(PD), the signal value field can represent up to a max of 128ms. More discussion on signal-specific quanta is in <xref target="encodings"/>.</t>

<t>Signal quantization / bucketing parameters are configured directly at
the transit devices where the signal is computed.  End hosts do not
explicitly request or negotiate these parameters. As described in <xref target="signals"/>, all devices MUST be configured with the same quantization / bucketing parameters for each signal type, in order to correctly compute the requested signal along packet paths.</t>

</section>
<section anchor="locatormetadata"><name>Locator Metadata</name>

<t>Locator Metadata field LM is an optional 7 bits (16 bits) in the
compact (expanded) format.  It captures relevant metadata about the
bottleneck port or device, where the notion of bottleneck is specific
to individual signal types.  Locator Metadata MAY include compressed
attributes about the bottleneck that is relevant for the use case
e.g., capacity of the bottleneck port, stage of the bottleneck device
in the data center topology, orientation of the bottleneck port -
uplink / downlink.  LM MAY also include expanded attributes of the bottleneck (e.g., port ID, TTL). This document provides recommendations for the type of information that locator metadata MAY carry, but it does not require any specific set of metadata to be supported.  Metadata that is useful and viable to support will depend on the production setting, which is out of scope for this document.  Instances of CSIG deployment MAY include locator metadata with custom-defined metadata beyond those described in this document.  <xref target="lmimplementation"/> discusses requirements for supporting LM in devices.</t>

<t>End hosts initialize LM to a default value.  Transit devices that do
not update the Signal Value S on a given packet MUST NOT alter LM on
the packet.  Transit devices that update S on a packet MUST update
LM on the same packet.</t>

</section>
</section>
</section>
<section anchor="csig-reflection-header-format"><name>CSIG Reflection Header Format</name>

<t>CSIG reflection enables consumption of tag data fields at the point
where the signals are needed for telemetry or control.  This
mechanism is particularly relevant for sender-driven / source-based
telemetry and control.  For receiver-driven transports and
controllers, CSIG reflection may not be necessary as the signals on
the CSIG tag are available at the receiver without reflection (See
<xref target="lifeofapacket"/>).</t>

<t>This document provides recommendations on how CSIG reflection SHOULD
be implemented, and provides the framework to make the implementation
deployment-specific.</t>

<t>CSIG reflection header is a separate header from the CSIG tag,
implemented at layer 4 or above.  The location of the header and the
choice of which packets carry the header are transport-specific.  As
an example, the header can be carried on TCP ACK packets from the
receiver back to the sender.  Note that the presence of ACK
coalescing, piggybacked ACKs, Selective Acknowledgements (SACK) etc.
can impact the behavior of CSIG reflection.  More generally, there
may not be a 1:1 mapping between forward and reverse path packets.
In a scenario where the transport implements ACK coalescing, the CSIG
reflection header SHOULD reflect the latest CSIG-tag data fields
received across the packets being acknowledged or a more advanced
summary of the CSIG-tag data fields across the packets being
acknowledged.  It is important to note that since Signal Type is
chosen on a per-packet granularity, a coalesced ACK may acknowledge
multiple packets that carry different signal types in their CSIG-
tags.  In such a scenario, the reflection header MAY only reflect one
of the signals.  The sender transport should choose Signal Type for packets in a way that ensures that it can continue to receive all signals of interest.</t>

<t>CSIG reflection header MAY include all of the CSIG data fields i.e.,
2B for the compact version and 6B for the expanded version.  However,
one could optimize header space and include only a subset of the data
fields if the consumer is interested only in a subset of signals or
locator metadata.</t>

<t>CSIG reflection is an end-host-only protocol and transit devices do
not participate in it.  Therefore, CSIG reflection header can be
incorporated in portions of the packet that are e2e encrypted via PSP
or IPSec.</t>

<t>The following subsections discuss locations in the packet header
where CSIG reflection could be implemented for different transports</t>

<section anchor="reflection-in-tcp"><name>Reflection in TCP</name>

<t>Reflection in TCP is typically achieved via TCP options. CSIG Reflection can be implemented via a new TCP Option, identified by a unique Kind.</t>

<figure title="CSIG Reflection TCP Option" anchor="reflectiontcp"><artwork><![CDATA[
   0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Kind     |    Length     |       CSIG data fields         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

   Kind              : Unique codepoint to recognize TCP CSIG option
   Length            : Length in bytes of the CSIG data fields 
                       carried in the options payload
   CSIG data fields  : Values reflected from receiver to sender
]]></artwork></figure>

</section>
<section anchor="reflection-in-non-tcp-transports"><name>Reflection in non-TCP Transports</name>

<t>Several transports such as QUIC <xref target="RFC9000"></xref> and PonyExpress <xref target="PONYEXPRESS"></xref> are built atop UDP. Reflection in UDP can be achieved by including CSIG data fields in the UDP payload from receiver to sender. For unidirectional UDP traffic, an out-of-band reverse connection from the receiver to the sender may be necessary for CSIG reflection.</t>

<t>As an example, PonyExpress <xref target="PONYEXPRESS"></xref> is a custom transport implemented within a userspace host networking stack. It supports a flexible L4 wire protocol that periodically changes as new features are added (Sec 3.1 in Snap). CSIG reflection can be implemented as additional bytes within this wire format.</t>

<figure title="PonyExpress CSIG Reflection header" anchor="reflectionudp"><artwork><![CDATA[
                   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6                                
                   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                   |    Flags    | CSIG data fields|
                   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>For simplicity and to avoid the need for negotiation, the CSIG reflection header can be carried on all packets independent of whether CSIG is enabled on them. The <spanx style="verb">Valid</spanx> bit in the Flags field can be set to 1 for packets that carry valid data fields in the reflection header. In certain deployments, negotiation is unavoidable for a variety of reasons. <xref target="negotiation"/> provides details regarding options for negotiation.</t>

</section>
</section>
<section anchor="lifeofapacket"><name>CSIG Operation - Life of a packet</name>

<t>This section describes the end-to-end operation of CSIG with the
walkthrough of the life a packet.  It assumes that all nodes in the path are CSIG-capable and omits the negotiation phase.  Details of negotiation are covered in 
in <xref target="negotiation"/></t>

<figure title="Life of a CSIG packet. Underlined values show the forward path bottlenecks 
for the corresponding signal types" anchor="walkthrough"><artwork><![CDATA[
                            Forward Path
     --------------------------------------------------------->

     <---------------------------------------------------------
                            Reverse Path

+------+   +-----+   +------+  +------+  +------+  +-----+   +------+
| Host +---+ ToR +---+ Aggr +--+ Core +--+ Aggr +--+ ToR +---+ Host |
+------+   +-----+   +------+  +------+  +------+  +-----+   +------+

        C:   800G      100G      100G      100G      40G

      ABW:   100G       95G       70G       90G      20G
                                                     ---
    ABW/C:  12.5%       95%       70%       90%      50%
            -----
        D:   10us       3us      18us       5us      8us
                                 ----
]]></artwork></figure>

<section anchor="forward-path"><name>Forward Path</name>

<t>The sender end-host first constructs a CSIG-tagged packet for a flow of interest and sends out the packet with the tag data fields initialized. The transport determines these initial values for the packet, including Signal Type to request and default values for the other data fields.  Each transit device performs a compare-and-replace on the CSIG-tag to optionally update the Signal Value and Locator Metadata fields on the tag.  As the packet traverses through the network, the CSIG-tag data fields accumulate the desired aggregation of the requested signal.</t>

</section>
<section anchor="reverse-path"><name>Reverse Path</name>

<t>When the CSIG-tagged packet reaches the receiver end-host, the data fields in the CSIG tag are extracted and delivered to the transport layer at the receiver.  The transport stores the data fields of the packet to be reflected, or a summary of these fields across packets.  It reflects these data fields in the layer-4 CSIG reflection header on packets traversing the reverse path from receiver to sender. The CSIG reflection header is unmodified as the packet travels from receiver to sender.  The sender extracts the CSIG data fields from the CSIG reflection header of the incoming packet, and hands it to the transport layer for use in applications at the sender.  As a result, the sender transport learns the desired signal for a flow within approximately one round-trip time.</t>

</section>
<section anchor="multiple-signals"><name>Multiple signals</name>

<t>The transport layer has a significant role to play in making CSIG usable. Although the CSIG data fields are carried on packets, the measurements are ultimately relevant at the flow / connection level for specific paths. 
If the sender transport desires to obtain multiple signals for the same flow, it MAY choose Signal Type on a per-packet basis (e.g., in a round robin fashion across the flow&#39;s packets), and internally keep
track of all of the requested signals as part of the flow&#39;s state
variables.  This approach allows the sender transport to use all supported CSIG signals for use cases such as congestion control, load balancing and multipathing.</t>

</section>
</section>
<section anchor="device-roles"><name>Device Roles</name>

<t>CSIG has three participating entities, each with their own roles and
responsibilities for achieving end-to-end congestion signaling.</t>

<section anchor="sender-host"><name>Sender host</name>

<t>The sender host is responsible for</t>

<t>(i) Constructing CSIG-tagged packets for flows of interest and initializing the CSIG-tag data fields on each packet as specified by the transport, and</t>

<t>(ii) Parsing the CSIG reflection header received in incoming packets
and extracting CSIG data fields for use in the sender transport / applications.</t>

<t>Only the sender is allowed to insert CSIG-tags into packets.</t>

</section>
<section anchor="transit-device"><name>Transit device</name>

<t>Transit devices are responsible for</t>

<t>(i) Computing and tracking Congestion signals such as ABW and ABW/C of each port and hop delay per packet</t>

<t>(ii) Parsing the CSIG-tag based on the TPID code point on incoming
packets to identify the Signal type being requested, and</t>

<t>(iii) Performing compare-and-replace on the Signal value and locator
metadata fields on the CSIG-tag based on the aggregation
corresponding to the requested signal type (min / max)</t>

<t>Transit devices MUST NOT add CSIG tags to incoming packets that are
not already CSIG-tagged.  Transit devices MAY delete the CSIG tag
before forwarding the packet.  This functionality can be exercised
when downstream devices are not CSIG-capable.  Further discussion on
this topic is in <xref target="incrementaldeployment"/> on Incremental Deployment of CSIG.</t>

</section>
<section anchor="receiver-host"><name>Receiver host</name>

<t>The receiver host is responsible for</t>

<t>(i) Extracting the CSIG-tag on incoming packets and exposing the data
fields to the transport layer and/or receiver-driven applications</t>

<t>(ii) Inserting and populating the CSIG Reflection header at the
transport layer for packets traversing the reverse path to the
sender.</t>

</section>
<section anchor="host-roles-for-bidirectional-flows"><name>Host roles for bidirectional flows</name>

<t>Note that for bi-directional flows, the Sender and Receiver are
specific to each direction within the flow.  For a bi-directional
flow between hosts A and B,</t>

<t>(i) A plays the Sender host role and B plays the Receiver host role
for data packets traveling from A to B, and similarly</t>

<t>(ii) B plays the Sender host role and A plays the Receiver host role
for data packets traveling from B to A.</t>

<t>In this scenario, packets traversing from A to B contain both a CSIG-
tag that captures the congestion signals on the forward A--&gt;B path,
and a CSIG reflection header that captures the CSIG data fields of
the reverse B--&gt;A path.  Equivalently, packets traversing from B to A
contain both a CSIG-tag that captures the congestion signals on the
forward B--&gt;A path, and a CSIG reflection header that captures the
CSIG data fields of the reverse A--&gt;B path</t>

</section>
</section>
</section>
<section anchor="signals"><name>Signals in CSIG</name>

<t>As described in the previous section, Signal Type indicates the type
of congestion signal that CSIG-tag carries on each packet.  Up to
8 signal types are supported by the compact format and up to 16
signal types are supported by the expanded format.</t>

<t>In this section, we concretely define three signals driven by use
cases described in <xref target="usecases"/>.  While <xref target="usecases"/> covers how these three
signals are useful to applications, this section focuses on precise
definitions of these signals and how they may be implemented on
transit devices.</t>

<t>Note for future extensions: Signals in CSIG are intended to be aggregation functions of
individual per-hop or per-port signals across the path of a packet.
The typical definition of such signals with max / min aggregations
captures the notion of a path bottleneck for different definitions of
bottleneck.  However, structurally, the format supports arbitrary read-modify-write operations, including aggregations such as max, min, count and sum, allowing future use cases to leverage this structure for new signals.</t>

<section anchor="minimum-available-bandwidth-minabw"><name>Minimum Available Bandwidth - min(ABW)</name>

<t>min(ABW) captures the minimum absolute available bandwidth (in bps) across all the ports in the packet path. Available bandwidth is defined per egress port on each device.</t>

<section anchor="abwcomputation"><name>ABW Computation</name>

<t>ABW can be computed using one of many algorithm variants, each having implications on HW or SW implementation complexity, timescales of computation and accuracy of the signal. 
In its rudimentary form, the raw ABW for a given egress port <spanx style="verb">p</spanx> over a time interval <spanx style="verb">delta_t</spanx> can be computed as follows:</t>

<figure><artwork><![CDATA[
// delta_txbit is the number of bits that exited on the wire 
utilization_bps[p] = (delta_txbit[p]) / delta_t; 
// capacity_bps[p] captures the link speed of port p
abw_bps[p] = capacity_bps[p] - utilization_bps[p];
]]></artwork></figure>

<t>Implementation of these computations relies on at least one of the following capabilities in the devices:</t>

<t><list style="symbols">
  <t>Timer-based computations: Most networking ASICs maintain hardware counters that track the number of bits that exit on each egress port. To compute available bandwidth, a periodic-timer thread in SW or HW triggers the computation and update of available bandwidth every <spanx style="verb">delta_t</spanx> time interval , where  <spanx style="verb">delta_t</spanx> is a configurable parameter.</t>
  <t>Per-packet computations: In this alternative, available bandwidth is computed and updated on every packet that is processed via the egress pipeline, typically in HW e.g., via Exponential Weighted Moving Average (EWMA) estimation where the weights are configurable. <spanx style="verb">delta_t</spanx> is not an explicit parameter in this approach, and is implicitly determined by EWMA weights.</t>
</list></t>

<t>Variants such as Discounted Rate Estimator (DRE) <xref target="CONGA"/> use a combination of per-packet updates and timer-based approaches.</t>

</section>
</section>
<section anchor="maximum-link-utilization-maxuc-or-minabwc"><name>Maximum link utilization - max(U/C) or min(ABW/C)</name>

<t>ABW/C captures the fraction or percentage of available bandwidth on a given link relative to the link&#39;s capacity.  min(ABW/C) captures the link utilization bottleneck along the path of the packet. This signal is most relevant in paths with heterogeneous link speeds, where it distinguishes itself from min(ABW). min(ABW/C) is equivalent to max(U/C), where</t>

<figure><artwork><![CDATA[
U = utilization of a given egress port in bps
C = capacity of a given egress port in bps
ABW = available bandwidth of a given egress port in bps
]]></artwork></figure>

<t>Therefore, max(U/C) = max (1 - ABW/C) = 1 - min(ABW/C)</t>

<section anchor="abwc-computation"><name>ABW/C Computation</name>

<t>ABW/C can be computed from ABW as follows:</t>

<figure><artwork><![CDATA[
// Represents fraction of available bandwidth on port p
// relative to the port's capacity.
abwc_frac[p] = abw_bps[p] / capacity_bps[p];
]]></artwork></figure>

<t>Algorithms for ABW computation described in <xref target="abwcomputation"/> also apply to ABW/C computation, except that the resulting value is normalized by the port capacity. Quantization / bucketing is performed after normalization.</t>

</section>
<section anchor="minabw-vs-minabwc-bottlenecks"><name>min(ABW) vs min(ABW/C) bottlenecks</name>

<t>On paths with heterogeneous link speeds, min(ABW) and min(ABW/C) bottlenecks are not necessarily the same ports. Figure 2 shows an example where these two bottlenecks are different. Each type of bottleneck has its own value, as demonstrated in <xref target="usecases"/>.</t>

</section>
</section>
<section anchor="shared-requirements-for-minabw-and-minabwc"><name>Shared requirements for min(ABW) and min(ABW/C)</name>

<section anchor="algorithm-requirements"><name>Algorithm Requirements</name>

<t>To support min(ABW) or min(ABW/C) in CSIG, the device SHOULD support raw ABW computation with a configurable delta_t, and MAY support additional algorithms such as EWMA or DRE. This requirement enables the consistent interpretation of <spanx style="verb">timescale</spanx> over which available bandwidth is computed. This consistent interpretation allows end-hosts to tune their control decisions based on this timescale e.g., in relation to the flow&#39;s RTT.</t>

</section>
<section anchor="timescale-and-accuracy-requirements"><name>Timescale and Accuracy Requirements</name>

<t>CSIG does not set strict requirements on the delta_t values to be
supported by the implementation, except that it SHOULD be
configurable to cover the range of RTTs in the network e.g., {10us, 100us, 1ms, 10ms, 100ms, 1s etc.}.  Although one
would expect all devices on a packet path to compute ABW at similar
timescales to provide a consistent path-wide view, CSIG does NOT set
strict requirements on the consistency of delta_t parameters chosen
across the devices of a packet path.  Choices of signal accuracy and
timescales are a function of the use case and are not enforced by
CSIG.  End hosts MAY use EWMA across packets of a flow to calculate
ABW or ABW/C over a longer timescale when CSIG on each packet carries
ABW or ABW/C over shorter timescales.  This technique is useful when
flows traversing a given egress port span a wide range of RTTs while
ABW computation over the egress port is fixed to a chosen timescale
at each transit device.</t>

</section>
<section anchor="bucketing-quantization-requirements"><name>Bucketing / Quantization Requirements</name>

<t>The computed ABW or ABW/C values MUST be compressed to fit in the available Signal value bits on the CSIG-tag. The device MUST support 32 fully configurable ABW buckets and ABW/C buckets for compact CSIG, and configurable quanta for uniform quantization in expanded CSIG. All devices along the packet path MUST be configured with the same buckets / quanta per signal type in order to correctly compute min(ABW) or min(ABW/C) along the path. <xref target="encodings"/> provides examples of these configurations.</t>

<t>Each transit device performs a compare-and-replace, i.e., updates the signal value on the CSIG tag if the incoming ABW or ABW/C signal value on the packet is higher than the device&#39;s locally computed ABW or ABW/C value for the packet&#39;s egress port, post bucketization / quantization. E.g.,</t>

<figure><artwork><![CDATA[
// Update the signal value on packet if current hop is the bottleneck
pkt->csig_tag->abw = min(pkt->csig_tag->abw, egr_port->abw)
]]></artwork></figure>

</section>
<section anchor="qos-requirements"><name>QoS requirements</name>

<t>min(ABW) and min(ABW/C) are unambiguous signals with low implementation complexity on network devices. For simplicity, these definitions intentionally do NOT distinguish across QoS classes that may share the egress port. Available bandwidth per QoS class on an egress port is complex to define and meaningfully interpret since it depends on the scheduling policy (Strict Priority / WRR / Deficit WRR), buffer carving configuration and other policies (e.g., AQM) associated with QoS. <xref target="usecases"/> describes the applications of min(ABW) and min(ABW/C) as defined. We leave QoS-based variations of these signals and their potential use cases as future work.</t>

</section>
</section>
<section anchor="maximum-per-hop-delay-maxpd"><name>Maximum Per-hop Delay - max(PD)</name>

<t>max(PD) captures the maximum per-hop delay experienced by a packet among all the hops in the packet path. Per-hop delay PD is the time spent by the packet in the device pipeline. It MAY include link layer delays or it MAY only include the delays observed in the forwarding pipeline.</t>

<section anchor="per-hop-delay-computation"><name>Per-hop Delay Computation</name>
<t>Unlike ABW and ABW/C which are per-port signals, PD is a per-packet signal. It consists of PHY, MAC and switch pipeline delay experienced by the packet. Pipeline delay is the most relevant component as it captures congestion related queueing delay. Device implementations MAY track ingress and egress timestamps explicitly for each packet and perform a diff in the final stages of the pipeline. Precise definitions of these stages depend on the architecture of the device. For example, some devices could leverage existing timestamping support from tail timestamping capabilities for this purpose.</t>

</section>
<section anchor="requirements"><name>Requirements</name>

<section anchor="algorithm-requirements-1"><name>Algorithm Requirements</name>

<t>To support max(PD) in CSIG, the device SHOULD support per-packet tracking of delay experienced through the device.</t>

</section>
<section anchor="accuracy-requirements"><name>Accuracy Requirements</name>

<t>It is desirable to have minimal gaps in the components of packet delays captured by the device. However, CSIG does NOT set strict requirements on the accuracy of PD to be supported by the implementation.</t>

</section>
<section anchor="bucketing-quantization-requirements-1"><name>Bucketing / Quantization Requirements</name>

<t>The computed delay values MUST be compressed to fit in the available Signal value bits on the CSIG-tag. The device MUST support 32 fully configurable delay buckets for compact CSIG, and configurable quanta for uniform quantization in expanded CSIG. All devices along the packet path MUST be configured with the same buckets / quanta to correctly compute max(PD) along the path.</t>

<t>Each transit device performs a compare-and-replace, i.e., updates the signal value on the CSIG tag if the incoming delay signal value on the packet is lower than the device&#39;s locally computed delay for the packet, post bucketization / quantization. E.g.,</t>

<figure><artwork><![CDATA[
// Update the signal value on packet if current hop is the bottleneck
pkt->csig_tag->pd = max(pkt->csig_tag->pd, device->pkt->pd)
]]></artwork></figure>

</section>
<section anchor="qos-requirements-1"><name>QoS requirements</name>
<t>Delay experienced by the packet on a device, as defined, is implicitly a QoS-specific signal. This is because the packet is subject to QoS policies as it traverses through the device pipeline, including prioritization, scheduling and buffering. For example, a high priority packet may see smaller delays than low priority packets. Therefore, the delay measured for the packet SHOULD include components in the pipeline where QoS policies are applied.</t>

</section>
</section>
</section>
<section anchor="lmimplementation"><name>Locator Metadata Implementation</name>

<t>Locator metadata (LM) captures information about the bottleneck
device or port, as described in <xref target="locatormetadata"/>.  In this section, we
discuss requirements for supporting LM in CSIG, and provide
recommendations for commonly useful attributes to carry in LM.</t>

<section anchor="requirements-1"><name>Requirements</name>

<t>A single deployment MAY choose a subset of the attributes in
<xref target="attributes"/> and/or newly defined attributes beyond those listed in
<xref target="attributes"/> to include in LM.  However, the total size of the individual attributes MUST be within 7 bits for Compact CSIG and within 16 bits for Expanded CSIG.</t>

<t>CSIG does not set strict requirements on the LM internal format i.e.,
how the individual attributes are organized among the available LM
bits.  However, this LM internal format MUST be consistent across
devices in the deployment domain so that the end hosts can
consistently interpret these bits.  The LM internal format MAY be
specific to each signal type.</t>

<t>Devices SHOULD support configuring per-port values for LM to be
written on the CSIG-tag.  Devices MAY provide more granular
configurability of LM based on Signal type as well.  CSIG packets
egressing on a given port that have their Signal Value updated by the
device MUST be updated with the LM corresponding to the port and
Signal Type.</t>

</section>
<section anchor="attributes"><name>Attributes</name>

<t>Attributes can be designed to capture the level of resolution desired
by use cases for pinpointing the bottleneck.  Attributes may be
encoded to fit within the limited number of LM bits available in
CSIG.</t>

<t>We separate the list of attributes into compact attributes and
expanded attributes.  Compact attributes are motivated by the
limited number of LM bits available in Compact CSIG, and therefore
capture only the essential information about the bottleneck that is
necessary for the use cases i.e., to inform control decisions or
telemetry.  Expanded attributes provide higher resolution information
about the bottleneck, and can aid in directly pinpointing bottleneck
devices or ports.  Expanded attributes typically require more bits and
are hence more suited for Expanded CSIG.</t>

<t>Examples of attributes are listed below.</t>

<section anchor="compact-attributes"><name>Compact Attributes</name>

<t><list style="symbols">
  <t>Link capacity: Encodes the capacity of the bottleneck link.  In
typical deployments, the number of link speeds deployed is a small
set, can be encoded using &lt;= 5 bits.</t>
  <t>Stage of the bottleneck: Encodes the stage of the topology where
the bottleneck device / port is located.  For example, in a
5-stage clos topology, the stage of the device can be encoded with
3 bits.</t>
  <t>Link orientation: Encodes the direction of a port in the context
of the network topology.  For example, with three categories -
uplinks, downlinks and side-links - link orientation can be
encoded using 2 bits.</t>
</list></t>

</section>
<section anchor="expanded-attributes"><name>Expanded Attributes</name>

<t><list style="symbols">
  <t>Port ID: Encodes a unique identifier for each port within a
deployment domain.</t>
  <t>Device ID: Encodes a unique identifier for each device within a
deployment domain.</t>
  <t>TTL (Time-to-live): Captures the TTL value of the packet at the
bottleneck device, represented using 8-bits.  End hosts can use
this attribute to infer the hop number at which the packet was
bottlenecked.</t>
</list></t>

<t>LM attributes and encoding schemes are ultimately deployment specific
and use-case specific.  CSIG supports a flexible specification of LM
to accommodate a variety of requirements and future applications.</t>

</section>
</section>
</section>
</section>
<section anchor="incrementaldeployment"><name>Incremental Deployment of CSIG.</name>

<t>Most production networks are heterogeneous, with a mix of network
devices across generations.  This document addresses the brownfield
deployment of CSIG in a heterogeneous network, where there may be a
mix of devices that offer varying degrees of support for CSIG packet
construction and processing.</t>

<section anchor="csig-stripping-a-per-egress-port-primitive"><name>CSIG Stripping: A per egress-port primitive</name>

<t>Before describing incremental deployment, we introduce the idea of
CSIG stripping, an action primitive which is foundational to
deploying CSIG in a heterogeneous environment.</t>

<t>Devices that support CSIG MUST be capable of removing the CSIG tag
before forwarding the packet.  Devices MUST allow configuring CSIG-
stripping on a per egress-port basis.  If a port is configured to
strip CSIG, then all CSIG-tagged packets that egress on this port
must have the tag removed before being forwarded.</t>

<t>In the following sections, we describe how this capability can enable
incremental deployment.</t>

</section>
<section anchor="levelsofcsigsupport"><name>Levels of CSIG Support</name>

<t>We first classify devices into three simplified categories based on
their level of CSIG support.  In the subsequent sections we describe
how CSIG can interoperate with each category of device.  Note that
the level of support is a function of the tag placement and whether
the compact or expanded CSIG tag format is used as shown in
<xref target="csighdr"/>.</t>

<section anchor="discard"><name>Discard</name>

<t>Devices in this category are not capable of recognizing or parsing
CSIG tagged packets.  If such packets are received, they will simply
be dropped.</t>

</section>
<section anchor="pass-through"><name>Pass-through</name>
<t>Devices in this category are able to recognize and parse CSIG tagged
packets, and transparently forward the packet with the tag intact or
with the tag stripped to neighboring devices (in the case of transit devices) or to the end host transport layer (in the case of end hosts).  However, they do not support updating the
CSIG data fields on the tag.</t>

<t>Some devices that do not natively support CSIG may be configured to
support pass-through mode for CSIG if they support VLAN tags with
configurable TPIDs.  This is discussed in more detail in 
<xref target="backwardcompatibility"/>.</t>

</section>
<section anchor="complete"><name>Complete</name>
<t>Devices in this category support the complete CSIG protocol,
including recognition, parsing, forwarding, tag-stripping, signal
computation, and signal updates on the tag.  However, only a subset
of signal types may be supported.</t>

<section anchor="software-assisted-support"><name>Software-assisted support</name>
<t>It is noteworthy that in some devices that do not natively support
CSIG, resources available for VLAN tag processing can be repurposed
to support CSIG for certain signal types using a combination of
software and hardware capabilities.  We refer to this level of
support as software-assisted support.  This capability is discussed
in more detail in <xref target="backwardcompatibility"/>.</t>

</section>
<section anchor="native-support"><name>Native support</name>
<t>Devices that natively support CSIG are explicitly equipped with the
hardware capabilities required to implement the CSIG protocol.</t>

<t>A CSIG domain is a deployment domain where all network devices have complete support or pass-through support for CSIG.</t>

</section>
</section>
</section>
<section anchor="interoperability-in-brownfield-deployments"><name>Interoperability in Brownfield Deployments</name>

<t>In this section, we first define the requirements for CSIG
Interoperability in brownfield deployments. Then, we consider devices with all levels of support described in <xref target="levelsofcsigsupport"/> and describe how these devices MAY be configured to achieve interoperability. Note that the following descriptions apply separately to both Compact and Expanded CSIG-tags.</t>

<texttable title="Interoperability with devices having different levels of CSIG support" anchor="tab-interop">
      <ttcol align='left'>Device category</ttcol>
      <ttcol align='left'>Interop support</ttcol>
      <c>Discard</c>
      <c>Upstream devices must strip CSIG tags before packets reach this device</c>
      <c>Pass-through support only</c>
      <c>Device may strip tag or transparently forward with tag unmodified depending on e2e signal accuracy requirements</c>
      <c>Native CSIG support</c>
      <c>Device updates CSIG-tag as per protocol</c>
      <c>SW-assisted CSIG support</c>
      <c>Device updates CSIG-tag using VLAN match/action with approximate signals computed in S/W agent</c>
</texttable>

<section anchor="requirements-for-interoperability"><name>Requirements for interoperability</name>

<t>Forwarding: The fundamental requirement is that no CSIG-tagged packet
should be dropped in the network due to a lack of CSIG support on a
device.  This requirement means packets with CSIG-tags MUST never
reach devices in the Discard category, or MUST have their CSIG-tag
stripped before reaching such devices.</t>

<t>Negotiation: End hosts / flows SHOULD ensure that the path (including
end hosts and transit devices) is CSIG-capable before enabling CSIG-
tagging on packets.  Devices in the Discard category should not require any changes in order to achieve negotiation. This requirement is to ensure correctness of data fields in end-to-end CSIG operation, and to interoperate with legacy devices or software stacks.</t>

</section>
<section anchor="forwarding"><name>Forwarding</name>

<t>To achieve forwarding interoperability requirements for CSIG, CSIG
stripping may be exercised as shown below</t>

<t><list style="symbols">
  <t>When a neighboring device connected to a given egress port is a
Discard device and cannot parse CSIG packets, this egress port
MUST be configured to strip the tag on outgoing packets to ensure
that the packet does not get dropped downstream.</t>
  <t>When a device supports Pass-through only or does not support the
requested signal type on a CSIG packet, egress ports on this
device MAY be configured to strip the tag on outgoing packets to
ensure that CSIG does not carry inaccurate information.  In some
use cases where it is acceptable for CSIG to miss capturing
signals on certain hops, pass-through devices MAY transparently
forward the packet with the CSIG tag intact.</t>
  <t>At the boundary of a CSIG domain, device ports that are connected to devices outside of the CSIG domain MUST strip the tag to ensure that packets exiting the domain do not contain CSIG-tags.  Only egress ports connected to devices within the CSIG domain SHOULD retain CSIG-tags on outgoing packets.</t>
</list></t>

<t>CSIG packets and non-CSIG packets can be used together in a
brownfield setting.  This requirement means that end hosts MUST be
capable of transmitting and receiving both CSIG packets and non-CSIG
packets, including for the same flow.  A packet marked with CSIG-tag
at the sender host may arrive at the receiver host without the tag.
In addition, Compact CSIG and Expanded CSIG packets may be used
together on the same network.</t>

</section>
<section anchor="negotiation"><name>Negotiation</name>

<t>Support for sending and receiving CSIG-tagged packets may require
software and/or hardware changes on transit devices and end hosts.
In many deployments, particularly those requiring hardware upgrades
to support CSIG (such as Switch or NIC support), version stragglers
continue to exist for long time horizons for a variety of reasons,
and interoperability with such stragglers is a critical requirement.
Without negotiation for CSIG capability, devices that are not CSIG-
compliant may drop CSIG packets and thus blackhole traffic.
Negotiating for CSIG-capability of a path is critical to ensure that
CSIG protocol operates safely end-to-end in a brownfield
deployment.</t>

<t>A path is considered CSIG-capable if end-hosts have at least Pass-through CSIG support and transit devices have Complete CSIG support (native or software-assisted).  Before sending CSIG-tagged packets on a network flow, end-hosts must negotiate for path CSIG-capability.  We discuss one approach to negotiation for path CSIG-capability, which involves two parts: negotiation for transit device support and negotiation for end host support.</t>

<section anchor="negotiation-for-transit-device-support"><name>Negotiation for transit device support</name>

<t>In this section, we describe one simple approach to negotiate CSIG support on transit devices with CSIG stripping.</t>

<t>CSIG stripping can be used to implicitly achieve negotiation by
removing the CSIG-tag from the packet header at or before devices on
the packet path that do not have the desired level of CSIG support.
If the receiver end host receives a CSIG-tagged packet, it serves as
an explicit indication that all devices on the packet path, including
transit devices and end-hosts, have the desired CSIG support.  If the
receiver end host receives a packet without a CSIG-tag, it is an
indication that one or more devices do not have the desired CSIG
support, or that the packet was not tagged at the sender to begin with.  This indication can be implicitly reported to the sender via an
empty / invalid CSIG reflection header and the sender can determine
whether the packet path was CSIG-capable.</t>

<t>This approach assumes that
each device has knowledge about the level of CSIG support in its
immediate neighboring devices, which is viable through configuration in typical private SDN networks. In the absence of centralization, mechanisms such as a new LLDP TLV may be defined to advertise aspects of CSIG support on the device, including compact vs expanded CSIG-tag support, signal types that are supported, pass-through vs complete support etc. We leave the details of such an LLDP extension for future extensions of the protocol.</t>

</section>
<section anchor="explicitneg"><name>Negotiation for end host support</name>

<t>A sender end host may need to explicitly negotiate with the remote end-host to ensure that the host networking stack at the remote host has the desired level of CSIG support.  Ideally such explicit CSIG negotiation should be performed during or before
the initial connection handshake, after which CSIG is enabled /
disabled on packets post connection establishment. It may also be necessary to explicitly negotiate the use of CSIG Reflection in transports, separately from the negotiation for path CSIG-capability. For example, in TCP, negotiation is required to use the CSIG Reflection TCP Option. We leave the details of such negotiation schemes for future extensions of the protocol.</t>

</section>
</section>
</section>
<section anchor="backwardcompatibility"><name>Backward Compatibility via Software-assisted CSIG</name>

<t>Transit devices without native CSIG support MAY participate in CSIG
protocol via a Software-assisted approach.  This allows brownfield
deployments to reap incremental benefits of CSIG without having to
upgrade a significant fraction of device HW on their networks.</t>

<t>Since compact and expanded CSIG tags are structurally similar to
single VLAN-tags and double VLAN-tags respectively, VLAN resources in
a transit device can be repurposed to support CSIG updates.  More
specifically, configurable TPIDs for VLAN tags can be used to treat
CSIG tags as VLAN tags, and VLAN match/action resources for tag
updates in the device can be leveraged to support updating CSIG data
fields on the tag.</t>

<t>For signals such as ABW and ABW/C, a software agent running on the
CPU of a transit device can periodically compute these signals based
on hardware byte counters, and program VLAN match/action rules in the
dataplane to update CSIG data fields based on the computed signals.
Since the match/action rules are in the dataplane, CSIG packets can
be processed at line rate without CPU involvement.  However the
match/action rules themselves can be updated at a slower cadence via
the software agent.</t>

<t>Compact CSIG is designed to enable software-assisted backward
compatibility while operating within the constraints of commonly
available VLAN resources on transit devices.  Backward compatibility
via software is a fundamental feature in the design of Compact CSIG.</t>

<t>Note that it may not be possible to track signal types such as hop
delay per packet in a software agent.  However, approximations of the
signal based on available hardware counters and registers (such as
latency histograms) can be implemented in the agent if software-
assisted support is desired for such signal types.</t>

</section>
<section anchor="greenfield"><name>Greenfield deployments</name>

<t>In greenfield deployments of CSIG domains, all devices in the domain
natively support the CSIG protocol.</t>

<t>Expanded CSIG is designed to leverage greenfield deployments where
backward compatibility, negotiation and interoperability are not
requirements.  It provides enhanced signal resolution via higher bit
width for signal values and locator metadata in comparison to Compact
CSIG.  Expanded CSIG can also support up to 16 signal types.</t>

<t>Devices in Greenfield CSIG domains MUST support CSIG stripping at the
domain boundary to ensure that CSIG packets don&#39;t exit the domain.</t>

</section>
</section>
<section anchor="designrationale"><name>Design Rationale</name>

<t>CSIG&#39;s design choices are shaped by an end-to-end perspective of what
matters to applications and where tradeoffs can be made towards
simplicity and practicality.  In this section, we discuss the
rationale behind CSIG&#39;s design and the advantages it provides over
existing state of the art.</t>

<section anchor="whylayer2"><name>Choice of Layer 2</name>

<t>CSIG-tag offsets at layer 2 are independent of headers and payload at
layer 3 and above, which means that only a small set of tag
placement offsets need to be supported for reading and updating the
header.  This makes device implementations of CSIG simpler.  In
contrast, in-band network telemetry schemes implemented at layer 3
or higher require support for a large set of packet formats as this set grows by the cross-product of formats / encapsulations at each layer.  This complexity forces device implementations to restrict support for only a fraction of packet formats / encapsulations, hindering the adoption and deployment of such schemes.  CSIG-tagging, on the other hand, is simpler to support and deploy since it is at layer 2 and has a fixed offset despite various formats / encapsulation at layer 3 and above.</t>

<t>The choice of layer 2 also makes compatibility with in-network tunneling and encryption simpler, which are common features in data center deployments.</t>

<t><list style="symbols">
  <t>CSIG-tags are, by design, compatible with PSP encrypted packets and IPSec encrypted packets, where Layer 4 headers and payloads may be encrypted.</t>
  <t>CSIG tags are carried through Layer 3 tunnels e.g., IP-in-IP, VxLAN, Geneve, at a fixed offset in the packet header. This avoids the need to copy and relocate CSIG tags across inner / outer headers during encapsulation and decapsulation of packets, which would be necessary if implemented instead at layers 3 or higher.</t>
  <t>CSIG tags are placed as the last header in the Layer 2 header stack to ensure compatibility with layer 2 and layer 2.5 tunneled domains as well. The placement of CSIG tags in MACSec and other Layer 2 encapsulations is shown in the table in <xref target="csighdr"/>.</t>
</list></t>

<t>Most in-band network telemetry schemes are not backward compatible.
However, CSIG tag&#39;s structural similarity to VLAN tags enables
backward compatibility with many devices that don&#39;t have native CSIG
support as described in <xref target="backwardcompatibility"/>.  This allows deployments to reap
the benefits of CSIG without having to upgrade a significant portion
of their network hardware.</t>

<t>In addition, since expanded CSIG is limited to 8B, i.e., the size of
double VLAN tags, the packet parsing depth required on devices to
read and process headers at layer 3 and above is not affected.</t>

<t>In summary, the choice of Layer 2 for CSIG-tag is a key part of CSIG&#39;s simplicity and efficiency, since it keeps device implementations simple while supporting multiple encapsulations and backward compatibility.</t>

</section>
<section anchor="separation-of-headers-for-csig-tag-and-reflection"><name>Separation of headers for CSIG-tag and reflection</name>

<t>CSIG&#39;s design separates the CSIG-tag and CSIG reflection headers into
distinct layers.  This decoupling enables end hosts to develop
different transport-specific implementations of CSIG reflection while
sharing the underlying CSIG-tag mechanism.  This means that transit
device behaviors are not impacted by innovations in CSIG reflection.</t>

<t>In addition, this decoupling enables the separate tracking of forward
and reverse path bottlenecks.  This is important since CCAs typically
prefer to react to congestion on the forward path only and not react
to congestion on the reverse path.  In contrast, in-band schemes that
mix signaling and reflection into the same header do not provide
distinctions between forward and reverse path.</t>

</section>
<section anchor="fixed-size-headers"><name>Fixed-size headers</name>

<t>CSIG&#39;s fixed-size headers constitute less than 0.2% bandwidth
overhead in packets with 4k or 9k MTU.  This means that there is no need for fragmentation or increasing MTU size for the purposes of supporting multiple congestion signals. Furthermore, the performance of network device packets per second (PPS) is minimally impacted by the inclusion of CSIG tag and reflection headers.</t>

<t>The low overhead allows CSIG to be enabled on all live data packets
or explicit probe packets or sampled packets.  This is an
important capability because it allows for the direct quantification
of the bottlenecks experienced by the data packets themselves instead
of having to rely on probes.  However, leveraging CSIG on probes or sampled
packets is still an option for deployments that require such
visibility.</t>

<t>CSIG is designed to perform compare-and-replace (or more generally read-modify-write for future extensions), with a fixed size
header.  Therefore, CSIG is not limited by the number of hops in a
network path (i.e., diameter of the network) unlike schemes that
append information at each hop.</t>

</section>
<section anchor="signal-design"><name>Signal Design</name>

<t>CSIG&#39;s signal design focuses on simple, aggregate signals that are
driven by use cases, as demonstrated in <xref target="signals"/> and <xref target="usecases"/>.</t>

<t>CSIG allows a single packet to carry only one congestion signal.  To
obtain multiple signals at the end hosts, it takes advantage of the
fact that the end host can request different signal types across
multiple packets of a flow.  In contrast, other schemes tend to
overload each packet with a lot of information, including metadata
about multiple signals, which can be limiting.  Moreover, CSIG-tag&#39;s
format is also extensible, which means that it can be adapted to
support additional signal types and locator metadata in the future
without compromising the advantages of CSIG&#39;s design.</t>

<t>A unique feature of Compact CSIG&#39;s design is the ability to fully
configure signal value buckets, which allows for efficient signal
representations with a limited number of bits.  For example, the
encodings can be adjusted to provide greater granularity at value
ranges that are more important to the application, and lower
granularity at ranges that are less important.  Similarly, locator
metadata can be efficiently represented by carrying fewer bits of
relevant compressed attributes of the bottleneck that are important
to applications.  Expanded CSIG, on the other hand, uses uniform
signal quantization for more accuracy and provides even more
flexibility in defining signals and locator metadata with a larger
bit width.</t>

</section>
</section>
<section anchor="usecases"><name>Use Cases defined by Bottleneck Signals</name>

<t>The use cases for CSIG are motivated by congestion control, traffic management and network debuggability. These use cases have always
existed in production before CSIG, often using signals that are
measured end-to-end (such as packet loss and delay), or out-of-band
signals from network devices such as port utilization.  CSIG provides
a boost in performance, efficiency and debuggability by augmenting
existing use cases with explicit in-band measurements.</t>

<t>In this document, we present the use cases for the three signals
defined in <xref target="signals"/>.  At the crux of a signal is the definition of
bottleneck.  Over time we envision use cases for other signals that
would define a bottleneck, e.g., the maximum number of co-sharing
flows on a link.  For each of these new signals, locator metadata can
continue to provide attributes about the bottleneck port such as port
capacity.</t>

<section anchor="congestion-control"><name>Congestion Control</name>

<t>CCA can make use of CSIG signals in at least two different ways.
First, existing CCA can use CSIG values to address blindspots in end-
to-end signals such as packet loss, delay, and delivery rates.  This
use case is immediately relevant as most production networks deploy
some form of end-to-end congestion control including Swift <xref target="SWIFT"></xref>,
and BBR <xref target="BBR"></xref>.  A second way to use CSIG is to design entirely new
congestion control algorithms that use CSIG as their primary signal.
We focus below on the former category.</t>

<t>E2E CCA comes in various forms and for simplicity we describe the use
cases taking Swift CC <xref target="SWIFT"></xref> as the baseline.  Swift is delay-based
congestion control that uses accurate round-trip time (RTT)
measurements done via the NIC hardware timestamps.  These signals can
be applied to other CCA and are NOT limited to Swift.</t>

<t>The interpretation and applications of CSIG for congestion control in lossless networks and networks that use packet spraying is a topic for future research.</t>

<section anchor="using-maximum-per-hop-delay-in-e2e-cc"><name>Using maximum per-hop delay in E2E CC</name>

<t>E2E RTT measurements used in Swift include the queueing delays on all
hops along the flows&#39; path, including the forward and reverse paths.
A consequence of using a lumped delay signal is that a flow reduces
its sending rate in response to delays that it may not be able to
directly control. Furthermore, in deployments where there can be multiple congested links along the path of a flow, it is desirable to modulate the sending rate of a flow in response to just the maximum of the per-hop delays, max(PD), along a flows&#39; path.
Replacing the end-to-end measured delay with bottleneck delay into
Swift&#39;s equation yields the following:</t>

<figure><artwork><![CDATA[
// Reduce the congestion window when bottleneck hop delay
// exceeds a chosen target hop delay
if (max(PD) > target_delay) then
  md = beta * (max(PD) - target_delay) / max(PD)
  cwnd = (1 - md) *cwnd
]]></artwork></figure>

<t>Poseidon <xref target="POSEIDON"></xref> is a CC proposed in literature that exemplifies
the use of maximum per-hop delay in reducing its congestion window.
By incorporating bottleneck information in congestion control
response, POSEIDON flows achieve higher flow throughputs in presence
of reverse path congestion, and congestion across multiple network
hops.  Algorithm 1 in <xref target="POSEIDON"></xref> details the use of maximum per-hop
delay in both the increase and the decrease of the congestion window.</t>

</section>
<section anchor="using-maximum-link-utilization-in-e2e-cc"><name>Using maximum link utilization in E2E CC</name>

<t>E2E CC uses heuristics to determine by how much to increase the
congestion window, e.g., in the case of Swift, when the measured
round-trip time is lower than the target delay, Swift increments the
congestion window by one per round-trip time.  BBR <xref target="BBR"></xref> increases
the rate as a function of the flow&#39;s measured delivery rate.</t>

<t>The problem with these heuristics is that they don&#39;t get the rate or
window adjustments just right and either under or overshoot.
Undershooting the rate would mean that transfers take longer to
complete even when the bottleneck link has a low utilization, while
overshooting can cause an unnecessary increase in queueing delay and
packet losses.</t>

<t>In the following example, we integrate the maximum utilization signal
into Swift&#39;s congestion window update equation to ramp up adaptively
faster when the bottleneck link has low utilization.  The congestion
window evolution is represented below:</t>

<figure><artwork><![CDATA[
// Increase congestion window in proportion
// to the utilization headroom
if (rtt < target_rtt) then
  fcwnd <-- fcwnd + additive_increment 
            + kLambda . fcwnd . (1 - max(U/C)) 
]]></artwork></figure>

<t>As an example, the fixed additive increase in Swift of rate &lt;-- rate
+ Additive Increment, means that it takes 200 RTTs to take 80 Gbps of
bandwidth with an Additive Increment of 400 Mbps.  The fast ramp-up
with CSIG using the bottleneck link utilization takes &lt;10 RTTs
to safely ramp to 80 Gbps.</t>

</section>
<section anchor="using-minimum-available-bandwidth-in-e2e-cc"><name>Using minimum available bandwidth in E2E CC</name>

<t>E2E CC uses heuristics to determine the initial transfer rate for
newly established connections.  Starting too slowly would cause the
transfer to take longer than necessary while wasting available
bandwidth, whereas starting too quickly would cause queue delays and
packet drops.  The same dilemma exists for transfers that are
starting on a connection that has been idle for multiple round-trip
times.</t>

<t>In networks where we know ahead of time that the degree of
multiplexing is low i.e., just a handful of flows co-existing on the
link at any point in time, transfers complete quickly when they
&quot;jump-start&quot; to use up all of the bottleneck bandwidth.  This is
especially helpful when transports employ robust loss recovery
mechanisms such that even if the queue overflows, any lost packets
can be quickly recovered.</t>

<t>As an example, on an empty network of 200Gbps, a single transfer can
use up the entire 200Gbps in the second RTT, after the CSIG feedback
in the first RTT indicates the availability of 200Gbps at the
bottleneck link.</t>

<t>CSIG&#39;s min(ABW) bottleneck bandwidth allows transfers to start safely
at line-rate.</t>

</section>
</section>
<section anchor="traffic-management"><name>Traffic Management</name>

<t>CSIG encodes the most notable information about the path for each
flow by carrying bottleneck link signals and bottleneck locator
metadata.  This path-level information, which is obtained directly
from application data packets rather than synthetic probes, is directly
attributable to the flow and is valuable for traffic engineering and
application performance debugging.</t>

<section anchor="load-balancing-and-multipathing"><name>Load Balancing and Multipathing</name>

<t>Datacenter topologies employ a diverse set of paths between any
source-destination pairs.  Transports employ techniques such as
Protective Load Balancing <xref target="PLB"></xref> and Multipathing <xref target="RFC8684"></xref> to spread
traffic across the multitude of paths.  Load balancing and
multipathing in transports use a combination of end-to-end signals
and heuristics to select which paths to use and how much traffic to
channel in each of the paths.</t>

<t>Using CSIG signals from bottleneck links along the diverse set of
paths, load balancing and multipathing schemes can select high
quality paths with lower congestion, and spread traffic across them
in a congestion-aware manner.</t>

<t>Locator metadata can also be used to distinguish between incast congestion and core network congestion, which can then be used to adjust load balancing / multipathing actions. For instance, the stage of the bottleneck and link orientation attributes are enough to determine whether the last hop is the bottleneck or not. When the last hop is the bottleneck, flow-level load balancing / multipathing actions may not be effective and may, in fact, worsen incasts. Such cases may require application-level load balancing or job scheduling techniques to distribute traffic. However, when congestion is instead known to be in the core network, flow-level load balancing / multipathing actions can route around congested areas and improve performance.</t>

</section>
<section anchor="traffic-engineering"><name>Traffic Engineering</name>

<t>Traffic Engineering carves out paths with apt bandwidth across
aggregate source-destination pairs.  Examples within a datacenter
include Datacenter Network Interconnection Layer (DCNI) <xref target="JUPITEREVOL"></xref>.  CSIG can be used to provide
fine-grained path level information, including short timescale microburst congestion, to TE systems.  By using summarized CSIG signals aggregated both spatially and temporally across flows, TE can select paths and balance traffic at the datacenter level to accommodate bursty traffic, e.g., from ML.</t>

</section>
</section>
<section anchor="application-performance-debugging"><name>Application Performance Debugging</name>

<t>Applications often complain that the network is slow, but it can be challenging to identify the specific segment of the network that is causing the problem. This is especially true with the scale of datacenters, where flows can traverse up to nine hops <xref target="JUPITEREVOL"></xref>.  Figuring out where the bottleneck is and the timescales at which the path
poses a bottleneck is like searching for a needle in a haystack for an
application with thousands of flows across various source-destination
pairs.</t>

<t>On application network flows, CSIG information, with its bottleneck
locator, can quickly and precisely answer why the flows are slow and
where the network / path bottlenecks are.</t>

<t>CSIG can also be enabled on mesh prober systems similar to <xref target="PINGMESH"></xref>
to augment end-to-end probe measurements between any two servers with
bottleneck information to aid troubleshooting.</t>

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

<t>Only trusted sender hosts MUST be allowed to construct, initialize and insert a CSIG tag into packets for authorized flows. Based on deployments, the authorization can be done at the NICs or at the switches, akin to firewall rules. CSIG stripping may also be employed as fencing rules at domain boundaries to ensure that unauthorized CSIG-tags are not traversing across these boundaries.</t>

<t>A rogue or broken network-device in a private network might put in arbitrary CSIG values, or insert a CSIG tag in packets on a transit node. We expect there to be checks and balances to identify and take non-functioning or rogue network devices out of a private network, as they can impose greater harm than distributing misleading CSIG values.</t>

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

<t>There are no IANA considerations. CSIG Tag Protocol Identifier (TPID)  is requested from IEEE.</t>

</section>
<section anchor="conclusions"><name>Conclusions</name>

<t>With the increased deployment of applications that are sensitive to delay and bandwidth usage in data centers, e.g., AI/ML/HPC workloads and RDMA based applications, relying solely on end-to-end signals is insufficient under dynamically changing traffic patterns. Simple and timely signals from network devices to end-hosts can augment and optimize end-host transports to make optimal use of datacenter bandwidth. CSIG is a simple, practical and deployable protocol for distributing congestion information in networks that builds on the successful aspects of prior work and is grounded in use-cases of congestion control, traffic management and network debuggability.</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>This work would not be possible without the following individuals whose various engineering and design contributions shaped CSIG and its use cases:</t>

<t>Christopher Alfeld, Neelesh Bansod, Jis Ben, Neal Cardwell, Yongzhou Chen, Yuchung Cheng, Dal Chand Choudhary, Mick Fingleton, Mahmudul Hasan, Jeffrey Ji, Marc De Kruijf, Praveen Kumar, Rich Lane, Chang Liu, Morley Mao, Carl Mauer, Sachin Menezes, Nipen Mody, Masoud Moshref, Alex Rumyantsev, Gerald Schmidt, Arjun Singh, Arjun Singhvi, Babru Thatikunta, Jeff Tikkanen, Frank Uyeda, Brian Vasquez, Rui Wang, Hassan Wassel, Yong Xia, Zhengxu Xia, Kevin Yang, Liangcheng Yu.</t>

<t>We would like to thank Arjun Singh, David Wetherall, Neal Cardwell, Akash Deshpande and Arvind Krishnamurthy for their feedback on several portions of this document.</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='RFC8257'>
  <front>
    <title>Data Center TCP (DCTCP): TCP Congestion Control for Data Centers</title>
    <author fullname='S. Bensley' initials='S.' surname='Bensley'/>
    <author fullname='D. Thaler' initials='D.' surname='Thaler'/>
    <author fullname='P. Balasubramanian' initials='P.' surname='Balasubramanian'/>
    <author fullname='L. Eggert' initials='L.' surname='Eggert'/>
    <author fullname='G. Judd' initials='G.' surname='Judd'/>
    <date month='October' year='2017'/>
    <abstract>
      <t>This Informational RFC describes Data Center TCP (DCTCP): a TCP congestion control scheme for data-center traffic. DCTCP extends the Explicit Congestion Notification (ECN) processing to estimate the fraction of bytes that encounter congestion rather than simply detecting that some congestion has occurred. DCTCP then scales the TCP congestion window based on this estimate. This method achieves high-burst tolerance, low latency, and high throughput with shallow- buffered switches. This memo also discusses deployment issues related to the coexistence of DCTCP and conventional TCP, discusses the lack of a negotiating mechanism between sender and receiver, and presents some possible mitigations. This memo documents DCTCP as currently implemented by several major operating systems. DCTCP, as described in this specification, is applicable to deployments in controlled environments like data centers, but it must not be deployed over the public Internet without additional measures.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8257'/>
  <seriesInfo name='DOI' value='10.17487/RFC8257'/>
</reference>

<reference anchor='RFC9000'>
  <front>
    <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
    <author fullname='J. Iyengar' initials='J.' role='editor' surname='Iyengar'/>
    <author fullname='M. Thomson' initials='M.' role='editor' surname='Thomson'/>
    <date month='May' year='2021'/>
    <abstract>
      <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='9000'/>
  <seriesInfo name='DOI' value='10.17487/RFC9000'/>
</reference>

<reference anchor='RFC3168'>
  <front>
    <title>The Addition of Explicit Congestion Notification (ECN) to IP</title>
    <author fullname='K. Ramakrishnan' initials='K.' surname='Ramakrishnan'/>
    <author fullname='S. Floyd' initials='S.' surname='Floyd'/>
    <author fullname='D. Black' initials='D.' surname='Black'/>
    <date month='September' year='2001'/>
    <abstract>
      <t>This memo specifies the incorporation of ECN (Explicit Congestion Notification) to TCP and IP, including ECN's use of two bits in the IP header. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='3168'/>
  <seriesInfo name='DOI' value='10.17487/RFC3168'/>
</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'/>
    <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='RFC8684'>
  <front>
    <title>TCP Extensions for Multipath Operation with Multiple Addresses</title>
    <author fullname='A. Ford' initials='A.' surname='Ford'/>
    <author fullname='C. Raiciu' initials='C.' surname='Raiciu'/>
    <author fullname='M. Handley' initials='M.' surname='Handley'/>
    <author fullname='O. Bonaventure' initials='O.' surname='Bonaventure'/>
    <author fullname='C. Paasch' initials='C.' surname='Paasch'/>
    <date month='March' year='2020'/>
    <abstract>
      <t>TCP/IP communication is currently restricted to a single path per connection, yet multiple paths often exist between peers. The simultaneous use of these multiple paths for a TCP/IP session would improve resource usage within the network and thus improve user experience through higher throughput and improved resilience to network failure.</t>
      <t>Multipath TCP provides the ability to simultaneously use multiple paths between peers. This document presents a set of extensions to traditional TCP to support multipath operation. The protocol offers the same type of service to applications as TCP (i.e., a reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths.</t>
      <t>This document specifies v1 of Multipath TCP, obsoleting v0 as specified in RFC 6824, through clarifications and modifications primarily driven by deployment experience.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8684'/>
  <seriesInfo name='DOI' value='10.17487/RFC8684'/>
</reference>

<reference anchor='PONYEXPRESS'>
  <front>
    <title>Snap: a microkernel approach to host networking</title>
    <author fullname='Michael Marty' initials='M.' surname='Marty'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Marc de Kruijf' initials='M.' surname='de Kruijf'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Jacob Adriaens' initials='J.' surname='Adriaens'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Christopher Alfeld' initials='C.' surname='Alfeld'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Sean Bauer' initials='S.' surname='Bauer'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Carlo Contavalli' initials='C.' surname='Contavalli'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Michael Dalton' initials='M.' surname='Dalton'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Nandita Dukkipati' initials='N.' surname='Dukkipati'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='William C. Evans' initials='W.' surname='Evans'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Steve Gribble' initials='S.' surname='Gribble'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Nicholas Kidd' initials='N.' surname='Kidd'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Roman Kononov' initials='R.' surname='Kononov'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Gautam Kumar' initials='G.' surname='Kumar'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Carl Mauer' initials='C.' surname='Mauer'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Emily Musick' initials='E.' surname='Musick'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Lena Olson' initials='L.' surname='Olson'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Erik Rubow' initials='E.' surname='Rubow'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Michael Ryan' initials='M.' surname='Ryan'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Kevin Springborn' initials='K.' surname='Springborn'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Paul Turner' initials='P.' surname='Turner'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Valas Valancius' initials='V.' surname='Valancius'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Xi Wang' initials='X.' surname='Wang'>
      <organization>Google, Inc.</organization>
    </author>
    <author fullname='Amin Vahdat' initials='A.' surname='Vahdat'>
      <organization>Google, Inc.</organization>
    </author>
    <date month='October' year='2019'/>
  </front>
  <seriesInfo name='Proceedings of the 27th ACM Symposium on Operating Systems' value='Principles'/>
  <seriesInfo name='DOI' value='10.1145/3341301.3359657'/>
</reference>

<reference anchor='BBR'>
  <front>
    <title>BBR: congestion-based congestion control</title>
    <author fullname='Neal Cardwell' initials='N.' surname='Cardwell'>
      <organization>Google</organization>
    </author>
    <author fullname='Yuchung Cheng' initials='Y.' surname='Cheng'>
      <organization>Google</organization>
    </author>
    <author fullname='C. Stephen Gunn' initials='C.' surname='Gunn'>
      <organization>Google</organization>
    </author>
    <author fullname='Soheil Hassas Yeganeh' initials='S.' surname='Yeganeh'>
      <organization>Google</organization>
    </author>
    <author fullname='Van Jacobson' initials='V.' surname='Jacobson'>
      <organization>Google</organization>
    </author>
    <date month='January' year='2017'/>
  </front>
  <seriesInfo name='Communications of the ACM' value='vol. 60, no. 2, pp. 58-66'/>
  <seriesInfo name='DOI' value='10.1145/3009824'/>
</reference>

<reference anchor='PLB'>
  <front>
    <title>PLB: congestion signals are simple and effective for network load balancing</title>
    <author fullname='Mubashir Adnan Qureshi' initials='M.' surname='Qureshi'>
      <organization>Google</organization>
    </author>
    <author fullname='Yuchung Cheng' initials='Y.' surname='Cheng'>
      <organization>Google</organization>
    </author>
    <author fullname='Qianwen Yin' initials='Q.' surname='Yin'>
      <organization>Google</organization>
    </author>
    <author fullname='Qiaobin Fu' initials='Q.' surname='Fu'>
      <organization>Google</organization>
    </author>
    <author fullname='Gautam Kumar' initials='G.' surname='Kumar'>
      <organization>Google</organization>
    </author>
    <author fullname='Masoud Moshref' initials='M.' surname='Moshref'>
      <organization>Google</organization>
    </author>
    <author fullname='Junhua Yan' initials='J.' surname='Yan'>
      <organization>Google</organization>
    </author>
    <author fullname='Van Jacobson' initials='V.' surname='Jacobson'>
      <organization>Google</organization>
    </author>
    <author fullname='David Wetherall' initials='D.' surname='Wetherall'>
      <organization>Google</organization>
    </author>
    <author fullname='Abdul Kabbani' initials='A.' surname='Kabbani'>
      <organization>Google</organization>
    </author>
    <date month='August' year='2022'/>
  </front>
  <seriesInfo name='Proceedings of the ACM SIGCOMM 2022' value='Conference'/>
  <seriesInfo name='DOI' value='10.1145/3544216.3544226'/>
</reference>

<reference anchor='DCQCN'>
  <front>
    <title>Congestion Control for Large-Scale RDMA Deployments</title>
    <author fullname='Yibo Zhu' initials='Y.' surname='Zhu'>
      <organization>U.C. Santa Barbara, Santa Barbara, CA, USA</organization>
    </author>
    <author fullname='Haggai Eran' initials='H.' surname='Eran'>
      <organization>Mellanox, Yokneam, Israel</organization>
    </author>
    <author fullname='Daniel Firestone' initials='D.' surname='Firestone'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Chuanxiong Guo' initials='C.' surname='Guo'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Marina Lipshteyn' initials='M.' surname='Lipshteyn'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Yehonatan Liron' initials='Y.' surname='Liron'>
      <organization>Mellanox, Yokneam, Israel</organization>
    </author>
    <author fullname='Jitendra Padhye' initials='J.' surname='Padhye'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Shachar Raindel' initials='S.' surname='Raindel'>
      <organization>Mellanox, Yokneam, Israel</organization>
    </author>
    <author fullname='Mohamad Haj Yahia' initials='M.' surname='Yahia'>
      <organization>Mellanox, Yokneam, Israel</organization>
    </author>
    <author fullname='Ming Zhang' initials='M.' surname='Zhang'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <date month='August' year='2015'/>
  </front>
  <seriesInfo name='ACM SIGCOMM Computer Communication Review' value='vol. 45, no. 4, pp. 523-536'/>
  <seriesInfo name='DOI' value='10.1145/2829988.2787484'/>
</reference>

<reference anchor='SWIFT'>
  <front>
    <title>Swift: Delay is Simple and Effective for Congestion Control in the Datacenter</title>
    <author fullname='Gautam Kumar' initials='G.' surname='Kumar'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Nandita Dukkipati' initials='N.' surname='Dukkipati'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Keon Jang' initials='K.' surname='Jang'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Hassan M. G. Wassel' initials='H.' surname='Wassel'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Xian Wu' initials='X.' surname='Wu'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Behnam Montazeri' initials='B.' surname='Montazeri'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Yaogong Wang' initials='Y.' surname='Wang'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Kevin Springborn' initials='K.' surname='Springborn'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Christopher Alfeld' initials='C.' surname='Alfeld'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Michael Ryan' initials='M.' surname='Ryan'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='David Wetherall' initials='D.' surname='Wetherall'>
      <organization>Google LLC</organization>
    </author>
    <author fullname='Amin Vahdat' initials='A.' surname='Vahdat'>
      <organization>Google LLC</organization>
    </author>
    <date month='July' year='2020'/>
  </front>
  <seriesInfo name='Proceedings of the Annual conference of the ACM Special Interest Group on Data Communication on the applications, technologies, architectures, and protocols for computer' value='communication'/>
  <seriesInfo name='DOI' value='10.1145/3387514.3406591'/>
</reference>

<reference anchor='CONGA'>
  <front>
    <title>CONGA: distributed congestion-aware load balancing for datacenters</title>
    <author fullname='Mohammad Alizadeh' initials='M.' surname='Alizadeh'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Tom Edsall' initials='T.' surname='Edsall'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Sarang Dharmapurikar' initials='S.' surname='Dharmapurikar'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Ramanan Vaidyanathan' initials='R.' surname='Vaidyanathan'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Kevin Chu' initials='K.' surname='Chu'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Andy Fingerhut' initials='A.' surname='Fingerhut'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Vinh The Lam' initials='V.' surname='Lam'>
      <organization>Google, Mountain View, CA, USA</organization>
    </author>
    <author fullname='Francis Matus' initials='F.' surname='Matus'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Rong Pan' initials='R.' surname='Pan'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='Navindra Yadav' initials='N.' surname='Yadav'>
      <organization>Cisco Systems, San Jose, CA, USA</organization>
    </author>
    <author fullname='George Varghese' initials='G.' surname='Varghese'>
      <organization>Microsoft, Mountain View, CA, USA</organization>
    </author>
    <date month='August' year='2014'/>
  </front>
  <seriesInfo name='ACM SIGCOMM Computer Communication Review' value='vol. 44, no. 4, pp. 503-514'/>
  <seriesInfo name='DOI' value='10.1145/2740070.2626316'/>
</reference>

<reference anchor='JUPITEREVOL'>
  <front>
    <title>Jupiter evolving: transforming google's datacenter network via optical circuit switches and software-defined networking</title>
    <author fullname='Leon Poutievski' initials='L.' surname='Poutievski'>
      <organization>Google</organization>
    </author>
    <author fullname='Omid Mashayekhi' initials='O.' surname='Mashayekhi'>
      <organization>Google</organization>
    </author>
    <author fullname='Joon Ong' initials='J.' surname='Ong'>
      <organization>Google</organization>
    </author>
    <author fullname='Arjun Singh' initials='A.' surname='Singh'>
      <organization>Google</organization>
    </author>
    <author fullname='Mukarram Tariq' initials='M.' surname='Tariq'>
      <organization>Google</organization>
    </author>
    <author fullname='Rui Wang' initials='R.' surname='Wang'>
      <organization>Google</organization>
    </author>
    <author fullname='Jianan Zhang' initials='J.' surname='Zhang'>
      <organization>Google</organization>
    </author>
    <author fullname='Virginia Beauregard' initials='V.' surname='Beauregard'>
      <organization>Google</organization>
    </author>
    <author fullname='Patrick Conner' initials='P.' surname='Conner'>
      <organization>Google</organization>
    </author>
    <author fullname='Steve Gribble' initials='S.' surname='Gribble'>
      <organization>Google</organization>
    </author>
    <author fullname='Rishi Kapoor' initials='R.' surname='Kapoor'>
      <organization>Google</organization>
    </author>
    <author fullname='Stephen Kratzer' initials='S.' surname='Kratzer'>
      <organization>Google</organization>
    </author>
    <author fullname='Nanfang Li' initials='N.' surname='Li'>
      <organization>Google</organization>
    </author>
    <author fullname='Hong Liu' initials='H.' surname='Liu'>
      <organization>Google</organization>
    </author>
    <author fullname='Karthik Nagaraj' initials='K.' surname='Nagaraj'>
      <organization>Google</organization>
    </author>
    <author fullname='Jason Ornstein' initials='J.' surname='Ornstein'>
      <organization>Google</organization>
    </author>
    <author fullname='Samir Sawhney' initials='S.' surname='Sawhney'>
      <organization>Google</organization>
    </author>
    <author fullname='Ryohei Urata' initials='R.' surname='Urata'>
      <organization>Google</organization>
    </author>
    <author fullname='Lorenzo Vicisano' initials='L.' surname='Vicisano'>
      <organization>Google</organization>
    </author>
    <author fullname='Kevin Yasumura' initials='K.' surname='Yasumura'>
      <organization>Google</organization>
    </author>
    <author fullname='Shidong Zhang' initials='S.' surname='Zhang'>
      <organization>Google</organization>
    </author>
    <author fullname='Junlan Zhou' initials='J.' surname='Zhou'>
      <organization>Google</organization>
    </author>
    <author fullname='Amin Vahdat' initials='A.' surname='Vahdat'>
      <organization>Google</organization>
    </author>
    <date month='August' year='2022'/>
  </front>
  <seriesInfo name='Proceedings of the ACM SIGCOMM 2022' value='Conference'/>
  <seriesInfo name='DOI' value='10.1145/3544216.3544265'/>
</reference>

<reference anchor='PINGMESH'>
  <front>
    <title>Pingmesh: A Large-Scale System for Data Center Network Latency Measurement and Analysis</title>
    <author fullname='Chuanxiong Guo' initials='C.' surname='Guo'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Lihua Yuan' initials='L.' surname='Yuan'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Dong Xiang' initials='D.' surname='Xiang'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Yingnong Dang' initials='Y.' surname='Dang'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Ray Huang' initials='R.' surname='Huang'>
      <organization>Microsoft, Beijing, China</organization>
    </author>
    <author fullname='Dave Maltz' initials='D.' surname='Maltz'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Zhaoyi Liu' initials='Z.' surname='Liu'>
      <organization>Microsoft, Beijing, China</organization>
    </author>
    <author fullname='Vin Wang' initials='V.' surname='Wang'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Bin Pang' initials='B.' surname='Pang'>
      <organization>Microsoft, Redmond, WA, USA</organization>
    </author>
    <author fullname='Hua Chen' initials='H.' surname='Chen'>
      <organization>Microsoft, Beijing, China</organization>
    </author>
    <author fullname='Zhi-Wei Lin' initials='Z.' surname='Lin'>
      <organization>Microsoft, Redmond, USA</organization>
    </author>
    <author fullname='Varugis Kurien' initials='V.' surname='Kurien'>
      <organization>Midfin Systems, Redmond, WA, USA</organization>
    </author>
    <date month='August' year='2015'/>
  </front>
  <seriesInfo name='ACM SIGCOMM Computer Communication Review' value='vol. 45, no. 4, pp. 139-152'/>
  <seriesInfo name='DOI' value='10.1145/2829988.2787496'/>
</reference>


<reference anchor="POSEIDON" target="https://www.usenix.org/conference/nsdi23/presentation/wang-weitao">
  <front>
    <title>Poseidon: Efficient, Robust, and Practical Datacenter CC via Deployable INT</title>
    <author initials="W." surname="Wang" fullname="Weitao Wang">
      <organization></organization>
    </author>
    <author initials="M." surname="Moshref" fullname="Masoud Moshref">
      <organization></organization>
    </author>
    <author initials="Y." surname="Li" fullname="Yuliang Li">
      <organization></organization>
    </author>
    <author initials="G." surname="Kumar" fullname="Gautam Kumar">
      <organization></organization>
    </author>
    <author initials="E." surname="Ng" fullname="Eugene Ng">
      <organization></organization>
    </author>
    <author initials="N." surname="Cardwell" fullname="Neal Cardwell">
      <organization></organization>
    </author>
    <author initials="N." surname="Dukkipati" fullname="Nandita Dukkipati">
      <organization></organization>
    </author>
    <date year="2023"/>
  </front>
</reference>



<reference anchor='I-D.kumar-ippm-ifa'>
   <front>
      <title>Inband Flow Analyzer</title>
      <author fullname='Jai Kumar' initials='J.' surname='Kumar'>
         <organization>Broadcom Inc.</organization>
      </author>
      <author fullname='Surendra Anubolu' initials='S.' surname='Anubolu'>
         <organization>Broadcom Inc.</organization>
      </author>
      <author fullname='John Lemon' initials='J.' surname='Lemon'>
         <organization>Broadcom Inc.</organization>
      </author>
      <author fullname='Rajeev Manur' initials='R.' surname='Manur'>
         <organization>Broadcom Inc.</organization>
      </author>
      <author fullname='Hugh Holbrook' initials='H.' surname='Holbrook'>
         <organization>Arista Networks</organization>
      </author>
      <author fullname='Anoop Ghanwani' initials='A.' surname='Ghanwani'>
         <organization>Dell</organization>
      </author>
      <author fullname='Dezhong Cai' initials='D.' surname='Cai'>
         <organization>AliBaba Inc.</organization>
      </author>
      <author fullname='Heidi Ou' initials='H.' surname='Ou'>
         <organization>AliBaba Inc.</organization>
      </author>
      <author fullname='Yizhou Li' initials='Y.' surname='Li'>
         <organization>Huawei</organization>
      </author>
      <author fullname='Xiaojun Wang' initials='X.' surname='Wang'>
         </author>
      <date day='7' month='September' year='2023'/>
      <abstract>
	 <t>   Inband Flow Analyzer (IFA) records flow specific information from an
   end station and/or switches across a network.  This document
   discusses the method to collect data on a per hop basis across a
   network and perform localized or end to end analytics operations on
   the data.  This document also describes a transport-agnostic header
   definition that may be used for tunneled and non-tunneled flows
   alike.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-kumar-ippm-ifa-07'/>
   
</reference>


<reference anchor='I-D.miao-tsv-hpcc'>
   <front>
      <title>HPCC++: Enhanced High Precision Congestion Control</title>
      <author fullname='Rui Miao' initials='R.' surname='Miao'>
         <organization>Alibaba Group</organization>
      </author>
      <author fullname='Surendra Anubolu' initials='S.' surname='Anubolu'>
         <organization>Broadcom, Inc.</organization>
      </author>
      <author fullname='Rong Pan' initials='R.' surname='Pan'>
         <organization>Intel, Corp.</organization>
      </author>
      <author fullname='Jeongkeun Lee' initials='J.' surname='Lee'>
         <organization>Intel, Corp.</organization>
      </author>
      <author fullname='Barak Gafni' initials='B.' surname='Gafni'>
         <organization>NVIDIA</organization>
      </author>
      <author fullname='Yuval Shpigelman' initials='Y.' surname='Shpigelman'>
         <organization>NVIDIA</organization>
      </author>
      <author fullname='Jeff Tantsura' initials='J.' surname='Tantsura'>
         <organization>NVIDIA</organization>
      </author>
      <author fullname='Guy Caspary' initials='G.' surname='Caspary'>
         <organization>Cisco Systems</organization>
      </author>
      <date day='17' month='May' year='2023'/>
      <abstract>
	 <t>   Congestion control (CC) is the key to achieving ultra-low latency,
   high bandwidth and network stability in high-speed networks.
   However, the existing high-speed CC schemes have inherent limitations
   for reaching these goals.

   In this document, we describe HPCC++ (High Precision Congestion
   Control), a new high-speed CC mechanism which achieves the three
   goals simultaneously.  HPCC++ leverages inband telemetry to obtain
   precise link load information and controls traffic precisely.  By
   addressing challenges such as delayed signaling during congestion and
   overreaction to the congestion signaling using inband and granular
   telemetry, HPCC++ can quickly converge to utilize all the available
   bandwidth while avoiding congestion, and can maintain near-zero in-
   network queues for ultra-low latency.  HPCC++ is also fair and easy
   to deploy in hardware, implementable with commodity NICs and
   switches.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-miao-tsv-hpcc-02'/>
   
</reference>


<reference anchor="HPCCPLUS" target="https://www.broadcom.com/blog/high-precision-congestion-control">
  <front>
    <title>High-precision congestion control (HPCC++) deployment at Alibaba leveraging In-band Flow Analyzer (IFA)</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="P4-INT" target="https://p4.org/p4-spec/docs/INT_v2_1.pdf">
  <front>
    <title>In-band Network Telemetry (INT) Dataplane Specification</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


<reference anchor='TCP-INT'>
  <front>
    <title>TCP-INT: lightweight network telemetry with TCP transport</title>
    <author fullname='Grzegorz Jereczek' initials='G.' surname='Jereczek'>
      <organization>Intel Corporation</organization>
    </author>
    <author fullname='Theo Jepsen' initials='T.' surname='Jepsen'>
      <organization>Intel Corporation</organization>
    </author>
    <author fullname='Simon Wass' initials='S.' surname='Wass'>
      <organization>Intel Corporation</organization>
    </author>
    <author fullname='Bimmy Pujari' initials='B.' surname='Pujari'>
      <organization>Intel Corporation</organization>
    </author>
    <author fullname='Jerry Zhen' initials='J.' surname='Zhen'>
      <organization>Intel Corporation</organization>
    </author>
    <author fullname='Jeongkeun Lee' initials='J.' surname='Lee'>
      <organization>Intel Corporation</organization>
    </author>
    <date month='August' year='2022'/>
  </front>
  <seriesInfo name='Proceedings of the SIGCOMM &apos;22 Poster and Demo' value='Sessions'/>
  <seriesInfo name='DOI' value='10.1145/3546037.3546064'/>
</reference>

<reference anchor='RFC9378'>
  <front>
    <title>In Situ Operations, Administration, and Maintenance (IOAM) Deployment</title>
    <author fullname='F. Brockners' initials='F.' role='editor' surname='Brockners'/>
    <author fullname='S. Bhandari' initials='S.' role='editor' surname='Bhandari'/>
    <author fullname='D. Bernier' initials='D.' surname='Bernier'/>
    <author fullname='T. Mizrahi' initials='T.' role='editor' surname='Mizrahi'/>
    <date month='April' year='2023'/>
    <abstract>
      <t>In situ Operations, Administration, and Maintenance (IOAM) collects operational and telemetry information in the packet while the packet traverses a path between two points in the network. This document provides a framework for IOAM deployment and provides IOAM deployment considerations and guidance.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='9378'/>
  <seriesInfo name='DOI' value='10.17487/RFC9378'/>
</reference>




    </references>



<section anchor="encodings"><name>Example encodings of CSIG signals</name>

<t>The following table demonstrates an example encoding of a 3-bit signal value. Note that this is an example ONLY. The encoding that is meaningful to a certain deployment is specific to the use cases in consideration.</t>

<t>Note that CSIG tag supports 5 bit (20 bit) signal value size for the compact (expanded) formats.</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>min(ABW/C)</ttcol>
      <ttcol align='left'>min(ABW)</ttcol>
      <ttcol align='left'>max(PD)</ttcol>
      <c>0x0</c>
      <c>0%-1%</c>
      <c>0-1Gbps</c>
      <c>0-10us</c>
      <c>0x1</c>
      <c>1%-5%</c>
      <c>1-5Gbps</c>
      <c>10-50us</c>
      <c>0x2</c>
      <c>5%-10%</c>
      <c>5-10Gbps</c>
      <c>50-100us</c>
      <c>0x3</c>
      <c>10%-20%</c>
      <c>10-20Gbps</c>
      <c>100-200us</c>
      <c>0x4</c>
      <c>20%-50%</c>
      <c>20-50Gbps</c>
      <c>200-400us</c>
      <c>0x5</c>
      <c>50%-75%</c>
      <c>50-75Gbps</c>
      <c>400-800us</c>
      <c>0x6</c>
      <c>75%-90%</c>
      <c>75-90Gbps</c>
      <c>800-2000us</c>
      <c>0x7</c>
      <c>90%-100%</c>
      <c>&gt;90 Gbps</c>
      <c>&gt;2000us</c>
</texttable>

</section>

    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
        <name>Contributors</name>
    <contact initials="W." surname="Huang" fullname="Weida Huang">
      <organization>Google LLC</organization>
      <address>
      </address>
    </contact>
    <contact initials="T." surname="Griggs" fullname="Tyler Griggs">
      <organization>UC Berkeley</organization>
      <address>
      </address>
    </contact>
    <contact initials="" surname="MJ Akhbari" fullname="Mohammad Jafar Akhbarizadeh">
      <organization>Google LLC</organization>
      <address>
      </address>
    </contact>
    <contact initials="" surname="JK Lee" fullname="Jeongkeun Lee">
      <organization>Google LLC</organization>
      <address>
      </address>
    </contact>
    <contact initials="S." surname="Anubolu" fullname="Surendra Anubolu">
      <organization>Broadcom Inc.</organization>
      <address>
      </address>
    </contact>
    <contact initials="" surname="KK Yap" fullname="Kok-Kiong Yap">
      <organization>Google LLC</organization>
      <address>
      </address>
    </contact>
    <contact initials="N." surname="Cardwell" fullname="Neal Cardwell">
      <organization>Google LLC</organization>
      <address>
      </address>
    </contact>
    </section>

  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+W9W3Mb19Uo+L5/RZdVqZCfAfAiyZZ5ksyhSMpmTEoMSUUn
41I5DaABdAR0I90NUrCsqXma53mdv3d+yazr3mt3NyU5X07NmRmlKgaB7n1d
9+twOHRN3iyzo+SkLOZZ3eRlkdzk8yJd5sU82Tm5Of9+16XjcZXdwTPwl5uW
kyJdwRvTKp01wyq9y4f5er0aTup8Ptw/cI+SadrA74f7B4fw9/Dgcfur6G/n
6iYtpj+ny7KAr5pqkzmXryv6WDeH+/vf7R+6tMrSo+S8aLKqyBp3Pz9KXmbN
fVm9w3W+kf9+X5WbtXt3H54cnuIq3SRtjpLs/drVm/Eqr2vYZrNdw3TnZ7cv
nJuUU3j9KNnUw7Se5Llb50cJ/HuUTNICvs2StKrSbbKTz5J0uUy2Wb2blFWy
SOtFssiqDHaUDJOmnPCHuqyaKpvV8td2RX8k+MARvgwf9ZEjmmaazdLNsqnh
Cf2dX+LHXbppFmV15BL6N5T/JklewBPHo+QabsF/yddzPF7kVbqKfyor2OX3
ZTlfZsnFxYn/Plul+fIoSfmd6r/O6ZHRpFz1T/lylJxu3r3L12nTnvclXGbe
pD2/f2bygl+cfsnkl9miSTsTl/UinbZ+++yk9NJn5/zzKPlxs0qr1px/TvPW
9zTf86pMpzAWgOFkJD+0Z/5Hmo/e4av/dSxP0+wAi0VT5eNN8+B9vxklP2zS
Yt5ay5ssn6atX/p33xrvdgSIk8/ndWvA2+0yq9o/0YivT5LnWfUuW2bb/iEv
4byO3y3GadUGj8tyka5WcE1/TmdppQ/9kk6zxW9b9Z9/HCUXWda+kAzo2Lts
U0S/fdGAN7DkYjMul5vWmDebKiuA2nV+7t51/8g/wlL/lq5bw/5Yvhv+CIRo
Hv32RUsFDDhJq+l9tly2kSBLl93f2oO6oqxWgJp3GYLY9YuTZ4dPvz1KTk9u
T64S/ua7/f19+fHxwTfP5OPhwcF3+so3z57gx6tXL/929t+urs9ubmCEV+ej
g/3RwcGTp3uPHz85eLx/MHr8+Ol33zz9Fh59/vy69QgQ92eHT3CUi+etn54+
eXJ48M2I/nv4DTxyevKXk5fxQ4fPDr/77tmz0eG3z7598uwJIdnNm/MXt+2V
PPv26cGT0eMn+988/e4AHjp59fL749ZY3z7Z3/92f3T4zeE3sGN46M+vr85v
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
LeRu7p1CVF99dP83yel7v/tBAQA=

-->

</rfc>

