<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY bom    "&#65279;">
  <!ENTITY wd     "&#x2011;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902"
     docName="draft-xu-tsvwg-adaptive-queue-mgmt-00"
     category="std" submissionType="IETF" consensus="true" version="3"
     xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Adaptive Queue Management">
      Adaptive Queue Management Under Congestion
    </title>
    <seriesInfo name="Internet-Draft"
      value="draft-xu-tsvwg-adaptive-queue-mgmt-00"/>

    <author fullname="Bohua Xu" initials="B." surname="Xu">
      <organization>China Unicom</organization>
      <address><postal><city>Beijing</city><code>100000</code>
        <country>China</country></postal>
        <email>xubh15@chinaunicom.cn</email></address>
    </author>
    <author fullname="Chang Liu" initials="C." surname="Liu">
      <organization>China Unicom</organization>
      <address><postal><city>Beijing</city><code>100000</code>
        <country>China</country></postal>
        <email>liuc131@chinaunicom.cn</email></address>
    </author>
    <author fullname="Jie Ren" initials="J." surname="Ren">
      <organization>China Unicom</organization>
      <address><postal><city>Beijing</city><code>100000</code>
        <country>China</country></postal>
        <email>renj30@chinaunicom.cn</email></address>
    </author>
    <author fullname="Chenyang Wen" initials="C." surname="Wen">
      <organization>China Unicom</organization>
      <address><postal><city>Beijing</city><code>100000</code>
        <country>China</country></postal>
        <email>wency15@chinaunicom.cn</email></address>
    </author>
    <author fullname="Wei Cheng" initials="W." surname="Cheng">
      <organization>Centec</organization>
      <address><postal><city>Suzhou</city><code>215000</code>
        <country>China</country></postal>
        <email>chengw@centec.com</email></address>
    </author>
    <author fullname="Junjie Wang" initials="J." surname="Wang">
      <organization>Centec</organization>
      <address><postal><city>Suzhou</city><code>215000</code>
        <country>China</country></postal>
        <email>wangjj@centec.com</email></address>
    </author>
    <author fullname="Guoying Zhang" initials="G." surname="Zhang">
      <organization>Centec</organization>
      <address><postal><city>Suzhou</city><code>215000</code>
        <country>China</country></postal>
        <email>zhanggy@centec.com</email></address>
    </author>
    <author fullname="Yongtao Yang" initials="Y." surname="Yang">
      <organization>Centec</organization>
      <address><postal><city>Suzhou</city><code>215000</code>
        <country>China</country></postal>
        <email>yangyt@centec.com</email></address>
    </author>

    <date year="2026" month="June" day="24"/>
    <area>TSV</area>
    <workgroup>TSVWG</workgroup>
    <keyword>queue management</keyword>
    <keyword>AQM</keyword>
    <keyword>queue depth</keyword>
    <keyword>congestion</keyword>
    <abstract>
      <t>
        Active Queue Management (AQM) manages queue depth
        by controlling packet admission at the point of
        enqueue. This document specifies a complementary
        queue management behavior that operates on packets
        already admitted to a queue: when the queue depth
        exceeds a configurable threshold, the maximum time
        a packet may remain queued before being dropped is
        reduced. When congestion subsides, the duration
        reverts to its base value. This per-queue dropping
        behavior helps manage queue depth during congestion
        by releasing resources from queues where packets
        have been waiting longest, complementing AQM
        without modifying its signaling semantics.
      </t>
    </abstract>
  </front>

  <middle>
    <section anchor="introduction" numbered="true" toc="include">
      <name>Introduction</name>
      <t>
        <xref target="RFC7567"/> recommends the deployment of
        Active Queue Management (AQM) to manage queue depth
        and reduce latency in network devices. AQM operates at
        the point of enqueue: it decides whether to admit, drop,
        or ECN-mark <xref target="RFC3168"/> an arriving packet
        based on current queue state.
        <xref target="RFC7806"/> establishes that queuing and
        dropping are conceptually separate operations that work
        in series. AQM procedures such as CoDel
        <xref target="RFC8289"/> and PIE
        <xref target="RFC8033"/> focus on controlling queue
        depth by signaling congestion to transport endpoints.
      </t>
      <t>
        A related but distinct concern is managing packets that
        have already been admitted to a queue and have been
        waiting for transmission. Each queued packet has a
        maximum queuing duration — the upper bound on how long
        it may remain in the queue before being dropped. In many
        implementations, this duration is a fixed value that
        does not vary with queue state. During sustained
        congestion, packets continue to occupy queue resources
        for the full duration even when their transmission is
        unlikely, delaying the release of resources needed by
        other queues.
      </t>
      <t>
        This document specifies an adaptive queue management
        behavior that addresses this concern: when the queue
        depth exceeds a congestion threshold, the maximum
        queuing duration for packets in that queue is reduced,
        enabling faster resource release. When congestion
        subsides, the duration reverts to its base value. This
        behavior operates within the dropping framework of
        <xref target="RFC7806"/> and complements, rather than
        replaces, AQM.
      </t>
      <t>
        The behavior is specified in terms of externally
        observable characteristics — the per-queue maximum
        queuing duration and the queue-depth thresholds that
        govern its value — rather than any particular
        implementation. This follows the approach used for the
        Differentiated Services per-hop behaviors in
        <xref target="RFC2597"/> and <xref target="RFC3246"/>,
        which likewise define node-local forwarding behavior by
        its observable effect. The behavior is independent of,
        and may be deployed alongside, AQM algorithms such as
        CoDel <xref target="RFC8289"/> and PIE
        <xref target="RFC8033"/>; <xref target="interaction"/>
        describes the considerations when both are active.
      </t>

      <section anchor="scope" numbered="true" toc="include">
        <name>Scope</name>
        <t>
          This document defines a per-queue dropping behavior.
          It does not define new on-the-wire protocol elements,
          packet formats, or congestion signals. The behavior
          is local to the device implementing it and is
          transparent to endpoints.
        </t>
        <t>
          This behavior <bcp14>MUST NOT</bcp14> be used as a
          trigger for ECN marking <xref target="RFC3168"/>.
          Dropping of queued packets due to duration expiry is
          local queue management, not congestion signaling.
        </t>
      </section>

      <section anchor="requirements-language" numbered="true" toc="include">
        <name>Requirements Language</name>
        <t>
          The key words "<bcp14>MUST</bcp14>",
          "<bcp14>MUST NOT</bcp14>",
          "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>",
          "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>",
          "<bcp14>SHOULD NOT</bcp14>",
          "<bcp14>RECOMMENDED</bcp14>",
          "<bcp14>NOT RECOMMENDED</bcp14>",
          "<bcp14>MAY</bcp14>", and
          "<bcp14>OPTIONAL</bcp14>" in this document
          are to be interpreted as described in BCP 14
          <xref target="RFC2119"/> <xref target="RFC8174"/>
          when, and only when, they appear in all capitals, as
          shown here.
        </t>
      </section>
    </section>

    <section anchor="terminology" numbered="true" toc="include">
      <name>Terminology</name>
      <t>
        This document uses terminology consistent with
        <xref target="RFC7567"/> and <xref target="RFC7806"/>.
      </t>
      <dl>
        <dt>Maximum Queuing Duration:</dt>
        <dd>The upper bound on the time a packet may remain in
          a queue before being dropped. This bounds the
          per-packet queuing delay at the device.</dd>
        <dt>Base Duration:</dt>
        <dd>The maximum queuing duration during normal
          (non-congested) operation.</dd>
        <dt>Reduced Duration:</dt>
        <dd>The shorter maximum queuing duration applied when
          the queue depth exceeds the congestion
          threshold.</dd>
        <dt>Congestion Threshold:</dt>
        <dd>The queue depth at which the maximum queuing
          duration transitions from base to reduced.</dd>
        <dt>Restoration Threshold:</dt>
        <dd>The queue depth at which the maximum queuing
          duration reverts from reduced to base. Set lower
          than the congestion threshold to provide
          hysteresis.</dd>
      </dl>
    </section>

    <section anchor="problem-statement" numbered="true" toc="include">
      <name>Problem Statement</name>
      <t>
        Section 3 of <xref target="RFC7567"/> discusses the
        importance of managing queue depth. When a device serves
        multiple output queues with different traffic classes
        <xref target="RFC2474"/>, sustained congestion in one
        queue has broader effects:
      </t>
      <ul>
        <li>Packets unlikely to be transmitted continue to
          occupy queue resources for the full base duration,
          contributing to unnecessarily deep queues.</li>
        <li>Lower-priority queues may hold resources longer
          than higher-priority queues require, delaying
          service for priority traffic.</li>
        <li>Deep queues on congested ports can reduce resource
          availability for queues on other ports.</li>
      </ul>
      <t>
        AQM addresses queue depth by controlling packet
        admission. This document addresses the complementary
        problem: managing packets that have already been
        admitted and are occupying queue resources during
        congestion.
      </t>
    </section>

    <section anchor="behavior" numbered="true" toc="include">
      <name>Behavior</name>

      <section anchor="per-queue-config" numbered="true" toc="include">
        <name>Per-Queue Parameters</name>
        <t>
          Each output queue <bcp14>SHOULD</bcp14> have
          independently configurable parameters:
        </t>
        <ul>
          <li>Base Duration: maximum queuing duration during
            normal operation.</li>
          <li>Reduced Duration: maximum queuing duration during
            congestion. <bcp14>MUST</bcp14> be less than or
            equal to the Base Duration.</li>
          <li>Congestion Threshold: queue depth triggering
            transition to Reduced Duration.</li>
          <li>Restoration Threshold: queue depth triggering
            reversion to Base Duration.
            <bcp14>SHOULD</bcp14> be lower than the Congestion
            Threshold.</li>
        </ul>
      </section>

      <section anchor="threshold-detection" numbered="true" toc="include">
        <name>Queue Depth Threshold Detection</name>
        <t>
          The device monitors the queue depth of each output
          queue per Section 3 of <xref target="RFC7567"/>. When
          the queue depth exceeds the Congestion Threshold, the
          queue enters the congested state. When it falls below
          the Restoration Threshold, the queue returns to the
          non-congested state.
        </t>
        <t>
          The hysteresis between thresholds prevents
          oscillation. Implementations <bcp14>MAY</bcp14>
          additionally require the threshold to be exceeded for
          a configurable minimum interval before transitioning
          (dampening).
        </t>
      </section>

      <section anchor="duration-adaptation" numbered="true" toc="include">
        <name>Duration Adaptation</name>
        <t>
          When a queue enters the congested state, the maximum
          queuing duration for that queue
          <bcp14>MUST</bcp14> be set to the Reduced Duration.
          A packet whose time in the queue has reached or
          exceeded the currently effective maximum queuing
          duration <bcp14>SHOULD</bcp14> be dropped rather than
          transmitted. Because packets are dequeued in order,
          this condition is evaluated at the head of the queue;
          an implementation MAY also evaluate it elsewhere in
          the queue, but is not required to.
        </t>
        <t>
          When a queue returns to the non-congested state, the
          maximum queuing duration <bcp14>MUST</bcp14> revert to
          the Base Duration. Reversion
          <bcp14>SHOULD</bcp14> be applied after a configurable
          hold-down period to avoid oscillation.
        </t>
        <t>
          A packet dropped under this behavior
          <bcp14>MUST NOT</bcp14> have its drop substituted by
          an ECN mark <xref target="RFC3168"/>: unlike AQM
          congestion signaling, a duration-expiry drop indicates
          that the packet is no longer useful to deliver, and an
          ECN mark would not convey that.
        </t>
      </section>

      <section anchor="interaction" numbered="true" toc="include">
        <name>Interaction with AQM</name>
        <t>
          This behavior and an AQM algorithm
          <xref target="RFC7567"/> act at different points: AQM
          acts at enqueue, controlling admission and congestion
          signaling, while this behavior acts on already-queued
          packets at dequeue. Both may drop packets based on
          time in queue. When both are enabled on the same
          queue, the Base Duration <bcp14>SHOULD</bcp14> be set
          no smaller than the target delay of the AQM algorithm,
          so that the Base Duration does not pre-empt normal AQM
          operation under light load and takes effect only as a
          congestion backstop. Operators <bcp14>SHOULD</bcp14>
          monitor the drop counters of both mechanisms
          (<xref target="telemetry"/>) to detect compounded
          loss.
        </t>
      </section>

      <section anchor="per-class" numbered="true" toc="include">
        <name>Per-Class Differentiation</name>
        <t>
          In devices supporting Differentiated Services
          <xref target="RFC2474"/>, parameters
          <bcp14>MAY</bcp14> be differentiated by traffic class.
          Higher-priority classes <bcp14>SHOULD</bcp14> have
          longer Base Durations and less aggressive Reduced
          Durations. The mapping is a local policy decision.
        </t>
        <figure anchor="fig-class-diff">
          <name>Example Per-Class Differentiation</name>
          <artwork type="ascii-art"><![CDATA[
  +---------+----------+-------------------+
  | Traffic | Base     | Reduced           |
  | Class   | Duration | Duration          |
  +---------+----------+-------------------+
  | EF      | D        | 50-75% of D       |
  | AF      | D        | 25-50% of D       |
  | BE      | D        | 10-25% of D       |
  +---------+----------+-------------------+

  D = device default. Values are illustrative.
]]></artwork>
        </figure>
      </section>
    </section>

    <section anchor="telemetry" numbered="true" toc="include">
      <name>Telemetry</name>
      <t>
        Implementations <bcp14>SHOULD</bcp14> expose per-queue:
      </t>
      <ul>
        <li>Current mode (base or reduced).</li>
        <li>Current queue depth.</li>
        <li>Packets dropped due to duration expiry,
          differentiated by mode.</li>
        <li>Number of mode transitions.</li>
        <li>Notifications on mode transitions including queue
          identifier, new mode, queue depth, and
          timestamp.</li>
      </ul>
    </section>

    <section anchor="yang-framework" numbered="true" toc="include">
      <name>Data Model Framework</name>
      <t>
        A future document may define a YANG
        <xref target="RFC7950"/> data model:
      </t>
      <sourcecode type="yang"><![CDATA[
  module: ietf-adaptive-queue-mgmt
    +--rw profiles* [name]
    |  +--rw name                      string
    |  +--rw base-duration             uint32  (microseconds)
    |  +--rw reduced-duration          uint32  (microseconds)
    |  +--rw congestion-threshold      uint32  (percent)
    |  +--rw restoration-threshold     uint32  (percent)
    |  +--rw hold-down                 uint32  (milliseconds)
    +--rw bindings* [interface queue-id]
       +--rw interface            if:interface-ref
       +--rw queue-id             uint8
       +--rw profile              -> /profiles/name
       +--ro state
          +--ro mode              enumeration {base, reduced}
          +--ro depth             uint64
          +--ro drops-by-duration yang:counter64
          +--ro transitions       yang:counter64
]]></sourcecode>
    </section>

    <section anchor="deployment" numbered="true" toc="include">
      <name>Deployment Considerations</name>
      <ul>
        <li>Begin with conservative thresholds (80-90% of queue
          allocation).</li>
        <li>Monitor per-mode drop counters during initial
          deployment.</li>
        <li>For latency-sensitive traffic classes, configure
          longer Reduced Durations.</li>
        <li>When AQM is also enabled, monitor both AQM drop
          counters and duration-based drop counters to avoid
          compounding loss.</li>
      </ul>
    </section>

    <section anchor="security" numbered="true" toc="include">
      <name>Security Considerations</name>
      <t>
        The security considerations of <xref target="RFC7567"/>
        apply. Configuration <bcp14>MUST</bcp14> be restricted
        to authorized administrators via standard access control
        (e.g., <xref target="RFC8341"/>). Telemetry does not
        contain user traffic but may reveal congestion patterns;
        access <bcp14>SHOULD</bcp14> be restricted.
        Implementations <bcp14>SHOULD</bcp14> log mode
        transitions to detect anomalous conditions.
      </t>
    </section>

    <section anchor="iana" numbered="true" toc="include">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>

        <reference anchor="RFC2119"
            target="https://www.rfc-editor.org/info/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"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>

        <reference anchor="RFC8174"
            target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in
            RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B."
                    surname="Leiba"/>
            <date month="May" year="2017"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>

        <reference anchor="RFC7567"
            target="https://www.rfc-editor.org/info/rfc7567">
          <front>
            <title>IETF Recommendations Regarding Active
            Queue Management</title>
            <author fullname="F. Baker" initials="F."
                    surname="Baker" role="editor"/>
            <author fullname="G. Fairhurst" initials="G."
                    surname="Fairhurst" role="editor"/>
            <date month="July" year="2015"/>
          </front>
          <seriesInfo name="BCP" value="197"/>
          <seriesInfo name="RFC" value="7567"/>
          <seriesInfo name="DOI" value="10.17487/RFC7567"/>
        </reference>

        <reference anchor="RFC7806"
            target="https://www.rfc-editor.org/info/rfc7806">
          <front>
            <title>On Queuing, Marking, and Dropping</title>
            <author fullname="F. Baker" initials="F."
                    surname="Baker"/>
            <author fullname="R. Pan" initials="R."
                    surname="Pan"/>
            <date month="April" year="2016"/>
          </front>
          <seriesInfo name="RFC" value="7806"/>
          <seriesInfo name="DOI" value="10.17487/RFC7806"/>
        </reference>
      </references>

      <references>
        <name>Informative References</name>

        <reference anchor="RFC2474"
            target="https://www.rfc-editor.org/info/rfc2474">
          <front>
            <title>Definition of the Differentiated Services
            Field (DS Field) in the IPv4 and IPv6 Headers</title>
            <author fullname="K. Nichols" initials="K."
                    surname="Nichols"/>
            <author fullname="S. Blake" initials="S."
                    surname="Blake"/>
            <author fullname="F. Baker" initials="F."
                    surname="Baker"/>
            <author fullname="D. Black" initials="D."
                    surname="Black"/>
            <date month="December" year="1998"/>
          </front>
          <seriesInfo name="RFC" value="2474"/>
          <seriesInfo name="DOI" value="10.17487/RFC2474"/>
        </reference>

        <reference anchor="RFC2597"
            target="https://www.rfc-editor.org/info/rfc2597">
          <front>
            <title>Assured Forwarding PHB Group</title>
            <author fullname="J. Heinanen" initials="J."
                    surname="Heinanen"/>
            <author fullname="F. Baker" initials="F."
                    surname="Baker"/>
            <author fullname="W. Weiss" initials="W."
                    surname="Weiss"/>
            <author fullname="J. Wroclawski" initials="J."
                    surname="Wroclawski"/>
            <date month="June" year="1999"/>
          </front>
          <seriesInfo name="RFC" value="2597"/>
          <seriesInfo name="DOI" value="10.17487/RFC2597"/>
        </reference>

        <reference anchor="RFC3246"
            target="https://www.rfc-editor.org/info/rfc3246">
          <front>
            <title>An Expedited Forwarding PHB (Per-Hop
            Behavior)</title>
            <author fullname="B. Davie" initials="B."
                    surname="Davie"/>
            <author fullname="A. Charny" initials="A."
                    surname="Charny"/>
            <author fullname="J.C.R. Bennet" initials="J.C.R."
                    surname="Bennet"/>
            <author fullname="K. Benson" initials="K."
                    surname="Benson"/>
            <author fullname="J.Y. Le Boudec" initials="J.Y."
                    surname="Le Boudec"/>
            <author fullname="W. Courtney" initials="W."
                    surname="Courtney"/>
            <author fullname="S. Davari" initials="S."
                    surname="Davari"/>
            <author fullname="V. Firoiu" initials="V."
                    surname="Firoiu"/>
            <author fullname="D. Stiliadis" initials="D."
                    surname="Stiliadis"/>
            <date month="March" year="2002"/>
          </front>
          <seriesInfo name="RFC" value="3246"/>
          <seriesInfo name="DOI" value="10.17487/RFC3246"/>
        </reference>

        <reference anchor="RFC3168"
            target="https://www.rfc-editor.org/info/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"/>
          </front>
          <seriesInfo name="RFC" value="3168"/>
          <seriesInfo name="DOI" value="10.17487/RFC3168"/>
        </reference>

        <reference anchor="RFC7950"
            target="https://www.rfc-editor.org/info/rfc7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M."
                    surname="Bjorklund" role="editor"/>
            <date month="August" year="2016"/>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>

        <reference anchor="RFC8033"
            target="https://www.rfc-editor.org/info/rfc8033">
          <front>
            <title>Proportional Integral Controller Enhanced
            (PIE): A Lightweight Control Scheme to Address the
            Bufferbloat Problem</title>
            <author fullname="R. Pan" initials="R."
                    surname="Pan"/>
            <author fullname="P. Natarajan" initials="P."
                    surname="Natarajan"/>
            <author fullname="F. Baker" initials="F."
                    surname="Baker"/>
            <author fullname="G. White" initials="G."
                    surname="White"/>
            <date month="February" year="2017"/>
          </front>
          <seriesInfo name="RFC" value="8033"/>
          <seriesInfo name="DOI" value="10.17487/RFC8033"/>
        </reference>

        <reference anchor="RFC8289"
            target="https://www.rfc-editor.org/info/rfc8289">
          <front>
            <title>Controlled Delay Active Queue
            Management</title>
            <author fullname="K. Nichols" initials="K."
                    surname="Nichols"/>
            <author fullname="V. Jacobson" initials="V."
                    surname="Jacobson"/>
            <author fullname="A. McGregor" initials="A."
                    surname="McGregor" role="editor"/>
            <author fullname="J. Iyengar" initials="J."
                    surname="Iyengar" role="editor"/>
            <date month="January" year="2018"/>
          </front>
          <seriesInfo name="RFC" value="8289"/>
          <seriesInfo name="DOI" value="10.17487/RFC8289"/>
        </reference>

        <reference anchor="RFC8341"
            target="https://www.rfc-editor.org/info/rfc8341">
          <front>
            <title>Network Configuration Access Control
            Model</title>
            <author fullname="A. Bierman" initials="A."
                    surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M."
                    surname="Bjorklund"/>
            <date month="March" year="2018"/>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgements" numbered="false" toc="include">
      <name>Acknowledgements</name>
      <t>
        The authors acknowledge the IETF's work on queue
        management <xref target="RFC7567"/>
        <xref target="RFC7806"/> which established the
        framework this document builds upon.
      </t>
    </section>
  </back>
</rfc>
