<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-calabria-bmwg-ai-fabric-inference-bench-02" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="AI Inference Fabric Benchmarking">Benchmarking Methodology for AI Inference Serving Network Fabrics</title>
    <seriesInfo name="Internet-Draft" value="draft-calabria-bmwg-ai-fabric-inference-bench-02"/>
    <author initials="F." surname="Calabria" fullname="Fernando Calabria">
      <organization>Cisco</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>fcalabri@cisco.com</email>
      </address>
    </author>
    <author initials="C." surname="Pignataro" fullname="Carlos Pignataro">
      <organization>Blue Fern Consulting</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>carlos@bluefern.consulting</email>
      </address>
    </author>
    <author initials="Q." surname="Wu" fullname="Qin Wu">
      <organization>Huawei</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>bill.wu@huawei.com</email>
      </address>
    </author>
    <author initials="G." surname="Fioccola" fullname="Giuseppe Fioccola">
      <organization>Huawei</organization>
      <address>
        <postal>
          <country>Italy</country>
        </postal>
        <email>giuseppe.fioccola@huawei.com</email>
      </address>
    </author>
    <author initials="S." surname="Reddy" fullname="Sowjanya Reddy">
      <organization>Apple</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>sowjredd@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="June" day="04"/>
    <area>Operations and Management</area>
    <workgroup>BMWG</workgroup>
    <keyword>benchmarking</keyword>
    <keyword>AI</keyword>
    <keyword>inference</keyword>
    <keyword>LLM</keyword>
    <keyword>network fabric</keyword>
    <keyword>RDMA</keyword>
    <keyword>KV cache</keyword>
    <keyword>MoE</keyword>
    <keyword>disaggregated serving</keyword>
    <abstract>
      <?line 83?>

<t>This document defines benchmarking terminology, methodologies, and Key
Performance Indicators (KPIs) for evaluating Ethernet-based AI inference
serving network fabrics. As Large Language Model (LLM) inference deployments
scale to disaggregated prefill/decode architectures spanning hundreds or
thousands of accelerators (GPUs/XPUs), the interconnect fabric becomes the
critical bottleneck determining Time to First Token (TTFT), Inter-Token
Latency (ITL), and aggregate throughput in tokens per second (TPS). This
document establishes vendor-independent, reproducible test procedures for
benchmarking fabric-level performance under realistic AI inference workloads.</t>
      <t>Coverage includes RDMA-based KV cache transfer between disaggregated prefill
and decode workers, Mixture-of-Experts (MoE) expert parallelism AllToAll
communication, request routing and load balancing for inference serving,
congestion management under bursty inference traffic patterns, and scale/soak
testing. The methodology enables direct, equivalent comparison across
implementations, NIC transport stacks (RoCEv2, UET), and fabric architectures.</t>
      <t>This document is a companion to <xref target="TRAINING-BENCH"/>, which addresses training
workloads.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://fcalabri.github.io/bmwg-ai-fabric-inference-bench/draft-calabria-bmwg-ai-fabric-inference-bench.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-calabria-bmwg-ai-fabric-inference-bench/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        BMWG Working Group mailing list (<eref target="mailto:bmwg@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/bmwg/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/bmwg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/fcalabri/bmwg-ai-fabric-inference-bench"/>.</t>
    </note>
  </front>
  <middle>
    <?line 105?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Large Language Model (LLM) inference serving has emerged as a dominant consumer
of datacenter network capacity, with fundamentally different fabric requirements
compared to training workloads. While training workloads are characterized by
bulk synchronous collective operations (AllReduce, AllGather) with predictable
periodicity, inference workloads exhibit bursty, latency-sensitive
request/response patterns with strict Service Level Objectives (SLOs) on
per-token latency and time-to-first-token.</t>
      <t>The advent of disaggregated serving architectures, where the computationally
intensive prefill phase (prompt processing) is physically separated from the
memory-bound decode phase (token generation), introduces a new class of
fabric-critical data movement: KV cache transfer. A single large prompt
processed by a typical large-scale model generates multiple gigabytes of KV
cache state that must be transferred from prefill workers to decode workers
within a fraction of the target TTFT SLO.</t>
      <t>As clusters scale with thousands of concurrent requests, this creates sustained
multi-terabyte-per-second aggregate transfer demands on the fabric.
Simultaneously, Mixture-of-Experts (MoE) architectures introduce expert
parallelism (EP), which distributes expert sub-networks across GPUs and requires
AllToAll communication for token-to-expert routing. Wide EP configurations
(e.g., 96-way EP across 12 nodes of 8 GPUs each) generate fine-grained,
latency-sensitive inter-node traffic that contends with KV cache transfers on
shared fabric links.</t>
      <t>This document defines vendor-independent benchmarking methodologies for
evaluating how well a network fabric supports these inference-specific traffic
patterns. All tests are designed for controlled laboratory environments using
either hardware traffic generators or software workload emulators capable of
reproducing inference serving traffic profiles.</t>
      <section anchor="requirements-language">
        <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>
        <?line -18?>

</section>
      <section anchor="scope-and-applicability">
        <name>Scope and Applicability</name>
        <t>The scope covers Layer 2/3 fabric performance (switch forwarding, link utilization,
 congestion management), RDMA transport performance (one-sided PUT/GET operations
 for KV cache transfer, two-sided SEND/RECV for expert parallelism dispatch), and
the interaction between fabric behavior and application-level inference metrics
 (TTFT, ITL, TPS).</t>
        <t>The DUT boundary for all measurements in this document is defined as the NIC-to-NIC
Ethernet fabric segment — specifically, the path from the point of packet transmission
 by the source NIC Ethernet port to the point of packet reception at the destination NIC
 Ethernet port.</t>
        <t>Intra-node transfer segments (proprietary accelerator interconnects GPU-to-GPU, and PCIe / Compute Express Link (CXL) GPU-to-NIC) are explicitly
OUT OF SCOPE as primary benchmarked entities.  Where intra-node transfer contributes
 measurably to an end-to-end latency measurement (e.g., TTFT decomposition in <xref target="end-to-end-disaggregated-ttft"/>), implementers report intra-node transfer time as a separately labelled component
 so that the fabric contribution can be isolated.  See <xref target="dut-id"/> for DUT boundary diagram.</t>
        <t>The document does NOT address benchmarking of individual accelerator (GPU/XPU) compute performance, model accuracy or quality metrics benchmarking of the inference serving
 software stack in isolation from the fabric.</t>
        <t>All methodologies assume controlled laboratory conditions per BMWG convention.</t>
      </section>
      <section anchor="relationship-to-existing-bmwg-work">
        <name>Relationship to Existing BMWG Work</name>
        <t>This document builds upon the foundational BMWG benchmarking framework
established by <xref target="RFC1242"/>, <xref target="RFC2544"/>, <xref target="RFC2889"/>, and <xref target="RFC6349"/>.</t>
        <t>The test structure follows RFC 2544 conventions for trial duration (minimum 60
seconds), statistical repetition (minimum 20 trials for latency, 50 for burst),
and reporting format (graphical and tabular).</t>
        <t>The methodologies extend RFC 2544 Section 26 benchmarks (throughput, latency,
frame loss rate, back-to-back frames, system recovery, reset) to
inference-specific scenarios including KV cache transfer, expert parallelism
dispatch, and disaggregated serving request routing.</t>
      </section>
      <section anchor="relationship-to-companion-documents">
        <name>Relationship to Companion Documents</name>
        <t>This document is a companion to <xref target="TRAINING-BENCH"/>, which defines benchmarking
methodologies for AI training network fabrics. Both documents share common
terminology, test topology conventions, and reporting formats
(<xref target="reporting"/>). Both documents use the terminology defined in
<xref target="TERMINOLOGY"/>, which provides the common terminology base for AI fabric
benchmarking.</t>
        <t>Where training workloads are dominated by bulk synchronous collective
communication (AllReduce, AllGather) with high bandwidth utilization and
periodic synchronization barriers, inference workloads are dominated by bursty,
latency-sensitive point-to-point transfers (KV cache) and fine-grained AllToAll
dispatch (MoE expert parallelism). Implementers deploying converged fabrics that
serve both training and inference workloads should run both test suites.</t>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>Terminology used in this document is defined in <xref target="TERMINOLOGY"/>. Readers should consult that document before applying the methodology defined here. Where a term overlaps with <xref target="RFC1242"/> or <xref target="RFC8238"/>, the terminology document provides AI fabric context extensions; the foundational definitions in those RFCs remain authoritative for general network benchmarking.</t>
      <t>The following terms are bench-specific extensions used only in this document and are not redefined in <xref target="TERMINOLOGY"/>:</t>
      <table anchor="tab-terminology">
        <name>Bench-Specific Terminology Extensions</name>
        <thead>
          <tr>
            <th align="left">Term</th>
            <th align="left">Definition</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <strong>TTFT_fabric</strong></td>
            <td align="left">The fabric-segment contribution to Time to First Token (TTFT), measured at the DUT-PD boundary. Comprises the KV cache transfer time over the Ethernet fabric only; excludes intra-node (PCIe/CXL/accelerator-interconnect) contributions. Reported alongside SUT-E TTFT to enable fabric/non-fabric decomposition.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>ITL_fabric</strong></td>
            <td align="left">The fabric-segment contribution to Inter-Token Latency (ITL), measured at the DUT-F boundary. Comprises the per-decode-step EP dispatch round-trip over the fabric; excludes intra-node and compute contributions.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>DUT-S</strong></td>
            <td align="left">Single-switch DUT configuration; see <xref target="dut-id"/>.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>DUT-F</strong></td>
            <td align="left">Complete-fabric DUT configuration; see <xref target="dut-id"/>.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>DUT-N</strong></td>
            <td align="left">NIC-transport DUT configuration; see <xref target="dut-id"/>.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>DUT-PD</strong></td>
            <td align="left">Prefill-Decode-path DUT configuration; see <xref target="dut-id"/>.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>SUT-E</strong></td>
            <td align="left">End-to-end inference SUT configuration; see <xref target="dut-id"/>.</td>
          </tr>
        </tbody>
      </table>
      <t>The scope of the DUT for the tests defined in this document is the Ethernet fabric segment connecting prefill and decode workers (and, where applicable, expert-parallel groups), consistent with the Fabric DUT Boundary defined in <xref target="TERMINOLOGY"/>.</t>
      <t>Worked examples of the S_KV formula and KV cache size computation for representative model architectures are provided in the appendix.</t>
      <section anchor="acronyms">
        <name>Acronyms</name>
        <t>Acronyms used in this document are expanded in the Acronyms appendix of <xref target="TERMINOLOGY"/>. Acronyms unique to the methodology defined herein are expanded on first use in the body of this document.</t>
      </section>
    </section>
    <section anchor="test-topology-and-architecture">
      <name>Test Topology and Architecture</name>
      <section anchor="reference-fabric-topologies">
        <name>Reference Fabric Topologies</name>
        <t>The reference topologies from the companion training document (2-Tier Clos,
3-Tier Clos, Rail-Optimized) remain applicable. Inference serving introduces
additional topology considerations related to disaggregated prefill/decode
placement and MoE expert distribution.</t>
        <section anchor="topology-a-2-tier-clos-leaf-spine">
          <name>Topology A: 2-Tier Clos (Leaf-Spine)</name>
          <t>Applicable to inference clusters up to approximately 2,048 accelerators. Prefill
and decode worker groups are placed on separate leaf switches (or separate
leaf switch groups) to isolate KV cache transfer traffic from decode-to-client
response traffic. Expert parallelism (EP) traffic within a single MoE dispatch
group is confined to a single leaf switch or a minimal number of leaf
switches to minimize spine-hop latency.</t>
        </section>
        <section anchor="topology-b-3-tier-clos-leaf-spine-superspine">
          <name>Topology B: 3-Tier Clos (Leaf-Spine-Superspine)</name>
          <t>Required for inference clusters exceeding 2,048 accelerators or for multi-model
serving deployments where different model instances occupy different fabric pods.
KV cache transfer traffic between prefill and decode workers in different pods
traverses the superspine tier, making superspine bandwidth and latency critical.</t>
        </section>
        <section anchor="topology-c-disaggregated-prefilldecode-placement">
          <name>Topology C: Disaggregated Prefill/Decode Placement</name>
          <t>A topology variant specific to inference serving in which prefill workers and
decode workers are placed in distinct physical locations within the fabric,
connected by a dedicated KV cache transfer network segment. This topology enables
independent scaling of prefill and decode resources and allows heterogeneous
hardware (e.g., high-compute GPUs for prefill, high-memory-bandwidth GPUs for
decode).</t>
          <figure anchor="fig-pd-topology">
            <name>Disaggregated Prefill/Decode Inference Topology</name>
            <artwork><![CDATA[
          +----------------------+
          |   Request Router     |
          |   (KV-Aware LB)      |
          +--------+-------------+
                   |
      +------------+--------------+
      |                           |
+-----v-------+         +---------v-----+
| Prefill Pool|         |  Decode Pool  |
| (xP workers)|         |  (yD workers) |
| High Compute|         | High Mem BW   |
| TP=8, DP=N/8|         | TP=8, DP=M/8  |
+------+------+         +-------+-------+
       |                        |
       | KV Cache RDMA Transfer |
       | (One-sided PUT/Signal) |
       +------------------------+
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="disaggregated-prefilldecode-topology">
        <name>Disaggregated Prefill/Decode Topology</name>
        <t>The disaggregated topology separates the inference pipeline into physically
distinct pools connected by the fabric. The test topology includes the
following components:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Prefill Worker Pool:</strong> N Prefill nodes, each containing G accelerators with
high-compute capability. These workers execute the prefill phase and generate
KV cache state. Tensor Parallelism (TP) is applied within each node; Data
Parallelism (DP) is applied across nodes. Each prefill worker communicates
with one or more decode workers via RDMA-based KV cache transfer.</t>
          </li>
          <li>
            <t><strong>Decode Worker Pool:</strong> M Decode nodes, each containing G accelerators with high
memory bandwidth. These workers receive KV cache state from prefill workers and
execute the autoregressive decode phase. DP Attention may partition the KV
cache across DP ranks within the decode pool, requiring AllToAll communication
during decode.</t>
          </li>
          <li>
            <t><strong>KV Cache Transfer Network:</strong> The Ethernet fabric segment connecting prefill and decode worker pools. This segment carries one-sided RDMA PUT operations (or PUT-with-signal) transferring KV cache blocks from prefill GPU memory to decode GPU memory via RDMA over Converged Ethernet (RoCEv2) or Ultra Ethernet Transport (UET).  </t>
            <t>
The end-to-end transfer from GPU memory to remote GPU memory traverses three segments:  </t>
            <ul spacing="normal">
              <li>
                <t>(1) GPU-to-NIC: PCIe/CXL (intra-node, out of scope as DUT);</t>
              </li>
              <li>
                <t>(2) NIC-to-NIC: Ethernet fabric (the DUT, in scope);</t>
              </li>
              <li>
                <t>(3) NIC-to-GPU: PCIe/CXL at destination (intra-node, out of scope as DUT).</t>
              </li>
            </ul>
            <t>
Benchmarking procedures in <xref target="test-cat1"/> and <xref target="test-cat2"/> measure fabric-segment latency and throughput exclusively. When end-to-end measurements are reported (e.g., TTFT decomposition), the intra-node segments are labelled separately.  </t>
            <artwork><![CDATA[
GPU Memory --> [PCIe/CXL] --> NIC --> [ETHERNET FABRIC] --> NIC --> [PCIe/CXL] --> GPU Memory
<---intra-node (out of scope)--->|<------DUT (in scope)------->|<---intra-node (out of scope)--->
]]></artwork>
          </li>
          <li>
            <t><strong>Request Router:</strong> A network-layer or application-layer load balancer that
assigns incoming inference requests to prefill workers and subsequently routes
KV cache to the appropriate decode workers. KV-aware routing and prefix-aware
caching policies are under test.</t>
          </li>
        </ul>
      </section>
      <section anchor="dut-id">
        <name>Device Under Test (DUT) Identification</name>
        <t>The following table defines the DUT configurations tested in this document:</t>
        <table anchor="tab-dut">
          <name>DUT Configuration Definitions</name>
          <thead>
            <tr>
              <th align="left">DUT ID</th>
              <th align="left">Description</th>
              <th align="left">Components Under Test</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">DUT-S</td>
              <td align="left">Single Switch</td>
              <td align="left">Individual leaf or spine switch forwarding inference traffic. Measures per-hop latency, buffer absorption, ECN marking accuracy.</td>
            </tr>
            <tr>
              <td align="left">DUT-F</td>
              <td align="left">Complete Fabric</td>
              <td align="left">End-to-end fabric from prefill NIC egress to decode NIC ingress. Measures fabric-level KV cache transfer latency, throughput, and congestion behavior.</td>
            </tr>
            <tr>
              <td align="left">DUT-N</td>
              <td align="left">NIC Transport</td>
              <td align="left">NIC RDMA transport stack processing KV cache transfer operations. Measures RDMA verb completion latency, one-sided PUT bandwidth, QP scaling.</td>
            </tr>
            <tr>
              <td align="left">DUT-PD</td>
              <td align="left">Prefill-Decode Path</td>
              <td align="left">The complete data path from prefill GPU memory through NIC, fabric, NIC, to decode GPU memory. Measures end-to-end KV cache transfer including proprietary accelerator-interconnect, PCIe/CXL, and fabric segments.</td>
            </tr>
            <tr>
              <td align="left">SUT-E</td>
              <td align="left">End-to-End System</td>
              <td align="left">Complete inference serving system including inference serving software, RDMA transfer libraries, fabric, and accelerators. Measures TTFT, ITL, TPS as functions of fabric performance.</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="traffic-generator-and-workload-emulator-requirements">
        <name>Traffic Generator and Workload Emulator Requirements</name>
        <t>Tests in this document require one or both of the following traffic generation
modes. The mode used is documented in all test reports.</t>
        <section anchor="hardware-traffic-generator-rt-minimum-requirements">
          <name>Hardware Traffic Generator (RT) - Minimum Requirements</name>
          <t>The hardware traffic generator satisfies all of the following:</t>
          <ul spacing="normal">
            <li>
              <t>RDMA traffic generation supporting RoCEv2 and, where tested, UET transport;
configurable RDMA verb types (one-sided PUT, PUT-with-signal, two-sided
SEND/RECV).</t>
            </li>
            <li>
              <t>Configurable message sizes from 4 KB (minimum KV cache page) to 256 MB
(large KV cache block).</t>
            </li>
            <li>
              <t>Configurable QP counts from 1 QP to a minimum of 256 QPs per
source-destination port pair.</t>
            </li>
          </ul>
        </section>
        <section anchor="software-workload-emulator-we-minimum-requirements">
          <name>Software Workload Emulator (WE) - Minimum Requirements</name>
          <t>A software workload emulator runs on actual accelerators and generates realistic
inference workloads. The WE supports all of the following:</t>
          <ul spacing="normal">
            <li>
              <t>Configurable prompt length distributions: uniform, Zipf, and trace-replay
modes.</t>
            </li>
            <li>
              <t>Configurable output length distributions and configurable request arrival
rates: Poisson, bursty, and trace-replay.</t>
            </li>
            <li>
              <t>Disaggregated prefill/decode execution with actual RDMA-based KV cache
transferring between prefill and decode worker pools.</t>
            </li>
            <li>
              <t>MoE expert parallelism with actual AllToAll dispatch where MoE-specific tests
(<xref target="test-cat3"/>) are performed.</t>
            </li>
            <li>
              <t>Measurement instrumentation providing per-request TTFT and ITL with timestamp
accuracy &lt;= 1 millisecond.</t>
            </li>
          </ul>
          <t>When a software workload emulator is used, the complete software configuration
is documented per <xref target="dut-id"/>, as framework version, RDMA library version,
and GPU driver version materially affect results.</t>
        </section>
      </section>
    </section>
    <section anchor="kpi-framework">
      <name>KPI Framework and Metrics Taxonomy</name>
      <t>This section defines the Key Performance Indicators measured across all test
categories. KPIs are organized into four tiers: Primary Latency KPIs
(end-user-facing response time metrics), Primary Throughput KPIs (system-level
capacity metrics), Fabric-Level KPIs (network-specific measurements), and Fabric
Health Indicators (operational monitoring metrics).</t>
      <ul empty="true">
        <li>
          <t>NOTE: Per BMWG charter, the definition of acceptance criteria or performance requirements is explicitly outside the scope of this Working Group. The KPI tables in this section define what is measured; they do not set thresholds. Indicative non-normative reference values reflecting current industry observations are provided in <xref target="indicative-reference-values"/>; those values <bcp14>MUST NOT</bcp14> be used as pass/fail thresholds in vendor evaluations.</t>
        </li>
      </ul>
      <section anchor="primary-latency-kpis">
        <name>Primary Latency KPIs</name>
        <table anchor="tab-latency-kpis">
          <name>Primary Latency KPIs</name>
          <thead>
            <tr>
              <th align="left">KPI</th>
              <th align="left">Unit</th>
              <th align="left">Definition</th>
              <th align="left">Measurement Point</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TTFT</td>
              <td align="left">ms</td>
              <td align="left">Time from request arrival to first output token emission</td>
              <td align="left">SUT-E request/response boundary</td>
            </tr>
            <tr>
              <td align="left">ITL</td>
              <td align="left">ms</td>
              <td align="left">Time between successive output tokens</td>
              <td align="left">SUT-E token emission timestamps</td>
            </tr>
            <tr>
              <td align="left">TTFT_fabric</td>
              <td align="left">ms</td>
              <td align="left">Fabric contribution to TTFT (KV cache transfer latency)</td>
              <td align="left">DUT-PD NIC-to-NIC measurement</td>
            </tr>
            <tr>
              <td align="left">ITL_fabric</td>
              <td align="left">ms</td>
              <td align="left">Fabric contribution to ITL (EP dispatch latency per decode step)</td>
              <td align="left">DUT-F EP dispatch round-trip</td>
            </tr>
            <tr>
              <td align="left">E2E_latency</td>
              <td align="left">ms</td>
              <td align="left">End-to-end request latency from arrival to completion of all output tokens</td>
              <td align="left">SUT-E request/response boundary</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="primary-throughput-kpis">
        <name>Primary Throughput KPIs</name>
        <table anchor="tab-throughput-kpis">
          <name>Primary Throughput KPIs</name>
          <thead>
            <tr>
              <th align="left">KPI</th>
              <th align="left">Unit</th>
              <th align="left">Definition</th>
              <th align="left">Measurement Point</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TPS_input</td>
              <td align="left">tokens/s</td>
              <td align="left">Aggregate input (prefill) tokens processed per second across all workers</td>
              <td align="left">SUT-E prefill completion events</td>
            </tr>
            <tr>
              <td align="left">TPS_output</td>
              <td align="left">tokens/s</td>
              <td align="left">Aggregate output (decode) tokens generated per second across all workers</td>
              <td align="left">SUT-E token emission events</td>
            </tr>
            <tr>
              <td align="left">TPS_per_GPU</td>
              <td align="left">tokens/s/GPU</td>
              <td align="left">Output tokens per second normalized by number of decode GPUs</td>
              <td align="left">SUT-E per-worker counters</td>
            </tr>
            <tr>
              <td align="left">Goodput</td>
              <td align="left">GB/s or tokens/s</td>
              <td align="left">See the Goodput definition in <xref target="TERMINOLOGY"/> Reports use Inference_Goodput for token-rate measurements and Fabric_Goodput for byte-rate fabric measurements</td>
              <td align="left">SUT-E successful completion events</td>
            </tr>
            <tr>
              <td align="left">KV_BW</td>
              <td align="left">GB/s</td>
              <td align="left">Aggregate KV cache transfer bandwidth between prefill and decode pools</td>
              <td align="left">DUT-PD RDMA counters</td>
            </tr>
            <tr>
              <td align="left">Request_Rate</td>
              <td align="left">req/s</td>
              <td align="left">Maximum sustained request arrival rate meeting all latency SLOs</td>
              <td align="left">SUT-E admission control boundary</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="fabric-level-kpis">
        <name>Fabric-Level KPIs</name>
        <table anchor="tab-fabric-kpis">
          <name>Fabric-Level KPIs</name>
          <thead>
            <tr>
              <th align="left">KPI</th>
              <th align="left">Unit</th>
              <th align="left">Definition</th>
              <th align="left">DUT</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">KV_xfer_latency</td>
              <td align="left">us</td>
              <td align="left">One-sided RDMA PUT completion time for a single KV cache block transfer</td>
              <td align="left">DUT-N</td>
            </tr>
            <tr>
              <td align="left">KV_xfer_bandwidth</td>
              <td align="left">GB/s</td>
              <td align="left">Sustained unidirectional KV cache transfer throughput per NIC port</td>
              <td align="left">DUT-N</td>
            </tr>
            <tr>
              <td align="left">EP_alltoall_latency</td>
              <td align="left">us</td>
              <td align="left">Round-trip time for a complete MoE expert parallelism AllToAll dispatch</td>
              <td align="left">DUT-F</td>
            </tr>
            <tr>
              <td align="left">EP_alltoall_bandwidth</td>
              <td align="left">GB/s</td>
              <td align="left">Aggregate AllToAll bandwidth across all EP ranks during dispatch</td>
              <td align="left">DUT-F</td>
            </tr>
            <tr>
              <td align="left">Fabric_FCT</td>
              <td align="left">us</td>
              <td align="left">Flow completion time for a KV cache transfer flow through the fabric</td>
              <td align="left">DUT-F</td>
            </tr>
            <tr>
              <td align="left">Buffer_utilization</td>
              <td align="left">%</td>
              <td align="left">Peak switch buffer utilization during KV cache transfer bursts</td>
              <td align="left">DUT-S</td>
            </tr>
            <tr>
              <td align="left">ECN_marking_rate</td>
              <td align="left">%</td>
              <td align="left">Fraction of packets marked with ECN-CE during inference traffic</td>
              <td align="left">DUT-S</td>
            </tr>
            <tr>
              <td align="left">PFC_frame_count</td>
              <td align="left">frames</td>
              <td align="left">Number of PFC PAUSE frames generated per unit time</td>
              <td align="left">DUT-S</td>
            </tr>
            <tr>
              <td align="left">Link_utilization</td>
              <td align="left">%</td>
              <td align="left">Average and peak link utilization on fabric links carrying inference traffic</td>
              <td align="left">DUT-F</td>
            </tr>
            <tr>
              <td align="left">Packet_drop_rate</td>
              <td align="left">ppm</td>
              <td align="left">Packets dropped per million due to buffer overflow or transport error</td>
              <td align="left">DUT-F</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="fabric-health-indicators">
        <name>Fabric Health Indicators</name>
        <table anchor="tab-health">
          <name>Fabric Health Indicators</name>
          <thead>
            <tr>
              <th align="left">Indicator</th>
              <th align="left">Threshold</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">CPU Utilization (switch)</td>
              <td align="left">&lt; 30%</td>
              <td align="left">Control plane CPU usage on switches under inference traffic load</td>
            </tr>
            <tr>
              <td align="left">Memory Usage (switch)</td>
              <td align="left">&lt; 70%</td>
              <td align="left">TCAM, buffer, and control plane memory usage</td>
            </tr>
            <tr>
              <td align="left">FEC Error Rate</td>
              <td align="left">&lt; 1e-12 post-FEC Bit Error Rate (BER)</td>
              <td align="left">Forward Error Correction effectiveness on fabric links</td>
            </tr>
            <tr>
              <td align="left">CRC Error Count</td>
              <td align="left">0</td>
              <td align="left">Layer 2 CRC errors on any fabric link</td>
            </tr>
            <tr>
              <td align="left">BGP/OSPF Stability</td>
              <td align="left">0 flaps</td>
              <td align="left">Routing protocol adjacency stability under inference load</td>
            </tr>
            <tr>
              <td align="left">NIC QP State</td>
              <td align="left">100% active</td>
              <td align="left">All RDMA Queue Pairs in active state (no error/reset)</td>
            </tr>
            <tr>
              <td align="left">GPU-NIC PCIe BW</td>
              <td align="left">&gt; 90% of theoretical</td>
              <td align="left">PCIe Gen5 x16 bandwidth utilization between GPU and NIC</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="test-cat1">
      <name>Test Category 1: RDMA KV Cache Transfer Benchmarks</name>
      <t>KV cache transfer between disaggregated prefill and decode workers is the
defining fabric workload for inference serving. Unlike training collectives
(AllReduce, AllGather) which are periodic and predictable, KV cache transfers
are event-driven (triggered by prefill completion) and bursty.</t>
      <section anchor="point-to-point-kv-cache-transfer-throughput">
        <name>Point-to-Point KV Cache Transfer Throughput</name>
        <t><strong>Objective:</strong> To determine the maximum sustained KV cache transfer throughput
between a single prefill worker NIC and a single decode worker NIC across the
DUT fabric.</t>
        <t><strong>Procedure:</strong> Configure a single RDMA connection (QP) between the prefill and
decode endpoints. Send a sequence of one-sided RDMA PUT operations with message
sizes corresponding to KV cache block sizes. The message size sequence
includes: 64 KB (single attention page), 256 KB, 1 MB, 4 MB, 16 MB, 64 MB,
256 MB (large prompt KV cache), and 1 GB. For each message size, transmit at
the maximum rate sustainable by the NIC for a minimum of 60 seconds per trial.
Repeat for 1, 4, 8, 16, 32, 64, and 128 concurrent QPs. The DUT is the fabric
path from NIC to NIC.</t>
        <t><strong>Measurement:</strong> Record throughput (GB/s), CPU utilization on both endpoints,
GPU memory-to-NIC transfer overhead, and NIC hardware offload utilization. The
test is repeated a minimum of 20 times per configuration and the average
reported.</t>
        <t><strong>Reporting Format:</strong> Results are reported as a multi-line graph with
message size (log scale) on the X axis and throughput (GB/s) on the Y axis.
Separate lines for each QP count. A reference line showing theoretical NIC line
rate is included.</t>
      </section>
      <section anchor="kv-cache-transfer-latency">
        <name>KV Cache Transfer Latency</name>
        <t><strong>Objective:</strong> To determine the latency of individual KV cache block transfers
across the DUT fabric under varying load conditions.</t>
        <t><strong>Procedure:</strong> Using the same endpoint configuration as Test 5.1, measure the
completion time of individual RDMA PUT operations. Latency is measured from the
initiation of the PUT verb on the prefill NIC to receipt of the completion
signal on the decode NIC (for PUT-with-signal) or to polling of the remote
completion queue. Measure latency under unloaded conditions (single outstanding
operation) and under loaded conditions (background traffic at 25%, 50%, 75%,
and 90% of fabric capacity). Message sizes include 64 KB, 1 MB, 16 MB,
and 256 MB.</t>
        <t><strong>Measurement:</strong> Report latency at P50, P95, P99, and P99.9 percentiles. The
test is repeated a minimum of 20 trials of at least 120 seconds each per
configuration. The difference between P99 and P50 (tail latency spread) is
reported as a derived metric.</t>
        <t><strong>Reporting Format:</strong> Results are reported as a table with columns for
message size, background load level, and latency at each percentile. A
complementary CDF plot of latency distribution for selected configurations
is included.</t>
      </section>
      <section anchor="concurrent-kv-cache-transfer-scaling">
        <name>Concurrent KV Cache Transfer Scaling</name>
        <t><strong>Objective:</strong> To characterize how aggregate KV cache transfer performance
scales as the number of concurrent prefill-to-decode transfer pairs increases.</t>
        <t><strong>Procedure:</strong> Configure N concurrent prefill-decode endpoint pairs, where N
ranges from 1 to the maximum supported by the fabric (e.g., 1, 2, 4, 8, 16,
32, 64, 128 pairs). Each pair executes continuous KV cache transfers of 16 MB
messages (representative of a medium-length prompt). Measure aggregate
throughput and per-pair latency as N increases.</t>
        <t><strong>Measurement:</strong> Report aggregate throughput (GB/s), per-pair median latency
(us), per-pair P99 latency (us), Jain Fairness Index across pairs, and maximum
fabric link utilization observed. The test is repeated a minimum of 20
times per value of N.</t>
        <t><strong>Reporting Format:</strong> Results are reported as a dual-axis graph with N
(concurrent pairs) on the X axis, aggregate throughput on the left Y axis, and
P99 latency on the right Y axis. The JFI value for each N is annotated.</t>
      </section>
      <section anchor="multi-tier-storage-transfer-characterization">
        <name>Multi-Tier Storage Transfer Characterization</name>
        <t><strong>Objective:</strong> To characterize KV cache transfer performance across the
memory/storage hierarchy: GPU HBM to GPU HBM (inter-node RDMA), GPU HBM to
remote CPU DRAM (offload), CPU DRAM to GPU HBM (reload), and GPU HBM to
NVMe/SSD (persistent cache).</t>
        <t><strong>Procedure:</strong> For each tier pair, measure unidirectional transfer throughput
and latency for message sizes of 1 MB, 16 MB, and 256 MB. Use zero-copy
transfers where supported (GPU-direct storage paths for NVMe and GPU-direct RDMA for inter-node, where the implementation provides them).</t>
        <t><strong>Measurement:</strong> Report throughput (GB/s) and latency (P50, P99) for each tier
pair and message size. Report the tier throughput ratio relative to GPU-to-GPU
RDMA as a derived metric.</t>
        <t><strong>Reporting Format:</strong> Results are reported as a table with rows for each
tier pair and columns for throughput and latency at each message size.</t>
      </section>
    </section>
    <section anchor="test-cat2">
      <name>Test Category 2: Prefill/Decode Disaggregation Benchmarks</name>
      <t>Disaggregated prefill/decode serving separates the two phases onto distinct
hardware pools to enable independent optimization and scaling. This section
benchmarks the fabric's ability to support the resulting KV cache transfer
traffic patterns and their impact on end-to-end inference metrics.</t>
      <section anchor="end-to-end-disaggregated-ttft">
        <name>End-to-End Disaggregated TTFT</name>
        <t><strong>Objective:</strong> To measure TTFT as a function of prompt length in a disaggregated
serving configuration, isolating the fabric contribution.</t>
        <t><strong>Procedure:</strong> Configure a disaggregated serving system (SUT-E) with a specified
xPyD ratio (e.g., 3P9D for a 12-node cluster). Submit inference requests with
prompt lengths of 128, 512, 1024, 2048, 4096, 8192, and 16384 tokens. For each
prompt length, measure the total TTFT and decompose it into: T_prefill (prefill
compute time), T_transfer (KV cache fabric transfer time, measured at DUT-PD),
and T_decode_init (first decode step time).</t>
        <t><strong>Measurement:</strong> Report TTFT (ms) and its decomposition at P50, P95, and P99
percentiles. The ratio T_transfer/TTFT (fabric fraction) is reported as
a derived metric. The test is repeated a minimum of 20 trials per prompt
length.</t>
        <t><strong>Reporting Format:</strong> Results are reported as a stacked bar chart with
prompt length on the X axis and TTFT (ms) on the Y axis, with bars decomposed
into T_prefill, T_transfer, and T_decode_init. A table of numerical values accompanies the chart.</t>
      </section>
      <section anchor="xpyd-ratio-optimization">
        <name>xPyD Ratio Optimization</name>
        <t><strong>Objective:</strong> To determine the optimal prefill-to-decode resource ratio for a
given model, prompt distribution, and latency SLO, as limited by fabric transfer
capacity.</t>
        <t><strong>Procedure:</strong> For a fixed total number of nodes N (e.g., 12), iterate over
xPyD ratios: 1P11D, 2P10D, 3P9D, 4P8D, 6P6D, 8P4D, 10P2D, 11P1D. For each
ratio, submit a sustained request stream matching a target request rate with a
specified prompt length distribution (e.g., Zipf with alpha=1.0 over
[128, 8192] tokens). Measure TTFT P99, ITL P99, TPS_output, and Goodput for
each configuration.</t>
        <t><strong>Measurement:</strong> Report all four metrics for each xPyD ratio and request rate.
Identify the Pareto-optimal ratio(s) that maximize TPS_output while meeting
TTFT P99 &lt; 500 ms and ITL P99 &lt; 50 ms.</t>
        <t><strong>Reporting Format:</strong> Results are reported as a multi-panel figure with
one panel per request rate, each showing xPyD ratio on the X axis and metrics
on dual Y axes (TTFT/ITL on left, TPS on right). The Pareto frontier is
highlighted.</t>
      </section>
      <section anchor="heterogeneous-parallelism-configuration">
        <name>Heterogeneous Parallelism Configuration</name>
        <t><strong>Objective:</strong> To evaluate the fabric impact of using different parallelism
strategies on prefill vs. decode pools in a disaggregated configuration.</t>
        <t><strong>Procedure:</strong> Test the following parallelism configurations:</t>
        <ul spacing="normal">
          <li>
            <t>Prefill TP=8, Decode TP=8 (baseline, same parallelism)</t>
          </li>
          <li>
            <t>Prefill TP=8, Decode TP=4 with DP_Attention=2 (reduced TP, added DP)</t>
          </li>
          <li>
            <t>Prefill TP=4 with DP=2, Decode TP=2 with DP_Attention=4 (aggressive DP)</t>
          </li>
        </ul>
        <t><strong>Measurement:</strong> Report the number of concurrent RDMA flows, aggregate bandwidth
(GB/s), TTFT (ms), and ITL (ms) at P50 and P99 for each configuration.</t>
      </section>
      <section anchor="prefill-queue-depth-impact-on-transfer-latency">
        <name>Prefill Queue Depth Impact on Transfer Latency</name>
        <t><strong>Objective:</strong> To measure how queuing of prefill requests (due to compute
contention) affects KV cache transfer burstiness and fabric congestion.</t>
        <t><strong>Procedure:</strong> Oversubscribe the prefill pool by submitting requests at a rate
exceeding prefill capacity. Measure the resulting KV cache transfer burst
characteristics: burst size, burst duration, inter-burst gap, and peak fabric
bandwidth demand. Vary the oversubscription ratio from 1.0x (saturated) to 2.0x
in 0.25x increments.</t>
        <t><strong>Measurement:</strong> Report burst size distribution, peak and average fabric
bandwidth, KV transfer latency P99, and ECN/PFC event counts as functions of
oversubscription ratio.</t>
      </section>
    </section>
    <section anchor="test-cat3">
      <name>Test Category 3: MoE Expert Parallelism Benchmarks</name>
      <t>Mixture-of-Experts models distribute expert sub-networks across GPUs and route
tokens to the appropriate experts via AllToAll communication. This section
benchmarks the fabric's ability to support the resulting fine-grained,
latency-sensitive inter-GPU traffic patterns.</t>
      <section anchor="alltoall-dispatch-throughput">
        <name>AllToAll Dispatch Throughput</name>
        <t><strong>Objective:</strong> To determine the maximum AllToAll dispatch throughput for MoE
expert parallelism across the DUT fabric.</t>
        <t><strong>Procedure:</strong> Generate a synthetic MoE dispatch workload where each GPU sends token embeddings to the experts selected by a top-k routing function.
The dispatch payload per GPU per MoE layer is:</t>
        <t>T_dispatch = (B * k * H_model * P_bytes) / N. where B = batch size (tokens), k = top-k routing count,
H_model = hidden dimension, P_bytes = precision bytes (e.g., BFloat16 (BF16) = 2), N = EP group size</t>
        <t><strong>Canonical MoE Test Matrix</strong></t>
        <table anchor="tbl-moe-matrix">
          <name>Canonical MoE Test Matrix</name>
          <thead>
            <tr>
              <th align="left">Config</th>
              <th align="left">E (experts)</th>
              <th align="left">k (top-k)</th>
              <th align="left">H_model</th>
              <th align="left">T_dispatch (B=128, BF16, N=96)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">M1</td>
              <td align="left">8</td>
              <td align="left">2</td>
              <td align="left">4096</td>
              <td align="left">2.1 MB/GPU</td>
            </tr>
            <tr>
              <td align="left">M2</td>
              <td align="left">64</td>
              <td align="left">4</td>
              <td align="left">7168</td>
              <td align="left">29  MB/GPU</td>
            </tr>
            <tr>
              <td align="left">M3</td>
              <td align="left">256</td>
              <td align="left">2</td>
              <td align="left">7168</td>
              <td align="left">14  MB/GPU</td>
            </tr>
            <tr>
              <td align="left">M4</td>
              <td align="left">256</td>
              <td align="left">8</td>
              <td align="left">7168</td>
              <td align="left">58  MB/GPU</td>
            </tr>
            <tr>
              <td align="left">M5</td>
              <td align="left">(implementer-defined — report all parameters)</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
        <t><strong>Measurement:</strong> Report aggregate bandwidth (GB/s), per-dispatch latency (us)
at P50 and P99, and GPU idle time waiting for dispatch completion. The test is repeated a minimum of 20 times per configuration.</t>
        <t><strong>Reporting Format:</strong> Results are reported as a heatmap with EP group size
on the Y axis, batch size on the X axis, and throughput (GB/s) as the color
dimension. A companion latency table is included. Reports state which config row(s) were used. For M5, the values of E, k, H_model, P_bytes, and N are included in the results table.</t>
        <t>NOTE: When per-accelerator normalized throughput (BusBW) is reported alongside EP_alltoall_bandwidth, BusBW is computed per the BusBW definition in <xref target="TERMINOLOGY"/>; algo_factor is fixed per collective type and does not depend on the algorithm the library selects at runtime. The runtime algorithm in use is verified via library tracing and documented as part of the test conditions.</t>
      </section>
      <section anchor="routing-mode-and-dispatch-mode-comparison">
        <name>Routing Mode and Dispatch Mode Comparison</name>
        <t><strong>Objective:</strong> To compare fabric performance across dispatch modes and routing policies. Tests cover Normal Dispatch and Low-Latency Dispatch.  Tests should additionally cover at least one alternative routing mode from <xref target="tbl-routing-modes"/>.</t>
        <t><strong>Routing Mode Taxonomy</strong></t>
        <table anchor="tbl-routing-modes">
          <name>MoE Routing Mode Taxonomy</name>
          <thead>
            <tr>
              <th align="left">Mode</th>
              <th align="left">Description</th>
              <th align="left">Traffic Impact</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Standard Top-k</td>
              <td align="left">Each token routed to k. highest-scoring experts</td>
              <td align="left">Fixed, uniform AllToAll dispatch volume</td>
            </tr>
            <tr>
              <td align="left">Expert Choice (EC)</td>
              <td align="left">Experts select tokens; ensures load balance</td>
              <td align="left">Non-uniform message sizes; tests HOL-blocking resilience</td>
            </tr>
            <tr>
              <td align="left">Top-k with Token Drop</td>
              <td align="left">Overloaded experts drop excess tokens</td>
              <td align="left">Lower peak traffic; unpredictable under load</td>
            </tr>
            <tr>
              <td align="left">Auxiliary Loss Top-k</td>
              <td align="left">Load-balanced top-k via training loss</td>
              <td align="left">Near-uniform AllToAll; lower hot-spot risk</td>
            </tr>
          </tbody>
        </table>
        <t><strong>Measurement:</strong> Measure dispatch latency, fabric bandwidth, and routing mode impact on AllToAll traffic distribution and fabric congestion per <xref target="tbl-routing-modes"/>. Results from different routing modes are reported in separate result tables with the routing mode labelled.</t>
      </section>
      <section anchor="wide-expert-parallelism-scaling">
        <name>Wide Expert Parallelism Scaling</name>
        <t><strong>Objective:</strong> To characterize AllToAll dispatch performance as EP group size
scales beyond a single node (wide EP), requiring inter-node fabric communication.</t>
        <t><strong>Procedure:</strong> Scale the EP group from intra-node only (EP=8) to wide EP (EP=16, 32, 48, 64, 96 spanning 2, 4, 6, 8, 12 nodes). Use a fixed batch size of 128 tokens and at least one configuration from the canonical MoE test matrix <xref target="tbl-moe-matrix"/>.
The selected config row is identified in the results.</t>
        <t><strong>Measurement:</strong> Report total dispatch latency (us), inter-node bandwidth
(GB/s), and latency decomposition (intra-node vs. inter-node fraction). Report
the scaling efficiency: (EP=8 latency) / (EP=N latency) * (N/8).</t>
      </section>
      <section anchor="expert-parallelism-and-kv-cache-transfer-contention">
        <name>Expert Parallelism and KV Cache Transfer Contention</name>
        <t><strong>Objective:</strong> To measure the mutual interference between EP AllToAll dispatch
traffic and KV cache transfer traffic when both share the same fabric links.</t>
        <t><strong>Procedure:</strong> On a shared fabric, simultaneously execute: (a) continuous KV
cache transfers at a sustained rate (e.g., 50%, 75% of fabric capacity), and
(b) periodic EP AllToAll dispatches (one per MoE layer forward pass).</t>
        <t><strong>Measurement:</strong> Report KV_xfer_latency P99 (us) and EP_alltoall_latency P99
(us) for the isolated and contended cases. Report the contention penalty as the
ratio of contended P99 to isolated P99 for each traffic class. Report ECN/PFC
event counts during contention.</t>
      </section>
    </section>
    <section anchor="test-cat4">
      <name>Test Category 4: Congestion Management Benchmarks</name>
      <t>Inference traffic patterns differ from training in their burstiness,
heterogeneity (mixed KV cache transfers and EP dispatches), and latency
sensitivity.</t>
      <section anchor="ecn-marking-under-inference-incast">
        <name>ECN Marking Under Inference Incast</name>
        <t><strong>Objective:</strong> To verify that ECN marking thresholds are correctly applied when
multiple prefill workers simultaneously transfer KV cache blocks to a single
decode worker (incast pattern).</t>
        <t><strong>Procedure:</strong> Configure M prefill workers (M = 2, 4, 8, 16, 32) to
simultaneously transfer 16 MB KV cache blocks to a single decode worker port.
Repeat for ECN marking thresholds of 100 KB, 500 KB, 1 MB, and 5 MB. The DUT
is the individual leaf switch (DUT-S).</t>
        <t><strong>Measurement:</strong> Report the ECN marking rate (fraction of marked packets), the
onset of marking, queue depth at marking onset, and aggregate throughput
achieved. Repeat a minimum of 20 times per configuration.</t>
      </section>
      <section anchor="pfc-behavior-under-bursty-kv-cache-transfers">
        <name>PFC Behavior Under Bursty KV Cache Transfers</name>
        <t><strong>Objective:</strong> To characterize PFC PAUSE frame generation and propagation under
bursty KV cache transfer patterns typical of disaggregated serving.</t>
        <t><strong>Procedure:</strong> Generate KV cache transfer bursts: N_burst concurrent transfers
(N_burst = 4, 8, 16, 32), each of size 16 MB, arriving within a window of
T_arrival (100 us, 1 ms, 10 ms). Vary the PFC threshold from 10 KB to 1 MB.</t>
        <t><strong>Measurement:</strong> Report PFC frame count, total PAUSE duration (us),
head-of-line blocking delay imposed on other traffic classes (us), and KV cache
transfer completion time.</t>
      </section>
      <section anchor="congestion-control-convergence-for-mixed-traffic">
        <name>Congestion Control Convergence for Mixed Traffic</name>
        <t><strong>Objective:</strong> To measure the convergence time of DCQCN (or UET congestion
control) when KV cache transfer traffic and EP AllToAll dispatch traffic share
fabric capacity.</t>
        <t><strong>Procedure:</strong> Establish a sustained KV cache transfer at 80% of fabric
capacity. Introduce EP AllToAll dispatch traffic on the same fabric links.
Measure the convergence time to stable rate allocation. Repeat with the roles
reversed.</t>
        <t><strong>Measurement:</strong> Report convergence time (ms) to within 5% of steady-state
rates, steady-state bandwidth allocation between traffic classes, packet loss
during convergence, and Jain Fairness Index of the steady-state allocation.</t>
      </section>
      <section anchor="pfc-storm-and-deadlock-resilience">
        <name>PFC Storm and Deadlock Resilience</name>
        <t><strong>Objective:</strong> To verify that the fabric does not enter a PFC storm or deadlock
condition under adversarial inference traffic patterns.</t>
        <t><strong>Procedure:</strong> Per the companion training document, generate a PFC storm
scenario by creating circular buffer dependency across multiple switches.
Simultaneously inject KV cache transfer traffic on all affected paths. Monitor
for PFC storm propagation, deadlock, and recovery time. The test duration is at least 300 seconds.</t>
        <t><strong>Measurement:</strong> Report whether PFC storm occurred (yes/no), deadlock occurred
(yes/no), maximum PAUSE propagation depth (number of hops), maximum
zero-throughput duration (ms), and recovery time (ms).</t>
      </section>
    </section>
    <section anchor="test-cat5">
      <name>Test Category 5: Request Routing and Load Balancing</name>
      <t>Inference serving introduces application-layer routing decisions that interact
with fabric-layer load balancing (ECMP, flowlet, packet spray).</t>
      <section anchor="kv-aware-request-routing-efficacy">
        <name>KV-Aware Request Routing Efficacy</name>
        <t><strong>Objective:</strong> To measure the effectiveness of KV-aware request routing, where
the request router considers decode worker KV cache memory occupancy and fabric
path congestion when assigning requests.</t>
        <t><strong>Procedure:</strong> Configure a request router with KV-aware routing enabled. Submit
a sustained request stream at rates of 10, 50, 100, and 200 req/s. Compare
against round-robin routing (baseline).</t>
        <t><strong>Measurement:</strong> Report the coefficient of variation (CV) of decode worker
memory utilization, P99 TTFT, P99 ITL, KV cache eviction rate, and Goodput for
both KV-aware and round-robin routing.</t>
      </section>
      <section anchor="prefix-aware-cache-hit-rate">
        <name>Prefix-Aware Cache Hit Rate</name>
        <t><strong>Objective:</strong> To measure the fabric bandwidth savings achieved by prefix-aware
caching, where requests with common prefixes are routed to workers that already
hold the corresponding KV cache segment.</t>
        <t><strong>Procedure:</strong> Generate a request workload where P% of requests share a common
prefix of L tokens (P = 25%, 50%, 75%, 90%; L = 256, 512, 1024, 2048). Compare
against non-prefix-aware routing.</t>
        <t><strong>Measurement:</strong> Report cache hit rate (%), fabric bandwidth reduction (%),
TTFT reduction (ms), and TPS improvement (%) for each (P, L) combination.</t>
      </section>
      <section anchor="ecmp-and-dynamic-load-balancing-under-inference-traffic">
        <name>ECMP and Dynamic Load Balancing Under Inference Traffic</name>
        <t><strong>Objective:</strong> To evaluate fabric-layer load balancing effectiveness under
inference traffic patterns characterized by a mix of large KV cache flows and
small EP dispatch flows.</t>
        <t><strong>Procedure:</strong> Measure link utilization uniformity under: (a) KV cache transfers
only (large flows, 16 MB+), (b) EP AllToAll dispatches only (small flows,
&lt; 1 MB), (c) mixed KV cache and EP traffic.</t>
        <t><strong>Measurement:</strong> Report JFI, maximum link utilization (%), minimum link
utilization (%), and the oversubscription ratio for each scenario and load
balancing algorithm.</t>
      </section>
      <section anchor="jain-fairness-index-for-decode-worker-utilization">
        <name>Jain Fairness Index for Decode Worker Utilization</name>
        <t><strong>Objective:</strong> To measure how evenly the fabric distributes KV cache transfer
load across decode workers.</t>
        <t><strong>Procedure:</strong> With N_D decode workers (N_D = 8, 16, 32, 64), submit a
sustained request stream and measure per-worker KV cache receive rate, GPU
utilization, and output TPS.</t>
        <t><strong>Measurement:</strong> Report JFI for KV cache receive rate, GPU utilization, and
output TPS. Report the max/min ratio for each metric.</t>
      </section>
    </section>
    <section anchor="test-category-6-latency-benchmarks">
      <name>Test Category 6: Latency Benchmarks</name>
      <t>Inference latency is the primary user-facing quality metric. This section
defines benchmarks that isolate the fabric's contribution to end-to-end
inference latency.</t>
      <section anchor="ttft-under-varying-prompt-lengths">
        <name>TTFT Under Varying Prompt Lengths</name>
        <t><strong>Objective:</strong> To characterize TTFT as a function of prompt length, isolating
the fabric-dependent KV cache transfer component.</t>
        <t><strong>Procedure:</strong> Submit single requests (no concurrent load) with prompt lengths
of 128, 256, 512, 1024, 2048, 4096, 8192, and 16384 tokens. Measure TTFT and
decompose into T_prefill, T_transfer, and T_decode_init. As a refernce the following table
is provided.</t>
        <table anchor="tab-conf-matrix">
          <name>Reference Configuration Matrix</name>
          <thead>
            <tr>
              <th align="left">Config ID</th>
              <th align="left">Model Profile</th>
              <th align="left">S_KV @ 4K ctx</th>
              <th align="left">S_KV @ 32K ctx</th>
              <th align="left">S_KV @ 128K ctx</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">CFG-A</td>
              <td align="left">Small: L=32, H_kv=8 (Grouped-Query Attention, GQA), D=128, BF16</td>
              <td align="left">0.25 GB</td>
              <td align="left">2.0 GB</td>
              <td align="left">8.0 GB</td>
            </tr>
            <tr>
              <td align="left">CFG-B</td>
              <td align="left">Mid: L=80, H_kv=8 (GQA), D=128, BF16 (~70B-parameter dense class)</td>
              <td align="left">1.3 GB</td>
              <td align="left">10.5 GB</td>
              <td align="left">42.0 GB</td>
            </tr>
            <tr>
              <td align="left">CFG-C</td>
              <td align="left">Large: L=96, H_kv=64 (Multi-Head Attention, MHA), D=128, BF16</td>
              <td align="left">12.3 GB</td>
              <td align="left">98.6 GB</td>
              <td align="left">&gt;300 GB</td>
            </tr>
            <tr>
              <td align="left">CFG-D</td>
              <td align="left">Mid INT8: L=80, H_kv=8 (GQA), D=128, INT8 (quantized)</td>
              <td align="left">0.67 GB</td>
              <td align="left">5.4 GB</td>
              <td align="left">21.5 GB</td>
            </tr>
            <tr>
              <td align="left">CFG-E (custom)</td>
              <td align="left">Implementer-defined:  L=<strong><em>, H_kv=</em></strong>, D=<strong><em>, P=</em></strong></td>
              <td align="left">Computed</td>
              <td align="left">Computed</td>
              <td align="left">Computed</td>
            </tr>
          </tbody>
        </table>
        <t><strong>Measurement:</strong> Report TTFT, T_transfer, and T_transfer/TTFT at P50, P95, P99
for each prompt length. The test is repeated a minimum of 100 times per
prompt length</t>
        <t><strong>Reporting Format:</strong> Results specify the configuration ID (CFG-A through
 CFG-E) or provide complete values for L, H_kv, D, C, and P_bytes for any test that
specifies KV cache message sizes. Results are reported as a line graph with
prompt length on the X axis and TTFT (ms) on the Y axis, with separate lines for P50
and P99. The T_transfer component is shown as a shaded region.</t>
      </section>
      <section anchor="itl-characterization-and-tail-latency">
        <name>ITL Characterization and Tail Latency</name>
        <t><strong>Objective:</strong> To characterize inter-token latency distribution and identify
fabric-induced tail latency during the decode phase.</t>
        <t><strong>Procedure:</strong> Submit a single long-output request (e.g., 2048 output tokens)
and record the timestamp of each emitted token. Repeat under: (a) unloaded
fabric, (b) loaded fabric (50% of capacity), and (c) heavily loaded fabric (90%
of capacity plus concurrent EP dispatches).</t>
        <t><strong>Measurement:</strong> Report ITL at P50, P95, P99, P99.9, and maximum for each load
condition. Report the number of tokens exhibiting ITL &gt; 100 ms (stall events).
The test generates at least 10,000 ITL samples per condition.</t>
      </section>
      <section anchor="end-to-end-latency-under-multi-tenant-load">
        <name>End-to-End Latency Under Multi-Tenant Load</name>
        <t><strong>Objective:</strong> To measure inference latency when multiple models or model
instances share the same fabric.</t>
        <t><strong>Procedure:</strong> Deploy two or more model instances on separate worker pools
sharing the same fabric. Submit requests to both instances concurrently.</t>
        <t><strong>Measurement:</strong> Report per-instance TTFT P99, ITL P99, and the interference
penalty: (multi-tenant metric - single-tenant metric) / single-tenant metric *
100%.</t>
      </section>
      <section anchor="latency-sensitivity-to-fabric-congestion">
        <name>Latency Sensitivity to Fabric Congestion</name>
        <t><strong>Objective:</strong> To establish the relationship between fabric congestion level and
inference latency degradation.</t>
        <t><strong>Procedure:</strong> Inject controlled background traffic on the fabric at levels from
0% to 95% of capacity in 5% increments. At each level, submit inference requests
at a fixed rate and measure TTFT and ITL.</t>
        <t><strong>Measurement:</strong> Report TTFT P99 and ITL P99 as functions of background traffic
level. Identify the inflection point at which latency begins to degrade
significantly. Report the latency degradation factor at 50%, 75%, and 90%
background load.</t>
      </section>
    </section>
    <section anchor="test-category-7-throughput-benchmarks">
      <name>Test Category 7: Throughput Benchmarks</name>
      <t>Inference throughput determines the cost-effectiveness of the serving
deployment.</t>
      <section anchor="aggregate-tokens-per-second">
        <name>Aggregate Tokens Per Second</name>
        <t><strong>Objective:</strong> To determine the maximum sustained aggregate TPS achievable while
meeting latency SLOs.</t>
        <t><strong>Procedure:</strong> Increase the request arrival rate from 1 req/s to the point where
either TTFT P99 exceeds 500 ms or ITL P99 exceeds 50 ms. At each rate, measure
TPS_output, TPS_input, Goodput, and all latency KPIs.</t>
        <t><strong>Measurement:</strong> Report TPS_output, TPS_input, Goodput, TTFT P99, ITL P99, and
fabric utilization at the SLO-bounded throughput. Report the fabric utilization
at the SLO boundary as a key efficiency metric.</t>
      </section>
      <section anchor="batch-size-scaling-and-continuous-batching-impact">
        <name>Batch Size Scaling and Continuous Batching Impact</name>
        <t><strong>Objective:</strong> To measure the interaction between inference batch size,
continuous batching, and fabric transfer patterns.</t>
        <t><strong>Procedure:</strong> Configure the serving system with varying maximum batch sizes
(1, 4, 8, 16, 32, 64, 128). For each batch size, measure: (a) the number of
concurrent KV cache transfers, (b) aggregate fabric bandwidth consumed,
(c) TPS_output, and (d) TTFT P99. Enable continuous batching and repeat.</t>
        <t><strong>Measurement:</strong> Report TPS_output, TTFT P99, fabric bandwidth (GB/s), and peak
concurrent transfers for each batch size, with and without continuous batching.</t>
      </section>
      <section anchor="goodput-under-preemption-and-eviction">
        <name>Goodput Under Preemption and Eviction</name>
        <t><strong>Objective:</strong> To measure the Goodput loss when fabric congestion forces KV
cache eviction or request preemption.</t>
        <t><strong>Procedure:</strong> Oversubscribe the system beyond the SLO-bounded throughput (at
110%, 125%, 150%, and 200% of the rate found in Test 11.1). Measure the rate of
KV cache evictions, request preemptions, and the resulting Goodput reduction.</t>
        <t><strong>Measurement:</strong> Report Goodput, eviction rate (evictions/s), preemption rate
(preemptions/s), wasted fabric bandwidth (GB/s), and the Goodput/TPS_output
ratio (efficiency).</t>
      </section>
    </section>
    <section anchor="test-cat8">
      <name>Test Category 8: Scale and Autoscaling</name>
      <t>Inference serving clusters must scale dynamically to match request demand.</t>
      <section anchor="fabric-scale-limits-for-inference-clusters">
        <name>Fabric Scale Limits for Inference Clusters</name>
        <t><strong>Objective:</strong> To determine the maximum inference cluster size supportable by
the DUT fabric while meeting performance requirements.</t>
        <t><strong>Procedure:</strong> Progressively scale the cluster from a minimal configuration
(e.g., 2 nodes, 16 GPUs) to the fabric's capacity (e.g., 1024 nodes, 8192
GPUs). At each scale point (following powers of two), measure KV cache transfer
throughput and latency, EP AllToAll dispatch latency, fabric control plane
convergence time, routing table size, and end-to-end TTFT and TPS.</t>
        <t><strong>Measurement:</strong> Report all KPIs at each scale point. Identify the scale limit
as the point where any KPI degrades by more than 10% from the
minimal-configuration baseline.</t>
      </section>
      <section anchor="dynamic-autoscaling-response-time">
        <name>Dynamic Autoscaling Response Time</name>
        <t><strong>Objective:</strong> To measure the time required for the fabric to accommodate
dynamic scaling of inference worker pools (adding/removing prefill or decode
workers).</t>
        <t><strong>Procedure:</strong> Starting from a stable serving state, trigger a scale-up event
(e.g., adding 4 decode nodes). Measure: (a) fabric convergence time, (b) time
from fabric convergence to first KV cache transfer on new nodes, (c) time to
reach steady-state throughput. Repeat for scale-down events.</t>
        <t><strong>Measurement:</strong> Report fabric convergence time (ms), first-transfer time (ms),
and time to steady-state (ms) for scale-up and scale-down events. Report any
packet loss or latency spikes during the scaling transition.</t>
      </section>
      <section anchor="link-failure-convergence-impact-on-serving">
        <name>Link Failure Convergence Impact on Serving</name>
        <t><strong>Objective:</strong> To measure the impact of fabric link failures on inference
serving performance and the convergence time to restore full service.</t>
        <t><strong>Procedure:</strong> During sustained inference serving at 80% of SLO-bounded
throughput, fail a single fabric link on: (a) a leaf-spine link carrying KV
cache traffic, (b) a spine-spine link, (c) a link on the decode worker's leaf
switch. Measure traffic disruption and recovery time. Repeat for dual link
failures.</t>
        <t><strong>Measurement:</strong> Report traffic disruption duration (ms), convergence time (ms),
TTFT degradation during convergence (ms above baseline P99), TPS reduction
during convergence (%), and time to full recovery (ms). The test is
repeated a minimum of 20 times per failure scenario.</t>
      </section>
    </section>
    <section anchor="test-category-9-soak-and-stability">
      <name>Test Category 9: Soak and Stability</name>
      <t>Long-running inference serving deployments must maintain performance without
degradation over time.</t>
      <section anchor="hour-sustained-inference-load">
        <name>24-Hour Sustained Inference Load</name>
        <t><strong>Objective:</strong> To verify that the fabric maintains performance under continuous
inference serving load for 24 hours.</t>
        <t><strong>Procedure:</strong> Configure the SUT-E at 80% of the SLO-bounded throughput
determined in Test 11.1. Run a continuous request stream for 24 hours with a
realistic prompt length distribution. Sample the following metrics every 15
minutes: TTFT P99, ITL P99, TPS_output, KV_xfer_latency P99, fabric link
utilization, switch CPU/memory usage, NIC counters (RDMA retransmissions, QP
errors), and PFC/ECN event counts.</t>
        <t><strong>Measurement:</strong> Report the trend of all sampled metrics over the 24-hour
period. The DUT is expected to exhibit zero NIC QP errors, zero routing flaps, and less than
1% variation in TTFT P99 over the test duration.</t>
      </section>
      <section anchor="kv-cache-memory-leak-detection">
        <name>KV Cache Memory Leak Detection</name>
        <t><strong>Objective:</strong> To detect memory leaks in the KV cache management subsystem that
may manifest as fabric performance degradation over time.</t>
        <t><strong>Procedure:</strong> Monitor GPU memory, CPU memory, NIC registered memory regions,
and RDMA memory region counts on all prefill and decode workers during the
24-hour soak test. Record the number of active KV cache pages, RDMA memory
registrations, and pinned memory at each sampling interval.</t>
        <t><strong>Measurement:</strong> Report the trend of each monitored metric. Flag any monotonic
increase as a potential leak. Report the maximum observed memory usage and the
usage at the end of the 24-hour period.</t>
      </section>
      <section anchor="long-running-serving-stability">
        <name>Long-Running Serving Stability</name>
        <t><strong>Objective:</strong> To verify that fabric-dependent components remain stable under
continuous inference serving.</t>
        <t><strong>Procedure:</strong> During the 24-hour soak test, monitor: NIC QP state transitions,
switch buffer utilization trend, FEC error rate trend, BGP/OSPF adjacency
stability, and RDMA retransmission rate. At the 12-hour mark, trigger a
controlled perturbation (single link flap) and verify recovery.</t>
        <t><strong>Measurement:</strong> Report the count of any QP state transitions, maximum switch
buffer utilization, FEC error trend, adjacency flap count, and RDMA
retransmission count. Report the recovery time from the 12-hour link flap
perturbation.</t>
      </section>
    </section>
    <section anchor="reporting">
      <name>Reporting Format</name>
      <t>All test results are reported following the conventions established in
<xref target="RFC2544"/> Section 26. In addition, the following inference-specific reporting
elements apply:</t>
      <ul spacing="normal">
        <li>
          <t><strong>System Configuration Report:</strong> the report includes: model name and
parameter count, parallelism strategy (TP, DP, EP, PP configuration for both
prefill and decode pools), xPyD ratio, inference serving framework name and
version, KV cache transfer library name and version, accelerator type and
count, NIC type and firmware version, switch ASIC and software version, fabric
topology, and link speeds.</t>
        </li>
        <li>
          <t><strong>Workload Characterization Report:</strong> the report includes: prompt length
distribution (mean, P50, P99, distribution type), output length distribution,
request arrival rate and distribution, number of concurrent requests, and
prefix sharing percentage.</t>
        </li>
        <li>
          <t><strong>Results Reporting:</strong> for each test, results include: the specific test
identifier (e.g., Test 5.1), the DUT/SUT configuration tested, the number of
trials, all measured KPI values with confidence intervals, and any anomalies
observed.</t>
        </li>
      </ul>
      <table anchor="tab-reporting">
        <name>Reporting Format Requirements</name>
        <thead>
          <tr>
            <th align="left">Report Element</th>
            <th align="left">Format</th>
            <th align="left">Required?</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">System Configuration</td>
            <td align="left">Structured table per above</td>
            <td align="left">Yes (required)</td>
          </tr>
          <tr>
            <td align="left">Workload Parameters</td>
            <td align="left">Structured table per above</td>
            <td align="left">Yes (required)</td>
          </tr>
          <tr>
            <td align="left">KPI Summary Table</td>
            <td align="left">Table with all measured KPIs</td>
            <td align="left">Yes (required)</td>
          </tr>
          <tr>
            <td align="left">Latency Distribution Plots</td>
            <td align="left">CDF or histogram per test section</td>
            <td align="left">Recommended</td>
          </tr>
          <tr>
            <td align="left">Throughput vs. Scale Graphs</td>
            <td align="left">Line chart per test section</td>
            <td align="left">Recommended</td>
          </tr>
          <tr>
            <td align="left">Fabric Health Indicators</td>
            <td align="left">Table per <xref target="tab-health"/></td>
            <td align="left">Yes (required)</td>
          </tr>
          <tr>
            <td align="left">Raw Data Appendix</td>
            <td align="left">Machine-readable format (CSV, JSON)</td>
            <td align="left">Optional</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document defines benchmarking methodology for controlled laboratory environments and does not specify any protocol mechanism. It therefore introduces no new protocol-level security considerations beyond those of the underlying technologies it references. The considerations below follow the BMWG convention established in <xref target="RFC8238"/> and align with the companion terminology document <xref target="TERMINOLOGY"/>.</t>
      <t>Benchmarking activities as described in this document are limited to technology characterization of AI inference serving fabrics using controlled stimuli in a laboratory environment, with dedicated address space and the constraints specified herein.</t>
      <t>The benchmarking network topology will be an independent test setup and <bcp14>MUST NOT</bcp14> be connected to devices that may forward the test traffic into a production network or misroute traffic to the test management network. This isolation requirement is particularly important for AI fabric benchmarking because the lossless transport modes referenced in this document (PFC, DCQCN, CBFC) propagate congestion hop-by-hop and can extend the blast radius of a misconfigured test beyond the immediate DUT.</t>
      <t>Benchmarking is performed on a "black-box" basis, relying solely on measurements observable external to the DUT as defined in <xref target="TERMINOLOGY"/>.</t>
      <t>Special capabilities <bcp14>SHOULD NOT</bcp14> exist in the DUT specifically for benchmarking purposes. Any implications for network security arising from the DUT <bcp14>SHOULD</bcp14> be identical in the lab and in production networks. In particular, RDMA memory-region permissions and KV cache telemetry exposure are properties of the deployed configuration, not of the benchmarking methodology, and <bcp14>SHOULD</bcp14> reflect production posture during testing.</t>
      <t>Per <xref target="RFC6815"/>, the tests defined herein <bcp14>MUST NOT</bcp14> be performed on production networks. The use of dedicated test IP address ranges per <xref target="RFC2544"/> Appendix C (198.18.0.0/15 for IPv4; 2001:db8::/32 per <xref target="RFC3849"/> for IPv6) is <bcp14>RECOMMENDED</bcp14> to prevent accidental interaction with production infrastructure.</t>
      <t>The following considerations are specific to inference-serving benchmarking:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Synthetic prompt inputs:</strong> The KV cache contains intermediate state derived from prompt content. Synthetic inputs <bcp14>SHOULD</bcp14> be used for all tests in this document so that no production prompt content is processed in the test environment. KV cache transfer benchmarks use payload patterns that do not reflect real user data.</t>
        </li>
        <li>
          <t><strong>One-sided RDMA write semantics:</strong> KV cache transfers in this document use one-sided RDMA PUT operations to remote NIC memory. Such operations bypass remote-CPU authorization at the data path; generators that leak onto adjacent fabrics could write arbitrary bytes to remote NICs. Line-rate RDMA traffic generators <bcp14>MUST</bcp14> be confined to the test fabric.</t>
        </li>
        <li>
          <t><strong>PFC leakage:</strong> PFC PAUSE frames generated under bursty KV cache or AllToAll incast conditions (<xref target="test-cat4"/>) that escape the test environment can hang adjacent production switches sharing the same priority class. Physical or VLAN-based isolation of the test fabric is required.</t>
        </li>
        <li>
          <t><strong>RDMA QP and PDC namespace isolation:</strong> when RDMA/RoCEv2 traffic is used, the test environment <bcp14>SHOULD</bcp14> be isolated from production RDMA fabrics to prevent QP number space collisions or inadvertent PFC propagation. When UET traffic is used, the test environment <bcp14>MUST</bcp14> ensure that UDP port 4793 traffic does not leak to production networks and that PDC identifier spaces are isolated.</t>
        </li>
        <li>
          <t><strong>UET transport security sub-layer (TSS):</strong> <bcp14>SHOULD NOT</bcp14> be enabled during performance benchmarking unless transport security overhead is explicitly being measured.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This memo includes no request to IANA.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC1242">
          <front>
            <title>Benchmarking Terminology for Network Interconnection Devices</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="July" year="1991"/>
            <abstract>
              <t>This memo discusses and defines a number of terms that are used in describing performance benchmarking tests and the results of such tests. This memo provides information for the Internet community. It does not specify an Internet standard.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1242"/>
          <seriesInfo name="DOI" value="10.17487/RFC1242"/>
        </reference>
        <reference anchor="RFC2544">
          <front>
            <title>Benchmarking Methodology for Network Interconnect Devices</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <author fullname="J. McQuaid" initials="J." surname="McQuaid"/>
            <date month="March" year="1999"/>
            <abstract>
              <t>This document is a republication of RFC 1944 correcting the values for the IP addresses which were assigned to be used as the default addresses for networking test equipment. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2544"/>
          <seriesInfo name="DOI" value="10.17487/RFC2544"/>
        </reference>
        <reference anchor="RFC2889">
          <front>
            <title>Benchmarking Methodology for LAN Switching Devices</title>
            <author fullname="R. Mandeville" initials="R." surname="Mandeville"/>
            <author fullname="J. Perser" initials="J." surname="Perser"/>
            <date month="August" year="2000"/>
            <abstract>
              <t>This document is intended to provide methodology for the benchmarking of local area network (LAN) switching devices. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2889"/>
          <seriesInfo name="DOI" value="10.17487/RFC2889"/>
        </reference>
        <reference anchor="RFC6349">
          <front>
            <title>Framework for TCP Throughput Testing</title>
            <author fullname="B. Constantine" initials="B." surname="Constantine"/>
            <author fullname="G. Forget" initials="G." surname="Forget"/>
            <author fullname="R. Geib" initials="R." surname="Geib"/>
            <author fullname="R. Schrage" initials="R." surname="Schrage"/>
            <date month="August" year="2011"/>
            <abstract>
              <t>This framework describes a practical methodology for measuring end- to-end TCP Throughput in a managed IP network. The goal is to provide a better indication in regard to user experience. In this framework, TCP and IP parameters are specified to optimize TCP Throughput. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6349"/>
          <seriesInfo name="DOI" value="10.17487/RFC6349"/>
        </reference>
        <reference anchor="RFC6815">
          <front>
            <title>Applicability Statement for RFC 2544: Use on Production Networks Considered Harmful</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <author fullname="K. Dubray" initials="K." surname="Dubray"/>
            <author fullname="J. McQuaid" initials="J." surname="McQuaid"/>
            <author fullname="A. Morton" initials="A." surname="Morton"/>
            <date month="November" year="2012"/>
            <abstract>
              <t>The Benchmarking Methodology Working Group (BMWG) has been developing key performance metrics and laboratory test methods since 1990, and continues this work at present. The methods described in RFC 2544 are intended to generate traffic that overloads network device resources in order to assess their capacity. Overload of shared resources would likely be harmful to user traffic performance on a production network, and there are further negative consequences identified with production application of the methods. This memo clarifies the scope of RFC 2544 and other IETF BMWG benchmarking work for isolated test environments only, and it encourages new standards activity for measurement methods applicable outside that scope. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6815"/>
          <seriesInfo name="DOI" value="10.17487/RFC6815"/>
        </reference>
        <reference anchor="RFC8238">
          <front>
            <title>Data Center Benchmarking Terminology</title>
            <author fullname="L. Avramov" initials="L." surname="Avramov"/>
            <author fullname="J. Rapp" initials="J." surname="Rapp"/>
            <date month="August" year="2017"/>
            <abstract>
              <t>The purposes of this informational document are to establish definitions and describe measurement techniques for data center benchmarking, as well as to introduce new terminology applicable to performance evaluations of data center network equipment. This document establishes the important concepts for benchmarking network switches and routers in the data center and is a prerequisite for the test methodology document (RFC 8239). Many of these terms and methods may be applicable to network equipment beyond the scope of this document as the technologies originally applied in the data center are deployed elsewhere.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8238"/>
          <seriesInfo name="DOI" value="10.17487/RFC8238"/>
        </reference>
        <reference anchor="RFC8239">
          <front>
            <title>Data Center Benchmarking Methodology</title>
            <author fullname="L. Avramov" initials="L." surname="Avramov"/>
            <author fullname="J. Rapp" initials="J." surname="Rapp"/>
            <date month="August" year="2017"/>
            <abstract>
              <t>The purpose of this informational document is to establish test and evaluation methodology and measurement techniques for physical network equipment in the data center. RFC 8238 is a prerequisite for this document, as it contains terminology that is considered normative. Many of these terms and methods may be applicable beyond the scope of this document as the technologies originally applied in the data center are deployed elsewhere.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8239"/>
          <seriesInfo name="DOI" value="10.17487/RFC8239"/>
        </reference>
        <reference anchor="TERMINOLOGY">
          <front>
            <title>Benchmarking Terminology for AI Network Fabrics</title>
            <author fullname="Fernando Calabria" initials="F." surname="Calabria">
              <organization>Cisco</organization>
            </author>
            <author fullname="Carlos Pignataro" initials="C." surname="Pignataro">
              <organization>Blue Fern Consulting</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Giuseppe Fioccola" initials="G." surname="Fioccola">
              <organization>Huawei</organization>
            </author>
            <date day="21" month="April" year="2026"/>
            <abstract>
              <t>   This document defines benchmarking terminology for evaluating
   Ethernet-based network fabrics used in distributed Artificial
   Intelligence (AI) training and inference workloads.  It provides a
   unified vocabulary consolidating and extending terms from RFC 1242,
   RFC 8238, and the companion AI fabric methodology documents,
   establishing precise, vendor-neutral definitions for collective
   communication primitives, RDMA transport mechanisms (RoCEv2 and Ultra
   Ethernet Transport), congestion control behaviors, AI-specific Key
   Performance Indicators (KPIs), and fabric topology concepts.

   This document is a companion to
   [I-D.calabria-bmwg-ai-fabric-training-bench] and
   [I-D.calabria-bmwg-ai-fabric-inference-bench].  Those documents
   SHOULD NOT be applied without first consulting the terminology
   defined herein.  Where definitions herein overlap with RFC 1242 or
   RFC 8238, the AI fabric context definition in this document takes
   precedence.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-calabria-bmwg-ai-fabric-terminology-01"/>
        </reference>
        <reference anchor="TRAINING-BENCH">
          <front>
            <title>Benchmarking Methodology for AI Training Network Fabrics</title>
            <author fullname="Fernando Calabria" initials="F." surname="Calabria">
              <organization>Cisco</organization>
            </author>
            <author fullname="Carlos Pignataro" initials="C." surname="Pignataro">
              <organization>Blue Fern Consulting</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Giuseppe Fioccola" initials="G." surname="Fioccola">
              <organization>Huawei</organization>
            </author>
            <date day="21" month="April" year="2026"/>
            <abstract>
              <t>   This document defines benchmarking terminology, methodologies, and
   Key Performance Indicators (KPIs) for evaluating Ethernet-based AI
   training network fabrics.

   As large-scale distributed AI/ML training clusters grow to tens of
   thousands of accelerators (GPUs/XPUs), the backend network fabric
   becomes the critical bottleneck determining job completion time
   (JCT), training throughput, and accelerator utilization.

   This document establishes vendor-independent, reproducible test
   procedures for benchmarking fabric-level performance under realistic
   AI training workloads, covering RDMA/RoCEv2 transport, the Ultra
   Ethernet Transport (UET) protocol defined by the UEC Specification
   1.0 [UEC-1.0], congestion management (PFC, ECN, DCQCN, CBFC), load
   balancing strategies (ECMP, DLB, packet spraying), collective
   communication patterns (AllReduce, AlltoAll, AllGather), and scale/
   soak testing.

   The methodology enables direct, reproducible comparison across
   different switch ASICs, vendor implementations, NIC transport stacks
   (RoCEv2 vs. UET), and fabric architectures (2-tier Clos, 3-tier Clos,
   rail-optimized).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-calabria-bmwg-ai-fabric-training-bench-01"/>
        </reference>
        <reference anchor="UEC-1.0" target="https://ultraethernet.org">
          <front>
            <title>Ultra Ethernet Transport (UET) Specification 1.0</title>
            <author>
              <organization>Ultra Ethernet Consortium</organization>
            </author>
            <date year="2025" month="June"/>
          </front>
        </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="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"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7432">
          <front>
            <title>BGP MPLS-Based Ethernet VPN</title>
            <author fullname="A. Sajassi" initials="A." role="editor" surname="Sajassi"/>
            <author fullname="R. Aggarwal" initials="R." surname="Aggarwal"/>
            <author fullname="N. Bitar" initials="N." surname="Bitar"/>
            <author fullname="A. Isaac" initials="A." surname="Isaac"/>
            <author fullname="J. Uttaro" initials="J." surname="Uttaro"/>
            <author fullname="J. Drake" initials="J." surname="Drake"/>
            <author fullname="W. Henderickx" initials="W." surname="Henderickx"/>
            <date month="February" year="2015"/>
            <abstract>
              <t>This document describes procedures for BGP MPLS-based Ethernet VPNs (EVPN). The procedures described here meet the requirements specified in RFC 7209 -- "Requirements for Ethernet VPN (EVPN)".</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7432"/>
          <seriesInfo name="DOI" value="10.17487/RFC7432"/>
        </reference>
        <reference anchor="RFC3849">
          <front>
            <title>IPv6 Address Prefix Reserved for Documentation</title>
            <author fullname="G. Huston" initials="G." surname="Huston"/>
            <author fullname="A. Lord" initials="A." surname="Lord"/>
            <author fullname="P. Smith" initials="P." surname="Smith"/>
            <date month="July" year="2004"/>
            <abstract>
              <t>To reduce the likelihood of conflict and confusion when relating documented examples to deployed systems, an IPv6 unicast address prefix is reserved for use in examples in RFCs, books, documentation, and the like. Since site-local and link-local unicast addresses have special meaning in IPv6, these addresses cannot be used in many example situations. The document describes the use of the IPv6 address prefix 2001:DB8::/32 as a reserved prefix for use in documentation. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3849"/>
          <seriesInfo name="DOI" value="10.17487/RFC3849"/>
        </reference>
      </references>
    </references>
    <?line 1106?>

<section anchor="kpi-to-test-mapping-summary">
      <name>KPI-to-Test Mapping Summary</name>
      <t>The following table provides a cross-reference from each KPI defined in
<xref target="kpi-framework"/> to the test(s) in which it is measured.</t>
      <table anchor="tab-kpi-mapping">
        <name>KPI-to-Test Mapping</name>
        <thead>
          <tr>
            <th align="left">KPI</th>
            <th align="left">Primary Test(s)</th>
            <th align="left">DUT/SUT</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TTFT</td>
            <td align="left">6.1, 6.2, 10.1, 10.3</td>
            <td align="left">SUT-E</td>
          </tr>
          <tr>
            <td align="left">ITL</td>
            <td align="left">10.2, 10.3, 10.4</td>
            <td align="left">SUT-E</td>
          </tr>
          <tr>
            <td align="left">TPS_output</td>
            <td align="left">6.2, 11.1, 11.2, 11.3</td>
            <td align="left">SUT-E</td>
          </tr>
          <tr>
            <td align="left">TPS_input</td>
            <td align="left">11.1</td>
            <td align="left">SUT-E</td>
          </tr>
          <tr>
            <td align="left">Goodput</td>
            <td align="left">11.1, 11.3</td>
            <td align="left">SUT-E</td>
          </tr>
          <tr>
            <td align="left">KV_xfer_latency</td>
            <td align="left">5.2, 5.3, 6.1, 6.4</td>
            <td align="left">DUT-N, DUT-PD</td>
          </tr>
          <tr>
            <td align="left">KV_xfer_bandwidth</td>
            <td align="left">5.1, 5.3, 5.4</td>
            <td align="left">DUT-N, DUT-PD</td>
          </tr>
          <tr>
            <td align="left">EP_alltoall_latency</td>
            <td align="left">7.1, 7.2, 7.3, 7.4</td>
            <td align="left">DUT-F</td>
          </tr>
          <tr>
            <td align="left">EP_alltoall_bandwidth</td>
            <td align="left">7.1, 7.3</td>
            <td align="left">DUT-F</td>
          </tr>
          <tr>
            <td align="left">Fabric_FCT</td>
            <td align="left">5.2, 5.3</td>
            <td align="left">DUT-F</td>
          </tr>
          <tr>
            <td align="left">Buffer_utilization</td>
            <td align="left">8.1, 8.2</td>
            <td align="left">DUT-S</td>
          </tr>
          <tr>
            <td align="left">ECN_marking_rate</td>
            <td align="left">8.1, 8.3</td>
            <td align="left">DUT-S</td>
          </tr>
          <tr>
            <td align="left">PFC_frame_count</td>
            <td align="left">8.2, 8.4</td>
            <td align="left">DUT-S</td>
          </tr>
          <tr>
            <td align="left">Link_utilization</td>
            <td align="left">5.3, 9.3, 12.1</td>
            <td align="left">DUT-F</td>
          </tr>
          <tr>
            <td align="left">Packet_drop_rate</td>
            <td align="left">8.1, 8.2, 12.3</td>
            <td align="left">DUT-F</td>
          </tr>
          <tr>
            <td align="left">Request_Rate</td>
            <td align="left">11.1</td>
            <td align="left">SUT-E</td>
          </tr>
          <tr>
            <td align="left">Prefix Cache Hit Rate</td>
            <td align="left">9.2</td>
            <td align="left">SUT-E</td>
          </tr>
          <tr>
            <td align="left">JFI (Decode Worker)</td>
            <td align="left">9.4</td>
            <td align="left">SUT-E</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="indicative-reference-values">
      <name>Indicative Reference Values (Non-Normative)</name>
      <t>This appendix provides indicative reference values for the KPIs defined in <xref target="kpi-framework"/>, reflecting current industry observations for interactive inference workloads as of 2025-2026. These values are NON-NORMATIVE and do not constitute benchmarking acceptance criteria or performance requirements. Per the BMWG charter, the definition of acceptance criteria or performance requirements is explicitly outside the scope of this Working Group. Implementers may use these values as contextual references when interpreting results; they <bcp14>MUST NOT</bcp14> be used as pass/fail thresholds in vendor evaluations. Deployment-specific SLOs will vary by application, model architecture, and operator requirements.</t>
      <table anchor="tab-indicative-values">
        <name>Indicative Reference Values for Interactive Inference Serving (Non-Normative)</name>
        <thead>
          <tr>
            <th align="left">KPI</th>
            <th align="left">Indicative Reference (Interactive)</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TTFT</td>
            <td align="left">&lt; 500 ms P99</td>
          </tr>
          <tr>
            <td align="left">ITL</td>
            <td align="left">&lt; 50 ms P99</td>
          </tr>
          <tr>
            <td align="left">TTFT_fabric</td>
            <td align="left">&lt; 300 ms P99</td>
          </tr>
          <tr>
            <td align="left">ITL_fabric</td>
            <td align="left">&lt; 5 ms P99</td>
          </tr>
          <tr>
            <td align="left">E2E_latency</td>
            <td align="left">varies by output length</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="inference-serving-framework-capability-categories-informational">
      <name>Inference Serving Framework Capability Categories (Informational)</name>
      <t>This appendix describes the inference serving framework capability categories
relevant to AI fabric benchmarking. This appendix is intended to guide
documentation of SUT-E configurations and is NOT normative. Implementers using
a Software Workload Emulator (SUT-E tests) document which of the
following capabilities their serving framework supports.</t>
      <table anchor="tab-framework-caps">
        <name>Framework Capability Categories</name>
        <thead>
          <tr>
            <th align="left">Capability Category</th>
            <th align="left">Description</th>
            <th align="left">Relevance to Fabric Benchmarking</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Disaggregated Prefill/Decode (PD)</td>
            <td align="left">Physical separation of prefill and decode execution across different accelerator pools</td>
            <td align="left">Determines whether DUT-PD topology tests apply (<xref target="test-cat2"/>)</td>
          </tr>
          <tr>
            <td align="left">KV Cache Transfer Protocol</td>
            <td align="left">Protocol and library used for prefill-to-decode KV state transfer (one-sided PUT, two-sided SEND/RECV, GPU-initiated)</td>
            <td align="left">Determines RDMA verb types under test and applicable frame formats (Appendix C)</td>
          </tr>
          <tr>
            <td align="left">MoE Expert Parallelism (EP) Support</td>
            <td align="left">Distribution of MoE expert sub-networks across GPUs and AllToAll dispatch mode support</td>
            <td align="left">Determines whether MoE EP tests apply (<xref target="test-cat3"/>)</td>
          </tr>
          <tr>
            <td align="left">Continuous Batching</td>
            <td align="left">Dynamic request admission to active inference batches</td>
            <td align="left">Affects request arrival rate distributions and load balancing tests in <xref target="test-cat5"/></td>
          </tr>
          <tr>
            <td align="left">Prefix / KV Cache Sharing</td>
            <td align="left">Reuse of KV cache segments for requests with common prefixes</td>
            <td align="left">Determines applicability of the prefix cache hit rate test in <xref target="test-cat5"/></td>
          </tr>
          <tr>
            <td align="left">RDMA Transport Support</td>
            <td align="left">Underlying transport(s) supported: RoCEv2, UET, or other</td>
            <td align="left">Documented in the test report; affects congestion management test interpretation in <xref target="test-cat4"/></td>
          </tr>
          <tr>
            <td align="left">GPU-Initiated Networking (GIN) Support</td>
            <td align="left">Ability for GPU threads to directly initiate RDMA operations without CPU involvement</td>
            <td align="left">Affects RDMA primitive choice in MoE dispatch tests (<xref target="test-cat3"/>)</td>
          </tr>
          <tr>
            <td align="left">Container Orchestration Integration</td>
            <td align="left">Native support for container-based deployment and horizontal scaling</td>
            <td align="left">Relevant for autoscaling tests in <xref target="test-cat8"/></td>
          </tr>
          <tr>
            <td align="left">Maximum Reported Scale</td>
            <td align="left">Maximum cluster scale at which the framework has been validated</td>
            <td align="left">Documents applicability of fabric scale tests</td>
          </tr>
        </tbody>
      </table>
      <t>NOTE: The specific framework name, version, and configuration are documented in all test reports. Results obtained with different frameworks are not directly comparable; framework identity is a required reporting parameter per <xref target="reporting"/>.</t>
    </section>
    <section anchor="kv-frame">
      <name>KV Cache Transfer Frame Format</name>
      <t>This appendix defines the reference frame format for KV cache transfer benchmarking over RoCEv2 using one-sided RDMA WRITE (PUT) operations. The frame format follows the standard RoCEv2 encapsulation defined in the InfiniBand Architecture Specification Volume 1 Annex A17 (RoCEv2).</t>
      <table anchor="tab-kv-frame">
        <name>RoCEv2 KV Cache Transfer Frame (One-Sided RDMA WRITE)</name>
        <thead>
          <tr>
            <th align="left">Offset</th>
            <th align="left">Field</th>
            <th align="left">Size</th>
            <th align="left">Value / Description</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">00</td>
            <td align="left">Ethernet Dst MAC</td>
            <td align="left">6B</td>
            <td align="left">DUT next-hop MAC</td>
          </tr>
          <tr>
            <td align="left">06</td>
            <td align="left">Ethernet Src MAC</td>
            <td align="left">6B</td>
            <td align="left">Test equipment MAC</td>
          </tr>
          <tr>
            <td align="left">12</td>
            <td align="left">EtherType / Tag Protocol Identifier (TPID)</td>
            <td align="left">2B</td>
            <td align="left">0x0800 (IPv4) or 0x86DD (IPv6) when untagged; 0x8100 (TPID) when 802.1Q-tagged</td>
          </tr>
          <tr>
            <td align="left">14</td>
            <td align="left">802.1Q Tag (optional)</td>
            <td align="left">4B</td>
            <td align="left">When tagged: TCI (PCP for RDMA priority class, VID) followed by inner EtherType 0x0800 or 0x86DD. Omit this row when untagged and shift subsequent offsets back by 4B</td>
          </tr>
          <tr>
            <td align="left">18</td>
            <td align="left">IPv4 / IPv6 Header</td>
            <td align="left">20B (IPv4) or 40B (IPv6)</td>
            <td align="left">DSCP=26 (AF31), ECN=ECT(0), Proto=17 (UDP)</td>
          </tr>
          <tr>
            <td align="left">38 / 58</td>
            <td align="left">UDP Header</td>
            <td align="left">8B</td>
            <td align="left">DstPort=4791 (RoCEv2), SrcPort=entropy for ECMP, UDP Length, UDP Checksum</td>
          </tr>
          <tr>
            <td align="left">46 / 66</td>
            <td align="left">BTH (Base Transport Header)</td>
            <td align="left">12B</td>
            <td align="left">OpCode=0x0A (RDMA WRITE Only) or 0x0B (RDMA WRITE with Immediate Data) at the last packet of a PUT-with-signal sequence; SE, M, Pad, TVer flags; PKey; Destination QP Number (24 bits); A flag; PSN (24 bits)</td>
          </tr>
          <tr>
            <td align="left">58 / 78</td>
            <td align="left">RETH (RDMA Extended Transport Header)</td>
            <td align="left">16B</td>
            <td align="left">Virtual Address (64 bits), R_Key (32 bits), DMA Length (32 bits). The DMA Length indicates the size of the KV cache block transferred by this WRITE operation</td>
          </tr>
          <tr>
            <td align="left">74 / 94</td>
            <td align="left">KV Cache Payload</td>
            <td align="left">variable, up to MTU</td>
            <td align="left">Key/value attention state data</td>
          </tr>
          <tr>
            <td align="left">var</td>
            <td align="left">ICRC</td>
            <td align="left">4B</td>
            <td align="left">Invariant CRC</td>
          </tr>
          <tr>
            <td align="left">var+4</td>
            <td align="left">FCS</td>
            <td align="left">4B</td>
            <td align="left">Ethernet Frame Check Sequence</td>
          </tr>
        </tbody>
      </table>
      <t>Notes:</t>
      <ul spacing="normal">
        <li>
          <t>The UDP Source Port uses entropy-based values for ECMP load distribution across fabric paths.</t>
        </li>
        <li>
          <t>The RETH carries the remote virtual address, remote key, and DMA length for the one-sided WRITE operation. For KV cache transfers, the DMA Length field indicates the size of the KV cache block being transferred.</t>
        </li>
        <li>
          <t>Typical MTU for RoCEv2 deployments is 4096 bytes; larger KV cache blocks (e.g., 64 KB pages) are segmented into multiple packets by the NIC. The first packet of a segmented WRITE carries OpCode 0x06 (RDMA WRITE First) and a RETH; intermediate packets carry OpCode 0x07 (RDMA WRITE Middle); the last packet carries OpCode 0x08 (RDMA WRITE Last) or 0x0B (RDMA WRITE Last with Immediate Data) for PUT-with-signal completion signalling.</t>
        </li>
        <li>
          <t>For UET-based KV cache transfers, the frame format defined in <xref target="TRAINING-BENCH"/> Appendix D ("UET Frame Format") applies; the DUT IP port is 4793 and the transport service indicator selects between ROD and RUD per test.</t>
        </li>
      </ul>
    </section>
    <section anchor="moe-alltoall-communication-pattern">
      <name>MoE AllToAll Communication Pattern</name>
      <t>This appendix describes the AllToAll communication pattern used for MoE expert
parallelism dispatch and its fabric-level traffic characteristics. In a
Mixture-of-Experts model with M total experts distributed across N GPUs (each
GPU holds M/N experts), a single MoE layer forward pass generates an AllToAll
communication pattern where each GPU sends a variable-size payload to every
other GPU.</t>
      <table anchor="tab-moe-dispatch">
        <name>MoE Dispatch Traffic Characteristics by Mode</name>
        <thead>
          <tr>
            <th align="left">Parameter</th>
            <th align="left">Normal Dispatch (Prefill)</th>
            <th align="left">Low-Latency Dispatch (Decode)</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Batch Size</td>
            <td align="left">128 - 512 tokens</td>
            <td align="left">1 - 16 tokens</td>
          </tr>
          <tr>
            <td align="left">Payload per GPU pair</td>
            <td align="left">Variable (depends on routing)</td>
            <td align="left">Fixed (padded to max)</td>
          </tr>
          <tr>
            <td align="left">Shape Compatibility</td>
            <td align="left">Dynamic (symbolic)</td>
            <td align="left">Static (graph-capturable)</td>
          </tr>
          <tr>
            <td align="left">QP Parallelism</td>
            <td align="left">24 QPs per connection</td>
            <td align="left">8 - 16 QPs per connection</td>
          </tr>
          <tr>
            <td align="left">RDMA Primitive</td>
            <td align="left">Two-sided SEND/RECV or one-sided PUT</td>
            <td align="left">One-sided PUT (GPU-direct RDMA, GIN)</td>
          </tr>
          <tr>
            <td align="left">GPU Initiation</td>
            <td align="left">CPU-initiated or GIN</td>
            <td align="left">GIN (device-initiated, GPU-to-NIC direct)</td>
          </tr>
          <tr>
            <td align="left">Typical per-dispatch size</td>
            <td align="left">1 - 10 MB aggregate</td>
            <td align="left">10 KB - 1 MB aggregate</td>
          </tr>
          <tr>
            <td align="left">Dispatch Frequency</td>
            <td align="left">Once per MoE layer (prefill)</td>
            <td align="left">Once per MoE layer per token (decode)</td>
          </tr>
          <tr>
            <td align="left">Latency Target</td>
            <td align="left">&lt; 1 ms per dispatch</td>
            <td align="left">&lt; 200 us per dispatch</td>
          </tr>
        </tbody>
      </table>
      <t>For a representative dense MoE configuration (M3: E=256, k=2, H_model=7168, EP=96 across 12 nodes of 8 accelerators, BF16; representative of a large publicly described MoE-class architecture), the inter-node traffic per MoE layer dispatch using T_dispatch = (B * k * H_model * 2) / N is approximately</t>
      <ul spacing="normal">
        <li>
          <t>Normal Dispatch (prefill, batch=256): 256 * 2 * 7168 * 2 bytes / 96 GPUs
= ~76 KB per GPU pair, ~870 MB aggregate across all pairs.</t>
        </li>
        <li>
          <t>Low-Latency Dispatch (decode, batch=8): 8 * 2 * 7168 * 2 bytes / 96 GPUs
= ~2.4 KB per GPU pair, ~27 MB aggregate.</t>
        </li>
      </ul>
      <t>With 61 MoE layers (representative of a publicly described large-scale MoE architecture) and a decode iteration time target of ~30 ms, the decode
phase requires 61 AllToAll dispatches within 30 ms, yielding ~2,000 dispatches
per second per decode step, consuming approximately 54 GB/s aggregate inter-node
bandwidth for the Low-Latency Dispatch path.</t>
    </section>
    <section anchor="model-architecture-parameters">
      <name>Model Architecture Parameters</name>
      <t>This appendix provides a sample calculation for the S_KV formula already provided.
It's based on a '70B parameter model at FP16 with 4K context' model</t>
      <artwork><![CDATA[
Parameter                      Symbol   Value   Source
Transformer layers             L        80      Published architecture
KV attention heads (GQA-8)     H_kv     8       H_total=64 / GQA_ratio=8
Per-head dimension             D        128     model_dim(8192) / H_total(64)
Context length                 C        4,096   Given
Precision                      P_bytes  2       FP16 = 2 bytes/element

Step-by-Step Calculation

S_KV = 2  ×  L  ×  H_kv  ×   D   ×    C    × P_bytes

 = 2  ×  80  ×   8   ×  128  ×  4,096  ×    2

Step 1:  2  × 80           =         160   (K + V tensors × layers)

Step 2:  160 × 8           =       1,280   (× KV heads)

Step 3:  1,280 × 128       =     163,840   (× head dimension)

Step 4:  163,840 × 4,096   = 671,088,640   (× context tokens)

Step 5:  671,088,640 × 2   = 1,342,177,280 bytes
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This work has benefited from the discussions that occurred during the joint IPPM and BMWG meeting and on the BMWG mailing list. Thanks to Carsten Rossenhoevel, Mohamed Boucadair, and Sowjanya Reddy for valuable review and comments.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA729+1Ib2ZY3+H8+xR5XnGipjiTuGOPj0wcE2HQZrAJc1T3d
HUQiJZDHklKtlLA5xhXfQ0zE/Ps9yzdvMk8y67fW2rfMBFzVX0xFlAEpc1/W
XnvdL91uN1nki3G2a17sZ9Ph7SSdf8qnN+YkW9wWo2Jc3Nyb62Ju9o7N8fQ6
m9MzmTnP5nd46DRbfC7mn8xRejXPh+WLJL26mmd3NFb0uHxtwvFfJMN0kd0U
8/tdk0+viyQZFcNpOqF1jObp9aI7TMd4K+1eTT7fdNO8e82DdHM7avcKw3VX
15NyeTXJyzIvpov7GQ1wfHhxlOSz+a5ZzJflYn119RU9NV1OrrL5bjIspmU2
LZclf50ltNqNJJ1nKa36wyybpwsaqDTpdGRO0ml6k02y6eJFgn3ezIvlDIA6
+fXti+RTdk8fjnYT0zVXwdbw994x/nVrxR/v35/gx1RBJtvBJ2cHJ3v4+dMv
ZpgOb/nhk+IQP0Z5md7czLMbgtXIlAL1JLnLpsuM5jXxgoyR/b/4tZAzfIuv
8fkkzcf0OUD5tzxbXPeK+Q0+T+fDW/r8drGYlbsrK3gMH+V3Wc8+toIPVq7m
xecyW8EAK3jxJl/cLq/o1Ws9p5WnjwnvjGkT5SKYzr7bk9F6efHMKCu/CzV6
t4vJ+EWSpEvC5DnARdBnDDvK5lM638L0dST6ztBpEUoc9eIPCQK7pp+Xw4L/
HBbL6QI4+3Ga40jOF9gUf5UJkO2m/jbES71hMQkm7qfzcVGaQX4zTRfpvPDz
9nuVT3ni/fEy49WaPuHkcrxg9PqudQx5qr9d0QgElWlvGA5g1/NzPjW/Lv0q
fu7ZP3n6d8v0c5bHE/Zv82kaTnSVj8e9z8u/3fLDlQ2/zZdlNpvRJvJiOCzG
AaTf9uIPH53xeJGO78MZb3TQ3rW+3zz3efH57+n0PjVn2Wh07yc+7wWf8Kx7
s9k4+064ljTqnF7/2w3+5imTaTGfENm44zt5dtRfW99c11/XtzY37a87O6/0
1+2NTffrztqW/rqzvrHjf+UHLg7PTo5PP7z/8PbfCBDdg95juL/I5pN8yuQa
r53tHZ8en77t7h+e9t898+Y8zaeEFnJp6OWPh/3uWm91l3dtecPHMT1nDhe3
hEvZwlzM02k5K+YL0/p4eNE257NsmF/nQyaeht5+wW/7q4f/ugLtylDAbBoo
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

-->

</rfc>
