<?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-03" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.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-03"/>
    <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="July" day="06"/>
    <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 81?>

<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 determines
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 comparison across NIC transport
stacks (RoCEv2 and UET) and fabric architectures.</t>
      <t>This document is a companion to the AI training fabric benchmarking
methodology, 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 103?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Large Language Model (LLM) inference now consumes datacenter network capacity
at a scale comparable to training, but with different fabric requirements.
Training workloads generate bulk synchronous collective operations –
AllReduce, AllGather – at predictable intervals. Inference workloads produce
bursty, latency-sensitive request/response patterns with strict Service Level
Objectives (SLOs) on per-token latency and time-to-first-token.</t>
      <t>Disaggregated serving architectures physically separate the prefill phase
(prompt processing) from the decode phase (token generation). This separation
creates a new category 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 per configuration),
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>Training workloads generate bulk synchronous collective communication
(AllReduce, AllGather) with high bandwidth utilization and periodic
synchronization barriers; inference workloads generate bursty, latency-sensitive
point-to-point transfers (KV cache) and fine-grained AllToAll dispatch for 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, so superspine bandwidth and latency directly
affect KV cache transfer performance.</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) <xref target="UEC-1.0"/>.  </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    intra-node (out of scope)
NIC --> [ETHERNET FABRIC] --> NIC    DUT (in scope)
NIC --> [PCIe/CXL] --> GPU Memory    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="reporting"/>, 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, Primary
Throughput KPIs, Fabric-Level KPIs, and Fabric Health Indicators. Each tier is
defined in the subsections below.</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 pass/fail criteria. 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 criteria 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">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>
            <tr>
              <td align="left">Prefix_cache_hit_rate</td>
              <td align="left">%</td>
              <td align="left">Fraction of requests whose shared prefix KV cache segment is already resident on the assigned worker, avoiding a fabric transfer</td>
              <td align="left">SUT-E request router counters</td>
            </tr>
            <tr>
              <td align="left">JFI_decode</td>
              <td align="left">dimensionless (0-1)</td>
              <td align="left">Jain Fairness Index of per-decode-worker load (KV cache receive rate, GPU utilization, output TPS)</td>
              <td align="left">SUT-E per-worker counters</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, reported per NIC port and as the aggregate between prefill and decode pools</td>
              <td align="left">DUT-N, DUT-PD</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. This test
characterizes the disaggregated-serving KV cache transfer path under normal
serving conditions on a configured xPyD cluster; the single-request unloaded
TTFT baseline is established separately in <xref target="ttft-prompt-length"/>.</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 Inference_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) across the TPS_output, TTFT, and ITL
trade-off, that is, the ratios for which no other ratio improves one metric
without worsening another. For reference, an illustrative interactive-serving
objective is TTFT P99 &lt; 500 ms and ITL P99 &lt; 50 ms; these values are provided
for context only and are not benchmark requirements or acceptance criteria.</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 per GPU pair (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">21.8 KB</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">76.5 KB</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">38.2 KB</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">153 KB</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>NOTE: T_dispatch values are the per-GPU-pair payload computed from the
T_dispatch formula above (e.g., M1: 128 x 2 x 4096 x 2 bytes / 96 =
21,845 bytes = 21.8 KB). The aggregate fabric load per dispatch is
T_dispatch multiplied by the number of communicating GPU pairs; see the
MoE AllToAll appendix for a worked example.</t>
        <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>Procedure:</strong> Execute the AllToAll dispatch procedure of the preceding
AllToAll Dispatch Throughput test in both Normal Dispatch and Low-Latency
Dispatch modes. Repeat the sequence for each selected routing mode from
<xref target="tbl-routing-modes"/>, holding message sizes, EP group size, and iteration
count constant across dispatch and routing modes so that results are
directly comparable.</t>
        <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 PFC Storm and Deadlock Resilience test of
<xref target="TRAINING-BENCH"/>, 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 Inference_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 that mix large KV cache flows with 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-prompt-length">
        <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. This test establishes the
single-request, unloaded-fabric baseline (no concurrent load), complementing
<xref target="end-to-end-disaggregated-ttft"/>, which measures the same decomposition under
normal serving conditions on a disaggregated xPyD configuration.</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 reference 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.54 GB</td>
              <td align="left">4.3 GB</td>
              <td align="left">17.2 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.7 GB</td>
              <td align="left">43.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.9 GB</td>
              <td align="left">103 GB</td>
              <td align="left">412 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>NOTE: S_KV values are computed per the S_KV formula in <xref target="TERMINOLOGY"/>
(S_KV = 2 x L x H_kv x D x C x P_bytes) using binary context lengths
(4K = 4,096; 32K = 32,768; 128K = 131,072 tokens) and are expressed in
decimal gigabytes (1 GB = 10^9 bytes).</t>
        <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 with 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 until either
TTFT P99 or ITL P99 exceeds the declared SLO pair (e.g., TTFT P99 &gt; 500 ms,
ITL P99 &gt; 50 ms). At each rate, measure
TPS_output, TPS_input, Inference_Goodput, and all latency KPIs.</t>
        <t>NOTE: For reference, interactive serving deployments typically target TTFT
&lt; 500 ms and ITL &lt; 50 ms P99; these values are informative only and not
requirements of this methodology.</t>
        <t><strong>Measurement:</strong> Report TPS_output, TPS_input, Inference_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 Inference_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 Inference_Goodput reduction.</t>
        <t><strong>Measurement:</strong> Report Inference_Goodput, eviction rate (evictions/s), preemption rate
(preemptions/s), wasted fabric bandwidth (GB/s), and the Inference_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 maintaining the declared SLO pair.</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>
        <t>This test is conducted under controlled laboratory conditions with a simulated
autoscaler. It does not apply to live serving infrastructure.</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. Report the NIC QP error count, the routing flap count, and the
variation in TTFT P99 over the test duration. Any nonzero QP error or routing
flap count, or TTFT P99 variation exceeding 1%, is reported and investigated;
these thresholds are reporting triggers for investigation, not pass/fail
criteria.</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. Where BusBW is reported (e.g., in the MoE expert
parallelism tests), results <bcp14>MUST</bcp14> follow the BusBW reporting format
defined in Section 3 of <xref target="TERMINOLOGY"/>. 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="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>
            <author fullname="Sowjanya Reddy" initials="S." surname="Reddy">
              <organization>Apple</organization>
            </author>
            <date day="4" month="June" 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
   "Benchmarking Terminology for Network Interconnect Devices" [RFC1242]
   and "Data Center Benchmarking Terminology" [RFC8238], 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 the AI training fabric benchmarking
   methodology [I-D.calabria-bmwg-ai-fabric-training-bench] and the AI
   inference fabric benchmarking methodology
   [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 the
   foundational benchmarking terminology in [RFC1242] or [RFC8238], this
   document provides AI fabric context extensions and refinements; the
   foundational definitions in those RFCs remain authoritative for
   general network benchmarking.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-calabria-bmwg-ai-fabric-terminology-02"/>
        </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>
            <author fullname="Sowjanya Reddy" initials="S." surname="Reddy">
              <organization>Apple</organization>
            </author>
            <date day="4" month="June" 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 Artificial Intelligence / Machine Learning
   (AI/ML) training clusters grow to tens of thousands of accelerators
   (GPUs or generic accelerator processing units (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 Remote Direct Memory Access (RDMA)
   over Converged Ethernet version 2 (RoCEv2) transport, the Ultra
   Ethernet Transport (UET) protocol defined by the Ultra Ethernet
   Consortium (UEC) Specification 1.0 [UEC-1.0], congestion management
   (Priority Flow Control (PFC), Explicit Congestion Notification (ECN),
   Data Center Quantized Congestion Notification (DCQCN), Credit-Based
   Flow Control (CBFC)), load balancing strategies (Equal-Cost Multi-
   Path (ECMP), Dynamic Load Balancing (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-02"/>
        </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="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 1145?>

<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">TTFT_fabric</td>
            <td align="left">6.1, 10.1</td>
            <td align="left">DUT-PD</td>
          </tr>
          <tr>
            <td align="left">ITL_fabric</td>
            <td align="left">10.2</td>
            <td align="left">DUT-F</td>
          </tr>
          <tr>
            <td align="left">E2E_latency</td>
            <td align="left">10.3</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">TPS_per_GPU</td>
            <td align="left">11.2</td>
            <td align="left">SUT-E</td>
          </tr>
          <tr>
            <td align="left">Inference_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</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.3, 12.2</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</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"/>. The values reflect 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 criteria 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 (<xref target="kv-frame"/>)</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 the UET Frame Format appendix of <xref target="TRAINING-BENCH"/> applies; the UDP destination 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 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, ~700 MB aggregate across all 96 x 95 = 9,120 pairs.</t>
        </li>
        <li>
          <t>Low-Latency Dispatch (decode, batch=8): 8 * 2 * 7168 * 2 bytes / 96 GPUs
= ~2.4 KB per GPU pair, ~22 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. This yields 61 dispatches
per decode step, or approximately 2,000 dispatches per second, and consumes
approximately 45 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 defined in
<xref target="TERMINOLOGY"/>.
It is based on a 70B-parameter dense model at FP16 with 4K context.</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)/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 and Mohamed Boucadair for valuable review and comments.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA729+1IbWbY3+H8+xZ6q6BipWhKImzFu92kQYNNlsApw1ek5
5wyRSAlkW1LqKCXbHOOK7x1mIubfeZaZN/meZNZvrbVvmQm26/tiKqIMSJn7
svba637pdrvJMl9Osj3zw0E2G91N08X7fHZrTrPlXTEuJsXtvbkpFmb/xJzM
brIFPZOZi2zxAQ+dZcuPxeK9OU6vF/mo/CFJr68X2QcaK3pcvjbh+D8ko3SZ
3RaL+z2Tz26KJBkXo1k6pXWMF+nNsjtKJ3gr7V5PP95207x7w4N0cztq9xrD
ddc3k3J1Pc3LMi9my/s5DXBydHmc5PPFnlkuVuVyY339+fpGMltNr7PFXjIq
ZmU2K1clf50ltNrNJF1kKa367TxbpEsaqDTpbGxO01l6m02z2fKHBPu8XRSr
OQB1+turH5L32T19ON5LTNdcB1vD3/sn+NetFX+8eXOKHzMFmWwHn5wfnu7j
58+/mlE6uuOHT4sj/BjnZXp7u8huCVZjUwrUk+RDNltlNK+JF2SM7P+H3wo5
w1f4Gp9P03xCnwOUf8uz5U2vWNzi83QxuqPP75bLebm3tobH8FH+IevZx9bw
wdr1ovhYZmsYYA0v3ubLu9U1vXqj57T29DHhnQltolwG09l3ezJaLy++Msra
d6FG7245nfyQJOmKMHkBcBH0GcOOs8WMzrcwAx2JvjN0WoQSx734Q4LAnhnk
5ajgP0fFarYEzr6b5TiSiyU2xV9lAmS7qb+N8FJvVEyDiQfpYlKUZpjfztJl
uij8vINe5VOe+GCyyni1ZkA4uZosGb2+aR0jnupv1zQCQWXWG4UD2PX8ks/M
byu/il969k+e/vUq/Zjl8YSDu3yWhhNd55NJ7+Pqb3f8cGXDr/JVmc3ntIm8
GI2KSQDpV734w0dnPFmmk/twxlsdtHej7zfPfVF8/Gc6u0/NeTYe3/uJL3rB
Jzzr/nw+yb4RriWNuqDX/3aLv3nKZFYspkQ2PvCdPD8e9De2NvTXje2tLfvr
7u5z/XVnc8v9utvf1l93NzZ38evl0fnpydnbN29f/YN23z3sPYbwy2wxzWdM
o/Ha+f7J2cnZq+7B0dng9VfeXKT5jHBBbgq9/O5o0O331vd4q5YhvJvQc+Zo
eUcIlC3N5SKdlfNisTStd0eXbXMxz0b5TT5iimno7R/4bX/f8F9XQFwZCuhM
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
WSWL4ISFO5E1OY2hqeOJ+utJ7RsS32EZB21qJNiAtvD7778nXjio/3fBPJB+
EdOa6nCJaIGIcl9Y9HP/vbG/7K7zj+HKJjGFmIZ6kF7HvWNHANqSdHfbRjpj
8BAy0usrFsvQSmUN/WWuGCtf7iJCv8sRhmPCzxm7mtx/rhEKhAv6j0FBVGja
QpG+9trOVjKImmvEO3ddXbjXhjGvUL85IVlJ+p82wMo2gKC7zf8xyF/am76m
adVJckEIjWQX/CSt2qEAfWMbhJj/9/9iQOKHAAO/8Zb4F1kd/apzJol/DWDn
h3b1ad4/ftGdyAgbshDT3zP6pp6X/PfS/dbfweetn82fza+kAsxKBEbT43Lu
bR1mY0+exDgNw/Q7Gzx8i76nPfJ521c39+z39KUelnu1v7PZ2d2yr8ZnbQfY
2vPP0UO6TRpg51m/s76729lxA9h2KrZ9gwywTQOEz9KDGzxAv7O5tdHpP3vG
yxNQ48rQ1d8fvZ+hle1YnIYkG0gwcTZ++cNNOimZyTMBCNwuM7rPLkSZiWde
jlZl0FDX9R4OqsH9k0sjngyHp0zYOKzJFu7m4JuZD3eapjn7kVDRCAQ2nb1n
D9sgJd0bOh3xtGx2V9iC9kTC7lIkqxwUq1E6hkgNSsRhQtxjnKTA7KMS1KmG
9fx/30rUt+gaAQA=

-->

</rfc>
