<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-calabria-bpm-ai-fabric-inference-bench-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="AI Inference Fabric Benchmarking">Benchmarking Methodology for AI Inference Serving Network Fabrics</title>
    <seriesInfo name="Internet-Draft" value="draft-calabria-bpm-ai-fabric-inference-bench-00"/>
    <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="October" day="30"/>
    <area>Operations and Management</area>
    <workgroup>BPM</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 94?>

<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-bpm-ai-fabric-inference-bench.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-calabria-bpm-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 116?>

<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, or 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"/> and <xref target="RFC2544"/>, with additional background from
<xref target="RFC2889"/> and <xref target="RFC6349"/>. <xref target="RFC8238"/> and <xref target="RFC8239"/> establish data center
benchmarking terminology and methodology that this document extends for AI
inference fabric traffic patterns.</t>
        <t>The test structure follows RFC 2544 conventions for trial duration (minimum 60
seconds) and reporting format (graphical and tabular); statistical repetition
(minimum 20 trials per configuration) is a convention of this document and is
not defined by RFC 2544.</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 <xref target="model-architecture-parameters"/>.</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 remain
applicable and retain their labels there: Topology A (2-Tier Clos), Topology B
(3-Tier Clos), and Topology C (Rail-Optimized). Inference serving introduces an
additional topology consideration related to disaggregated prefill/decode
placement and MoE expert distribution, labelled Topology D below to avoid
collision with the training document's Topology C.</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-d-disaggregated-prefilldecode-placement">
          <name>Topology D: 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 align="center"><![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 (the RDMA WRITE verb; PUT is used throughout this document as the general term, with WRITE used where the literal RC opcode name matters, e.g., <xref target="kv-frame"/>) or PUT-with-signal (RDMA WRITE with Immediate Data) 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-tg-minimum-requirements">
          <name>Hardware Traffic Generator (TG) - 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 1 GB
(large KV cache block), to cover the message sizes used in <xref target="test-cat1"/>.</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 ≤ 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-and-efficiency-kpis">
        <name>Primary Throughput and Efficiency KPIs</name>
        <table anchor="tab-throughput-kpis">
          <name>Primary Throughput and Efficiency 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), one value per metric</td>
              <td align="left">Jain's Fairness Index per <xref target="TERMINOLOGY"/>, computed separately for each of: per-decode-worker KV cache receive rate, GPU utilization, and output TPS. Reports state which of the three the value applies to; results are not combined into a single index</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, DUT-PD</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">Typical Healthy Range</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 (contextual)</td>
              <td align="left">&gt; 90% of theoretical</td>
              <td align="left">PCIe bandwidth utilization between GPU and NIC (generation- and width-dependent). Intra-node segment, outside the DUT boundary per <xref target="TERMINOLOGY"/>; reported as context because a starved PCIe link presents as fabric underperformance</td>
            </tr>
          </tbody>
        </table>
        <t>NOTE: Per the BMWG charter, the definition of acceptance criteria or performance requirements is explicitly outside the scope of this Working Group. The values above are indicative of a healthy fabric under normal operating conditions, not pass/fail criteria; deployment-specific thresholds are outside the scope of this document.</t>
      </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's 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, restricted to fabric-traversing (remote) tier
pairs: GPU HBM to remote GPU HBM (inter-node RDMA), GPU HBM to remote CPU
DRAM (offload), remote CPU DRAM to GPU HBM (reload), and GPU HBM to remote
NVMe/SSD (persistent cache on a remote storage node). Same-node (local) tier
pairs are pure intra-node PCIe transfers with zero DUT/fabric involvement and
are out of scope per the Scope and Purpose section of <xref target="TERMINOLOGY"/>.</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.
Repeat the workload across EP group sizes 8, 16, 32, 48, 64, 96 and a range
of per-GPU batch sizes (e.g., 32, 64, 128, 256 tokens), holding the selected
canonical MoE test matrix config row constant, to populate the
EP-size-by-batch-size grid used in the Reporting Format below.
The dispatch payload per source-destination GPU pair per MoE layer is:</t>
        <t>T_dispatch = (B × k × H_model × P_bytes) / N. where B = per-GPU 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>The corresponding total egress per GPU per MoE layer, summed over its N-1
destination peers, is:</t>
        <t>T_egress = B × k × H_model × P_bytes × (N - 1) / N</t>
        <t>T_egress, not T_dispatch, characterizes the per-accelerator offered load: it
equals T_dispatch × (N - 1). The portion of T_egress that crosses the Fabric
DUT Boundary counts only inter-node destination peers; this quantity is the
Fabric-Visible Data Volume (S_fabric) defined in <xref target="TERMINOLOGY"/>, and expert
placement across nodes determines it. Two results obtained at equal B, k, and
N but different expert placement therefore represent different offered fabric
workloads. See the MoE AllToAll appendix for a worked example in which 88 of
95 destination peers are inter-node.</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 × 2 × 4096 × 2 bytes / 96 =
21,845 bytes ≈ 21.8 KB, decimal KB, 1 KB = 1,000 bytes). 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=16 latency) / (EP=N latency), using EP=16 as the
wide-EP baseline (the first configuration requiring inter-node fabric
communication).</t>
        <t>Because S_fabric varies with EP group size and expert placement, the EP=8
configuration presents no dispatch traffic to the fabric and is reported as a
placement reference point rather than as a fabric result. Report S_fabric at
each EP size per <xref target="reporting"/>; the scaling curve is interpreted against that
series, since a change in dispatch latency across EP sizes reflects both the
change in offered fabric work and the fabric's response to it.</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's 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="jains-fairness-index-for-decode-worker-utilization">
        <name>Jain's 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=[value], H_kv=[value], D=[value], P=[value]</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 × L × H_kv × D × C × 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 long-output requests (e.g., 2048 output tokens each) and
record the timestamp of each emitted token. A single 2048-token request yields
at most 2,047 ITL samples, so requests are repeated (and/or issued
concurrently) until the per-condition sample requirement below is met; the
request count and concurrency level used are reported. 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. A 10% degradation from
the minimal-configuration baseline is used in this document as an
illustrative reporting point for identifying the scale limit; per the BMWG
charter, the definition of acceptance criteria or performance requirements is
explicitly outside the scope of this Working Group, and this value is not a
pass/fail threshold. Deployment-specific scale limits are outside the scope
of this document.</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 60
seconds: 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%, <bcp14>MUST</bcp14> be 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 reporting requirements
stated in the BusBW definition of <xref target="TERMINOLOGY"/>. The report identifies this
document and <xref target="TERMINOLOGY"/> by name and revision. The Test Configuration,
Observation Points, and Trial Accounting elements of the Reporting Format of
<xref target="TRAINING-BENCH"/> apply to this document without change. 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. The DUT/SUT configuration fixes the measurement boundary of the
result (<xref target="tab-dut"/>). Results obtained at different boundaries are not
compared with each other or combined; for example, a KV_xfer_latency
measured from PUT posting to remote completion (DUT-N or DUT-PD) is not
compared with a NIC-to-NIC latency measured at DUT-F. When a latency is
measured at a boundary wider than DUT-F, the report states the timestamps
used and, where the test equipment observes the NIC Ethernet ports, reports
the fabric-segment component separately, as in the TTFT decomposition of
<xref target="end-to-end-disaggregated-ttft"/>.</t>
        </li>
        <li>
          <t><strong>Fabric-Visible Data Volume Report:</strong> for every MoE AllToAll result reported
under <xref target="test-cat3"/>, the report states: the application-level dispatch volume
per participant (T_egress); the Fabric-Visible Data Volume (S_fabric) defined
in <xref target="TERMINOLOGY"/>, counted in application payload bytes with each byte
counted once per the Fabric_Goodput byte-counting rule of that document,
together with the method used to obtain it (measurement
from NIC Ethernet port counters is preferred; derivation from the routing
function and the expert placement is acceptable when the derivation is
stated). Retransmitted and duplicate bytes <bcp14>MUST NOT</bcp14> be included in S_fabric;
under this rule the two methods return the same value, and where both are
available and they disagree the report gives both values and the difference.
The report also states the expert placement across nodes, including EP group
size and accelerators per node. Intra-node transfer contributions are reported as a
separately labelled component per <xref target="scope-and-applicability"/> and are never
added to, subtracted from, or folded into a fabric KPI. Comparisons between
fabrics use the same expert placement on both sides; where placement cannot be
matched, the report gives S_fabric for each result so that the difference in
offered fabric work is visible, and the results are not presented as an
equal-workload comparison. Where a report needs to account for forwarding work
inside the Fabric DUT when explaining a difference between MoE AllToAll
results that match on S_fabric and expert placement, the optional diagnostic
profile defined in the companion training methodology document
(<xref target="TRAINING-BENCH"/>) may be applied; it does not alter S_fabric or any KPI
defined here.</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 (values reported; the Typical Healthy Range column is informative, not a pass/fail requirement)</td>
          </tr>
          <tr>
            <td align="left">Fabric-Visible Data Volume</td>
            <td align="left">S_fabric with derivation method and expert placement</td>
            <td align="left">Yes (required) for <xref target="test-cat3"/> results</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 hop-by-hop flow-control mechanisms referenced in this document (PFC, CBFC) propagate backpressure toward traffic sources and can extend the blast radius of a misconfigured test beyond the immediate DUT; DCQCN reduces, but does not eliminate, reliance on these mechanisms.</t>
      <t>Benchmarking is performed on a "black-box" basis, relying on measurements observable external to the DUT as defined in <xref target="TERMINOLOGY"/>. DUT-reported values (e.g., switch queue occupancy) are used only under the conditions stated in the Security Considerations of <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 cause adjacent production switches sharing the same priority class to stop responding. 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 document has no IANA actions.</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="RFC6815">
          <front>
            <title>Applicability Statement for RFC 2544: Use on Production Networks Considered Harmful</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <author fullname="K. Dubray" initials="K." surname="Dubray"/>
            <author fullname="J. McQuaid" initials="J." surname="McQuaid"/>
            <author fullname="A. Morton" initials="A." surname="Morton"/>
            <date month="November" year="2012"/>
            <abstract>
              <t>The Benchmarking Methodology Working Group (BMWG) has been developing key performance metrics and laboratory test methods since 1990, and continues this work at present. The methods described in RFC 2544 are intended to generate traffic that overloads network device resources in order to assess their capacity. Overload of shared resources would likely be harmful to user traffic performance on a production network, and there are further negative consequences identified with production application of the methods. This memo clarifies the scope of RFC 2544 and other IETF BMWG benchmarking work for isolated test environments only, and it encourages new standards activity for measurement methods applicable outside that scope. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6815"/>
          <seriesInfo name="DOI" value="10.17487/RFC6815"/>
        </reference>
        <reference anchor="RFC8238">
          <front>
            <title>Data Center Benchmarking Terminology</title>
            <author fullname="L. Avramov" initials="L." surname="Avramov"/>
            <author fullname="J. Rapp" initials="J." surname="Rapp"/>
            <date month="August" year="2017"/>
            <abstract>
              <t>The purposes of this informational document are to establish definitions and describe measurement techniques for data center benchmarking, as well as to introduce new terminology applicable to performance evaluations of data center network equipment. This document establishes the important concepts for benchmarking network switches and routers in the data center and is a prerequisite for the test methodology document (RFC 8239). Many of these terms and methods may be applicable to network equipment beyond the scope of this document as the technologies originally applied in the data center are deployed elsewhere.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8238"/>
          <seriesInfo name="DOI" value="10.17487/RFC8238"/>
        </reference>
        <reference anchor="RFC8239">
          <front>
            <title>Data Center Benchmarking Methodology</title>
            <author fullname="L. Avramov" initials="L." surname="Avramov"/>
            <author fullname="J. Rapp" initials="J." surname="Rapp"/>
            <date month="August" year="2017"/>
            <abstract>
              <t>The purpose of this informational document is to establish test and evaluation methodology and measurement techniques for physical network equipment in the data center. RFC 8238 is a prerequisite for this document, as it contains terminology that is considered normative. Many of these terms and methods may be applicable beyond the scope of this document as the technologies originally applied in the data center are deployed elsewhere.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8239"/>
          <seriesInfo name="DOI" value="10.17487/RFC8239"/>
        </reference>
        <reference anchor="TERMINOLOGY">
          <front>
            <title>Benchmarking Terminology for AI Network Fabrics</title>
            <author fullname="Fernando Calabria" initials="F." surname="Calabria">
              <organization>Cisco</organization>
            </author>
            <author fullname="Carlos Pignataro" initials="C." surname="Pignataro">
              <organization>Blue Fern Consulting</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Giuseppe Fioccola" initials="G." surname="Fioccola">
              <organization>Huawei</organization>
            </author>
            <author fullname="Sowjanya Reddy" initials="S." surname="Reddy">
              <organization>Apple</organization>
            </author>
            <date day="30" month="October" 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 consolidates
   and extends terms from "Benchmarking Terminology for Network
   Interconnect Devices" (RFC 1242) and "Data Center Benchmarking
   Terminology" (RFC 8238).  Definitions cover 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 and inference fabric
   benchmarking methodology documents.  Those documents are intended to
   be read together with the terminology defined here.  Where
   definitions herein overlap with the foundational benchmarking
   terminology in RFC 1242 or RFC 8238, 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-bpm-ai-fabric-terminology-00"/>
        </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="30" month="October" 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 determines 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.  The tests cover 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, 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 switch
   ASICs, NIC transport stacks (RoCEv2 and UET), and fabric
   architectures (2-tier Clos, 3-tier Clos, and rail-optimized).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-calabria-bpm-ai-fabric-training-bench-00"/>
        </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="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="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>
        <reference anchor="IBTA-ROCE" target="https://www.infinibandta.org">
          <front>
            <title>InfiniBand Architecture Specification Volume 1, Annex A17: RoCEv2</title>
            <author>
              <organization>InfiniBand Trade Association</organization>
            </author>
            <date year="2014" month="September"/>
          </front>
        </reference>
        <reference anchor="DEEPEP" target="https://github.com/deepseek-ai/DeepEP">
          <front>
            <title>DeepEP: an efficient expert-parallel communication library</title>
            <author>
              <organization>DeepSeek AI</organization>
            </author>
            <date year="2025"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1240?>

<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; 20% of the TTFT P99 budget</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) <xref target="IBTA-ROCE"/>.</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 Only with Immediate Data) for the single-packet reference frame defined here; segmented transfers use OpCodes 0x06/0x07/0x08/0x09 (see Notes); 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">ImmDt (Immediate Data)</td>
            <td align="left">4B</td>
            <td align="left">Present only for OpCode 0x0B (RDMA WRITE Only with Immediate Data), used for PUT-with-signal completion signalling. Omit this row for OpCode 0x0A and shift subsequent offsets back by 4B</td>
          </tr>
          <tr>
            <td align="left">78 / 98</td>
            <td align="left">KV Cache Payload</td>
            <td align="left">variable, up to MTU</td>
            <td align="left">Key/value attention state data (starts at 74 / 94 when ImmDt is absent)</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 RDMA path MTU for RoCEv2 deployments is 4096 bytes (requiring an Ethernet frame MTU of approximately 4200+ bytes, i.e., jumbo frames, to carry the RoCEv2/IP/UDP/BTH/RETH header overhead); 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 0x09 (RDMA WRITE Last with Immediate Data) for PUT-with-signal completion signalling. (0x0B, RDMA WRITE Only with Immediate Data, is a single-packet opcode and cannot terminate a First/Middle sequence.) In segmented sequences the RETH is carried only in the First (0x06) packet; a Last-with-Immediate packet (0x09) carries the 4B ImmDt immediately following the BTH, with no RETH.</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 <xref target="DEEPEP"/></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>NOTE: The QP Parallelism values are DeepEP <xref target="DEEPEP"/> implementation defaults, shown as an illustrative example; they are not a normative requirement of this methodology and <bcp14>MAY</bcp14> differ across CCL implementations.</t>
      <t>For a representative MoE configuration (M3: E=256, k=2, H_model=7168, EP=96 across 12 nodes of 8 accelerators, BF16), 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.5 KB per GPU pair. Of the 96 × 95 = 9,120 total ordered GPU pairs, only
96 × 88 = 8,448 cross the fabric (the remaining 672 pairs are intra-node,
within each of the 12 8-GPU nodes, and do not traverse the fabric).
Fabric-Visible Data Volume (S_fabric), aggregate: ~76.5 KB × 8,448 ≈ 646 MB.</t>
        </li>
        <li>
          <t>Low-Latency Dispatch (decode, batch=8): 8 × 2 × 7168 × 2 bytes / 96 GPUs
= ~2.4 KB per GPU pair; S_fabric aggregate (8,448 pairs): ~2.4 KB × 8,448
≈ 20.2 MB.</t>
        </li>
      </ul>
      <t>Both figures are derived from the expert placement rather than measured; a
report using this derivation states it, per the Fabric-Visible Data Volume
reporting element of <xref target="reporting"/>.</t>
      <t>With 61 MoE layers 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 41 GB/s (61 × ~20.2 MB / 30 ms)
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. Thanks to Andrew Yourtchenko for a thorough review of the document set. Thanks to Niangen Ye for the review comments on Fabric-Visible Data Volume provenance and on forwarding-work accounting, which prompted the byte-counting rule stated in this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA829XVMb2ZY2eJ+/Yo8rTrRURxIIY4zx8ekDAmxOGawCXNVn
unuIREogjyWlWilh08YV7+Xb1zMRczsX80tm/kn/klnPWmt/ZSbYrrdj4q2I
wiBl7o+1117fH91uN1nmy0m2Y57sZbPRzTRdfMhn1+Y4W94U42JSXN+Zq2Jh
do/M0ewqW9AzmTnLFrd46CRbfiwWH8xhernIR+WTJL28XGS3NFb0uHxtwvGf
JKN0mV0Xi7sdk8+uiiQZF6NZOqV1jBfp1bI7Sid4K+1ezqfdNO9e8Rjd3A7a
vcRo3fX1pFxdTvOyzIvZ8m5O7x8dnB8m+XyxY5aLVbncWF9/sb6RzFbTy2yx
k4yKWZnNylXJX2cJLfZpki6ylBb9bp4t0iUNVJp0NjbH6Sy9zqbZbPkkwTav
F8VqDjgNj58kH7I7+my8k5iuuQw2hr93j/DTLRV/vH17jH9mCjDZDT453T/e
xb8//WJG6eiGHz4uDvDPOC/T6+tFdk2QGptSYJ4kt9lsldG8xq3n+NfXT+hv
2f6TXws5wdf4Gp9P03xCn19OP17/Jc+WV71icY3P08Xohj6/WS7n5c7aGh7D
R/lt1rOPreGDtctF8bHM1jDAGl68zpc3q0t69UpPib96+JTwzoQ2US6D6ey7
PRmtlxdfGWXtexCjd7OcTp4kSboiNF4AWgR8Rq/DbDGj0y3MQAei7wwdFiHE
YS/+kACwYwZ5OSr4z1Gxmi2BsO9nOU7kbIk98VeZwNju6S8jvNQbFdNg4kG6
mBSlGebXs3SZLgo/76BX+ZQn3pusMl6tGRBGriZLxq5vWseIp/rLJY1AUJn1
RuEAdj0/5zPz68qv4uee/ZOnf7NKP2Z5POHgJp+l4USX+WTS+7j6yw0/XNnw
63xVZvM5bSIvRqNiEkD6dS/+8MEZj5bp5C6c8VoH7V3p+81znxUf/57O7lJz
mo3Hd37is17wCc+6O59Psm+Ea0mjLuj1v1zjb54ymRWLKRGNW76Sp4eD/sbm
hv668WxzU3/d2u4/01+3N55u+19f4Nfzg9Pjo5N3b9+9/httubvfewDJl9li
ms+YKOOt092jk6OT1929g5PBm8dfXKT5jI5fLge9+/5g0O331nd4d5YBvJ/Q
c+ZgeUM4ky3N+SKdlfNisTSt9wfnbXM2z0b5VT5iEmno7Sf8tr9i+K8rUK0M
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
jF02kxOZJ8nt+jpbiG5dNyBI+rx4XdRcaFPuxR5SB7CX55Pkxx9dpUyOaCx8
FWDx6NV008cE3cQeiBO7K5GvICEs9drvYz8Nfy3yIY6JEy5tbRqEF2ssGVZq
fViZH4vxycZdgkP+PGw7FAnDg4PEDKJaXJmg7JmzTBbGsUcjRuLHYzBZQFOX
ZyIuzxGYFAxkrOaSNFJRO/gpWx7X+0rdpIkNtd4xW+KY1b2lLhqWHbMd9oj+
tNcxfXNMPzf5Z3+L/9nivxI8cbxnHbfqPHRVF4R1w7nbA6MVBTdcU8cW2iI9
ZZmEuMASmSIEewU1gBynd+WTqsRzu7WuViKxGHHBl15Cum+Wim2lT6vvmG2s
vmOebmD5uraN7bBI589DBdy+BLl6WT7xcSlcRrjAP4wxgXUQOHNKC1lEIYQt
aCwEi0GsrEMs4PAFhx6dxMeuWPOvD9IhWZMo7rjj2KSLLCiurpiwBIPzLrhU
MraxYEiA10X+7nUxZdcr42gQJGGECN+JZZa84VNX8+SQHR+ya28wCDlrqilk
nCzANXwk8j5CzNakuJYSqm1r1vknQ3hQVoMxBZL2mb/xM73kzKUTsg/OWVKs
zx81aL1jhleCwoda2cKJKQApvkx4rNzWy+FNE8Wrkzi1Nn+dvlllOa7W9YCx
gMizI07GEydlr7epqDZ83p611knX+9JW7igRSW1xrHrOpXDMZ72+q13AVLGq
+cZLbyBUPWd8D7xpLj04YREmDQvq4nWOPiliuqm3i+1c86V92q8n0VjvIoq/
Z7Hxqh4S3hYjLyIwbeLZkq1oCJsOd/lvkIRdgJQ7MoH6agZ4ZyHEHdGEYEIC
GWhx4sAhDFNebng1KARmVSMiVBvP/tAxz9bpx3P6jV3ZKk3bMihap7uNdYZB
MIqpQs4tuRZCzcMIlW6mVqyyuuDnpRk+W++Y4Ytn+PFCKwi+eNF7ASqBrCQu
u/qN1EUKb0FYROxHSo/3Nzyp5kuKYJsIJ4X+2tTOkbdV0SpkNc/WSWCBAGlX
Xc5hG0Z+TBLTHgJ/DilejLS/g3hJbC3z4BH6bkgZsyRmYcFp8rXkMM9OlFdK
+7e7VRgSUVL040gNElYH+4ek3RaM8j4f1UfKMGErs4nkU1WKItfI1cAztTrl
OpMIzSbKBd2D1EACHBFm1Br2RsNHk2GlwURpTY3ePxNwV73iYG16bf1IqoKi
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
0/Rbm9/3/Gbw+/P+1rb+ttV79n3Lffo90/opwa6/6/ngd7/cp9u9je9b7ndB
KZj+O5e7Hfzul9t/9vSbVyvLffYdswZTtoK2tF1Ls//zv/0ftkMt7H2+Nw2o
Qfh2/bdvXDDnqFxOutMi66popXkqD9I/n6gSUKHAcma5KrzRIhKp6ORSnV0k
aDCA6/TDKSYqixz3dzi0ijjuBn7wJeU/hPGvQfp8lWz0O9ubz/Sz//yP/26v
cAcWHzZtSiTkTxCp+p319XV5Vvm3t07YUCMr6LnV5WW4VrbKSe1tjRILLSBO
F0IKjRLmUnpGYc/fzrm+KTLLa9RhYFatzgdCr5LYpOKDW/LxRDxj5mOa2waW
fvM+MvZbnUTNkeS/w/55QxNM07mmpkbyZ8X7E0jI1cCrxrjx1LbPnKD3g5WP
4QHy3Yss8MQnFIZVNubSe50ERvSPkOGhZogN+/hZx+fXs3/0gKUl5elOMNeQ
fpVIZDqrqFjJi9fTs7eQS3BVxdigQka4971VufdrxRfoGuc1JlmTLIF3pL+N
3l8bUiTfPFob4yWNf12QMDrSWmDiURLccH1FUXRQnLnocC0ddnExXGGHCQpi
LW+kvZQt9CVqIpu9FiRI0xmqR1T+CN6idXFrrBJR5uL/gQHDDoSycbZqb1B+
jOsmLVzYOaN9FGaPTlmqeR3btnvO2sCfcLfbRV4+EFnH32YNFTatEO5JDkvj
1kIT1hHuGamOKUURTyTlzq0Cb7wtPnZtQL79omf0NW3+6RteTe50KBenDWdD
OoFpRQtb6Qq4dibT8s+fwUP0c24RVGrMQgQfW0FNJGj+6Pcxy7g4sS3EqSbf
3y3v1oTVmugq5VwR4Y804XPWvb9n3VJKjW02bGjjCMgP3P4AxryS1GkAy1pv
7s0hbkvH1lpssEbdir7HCf+iYw1uCpSQbh0MvkXB0HVF5iI1yrw09IMLxIYF
t5HbX8y6dkVRIN9L7VL45t3bLieyiHW6zNF3aySrFKAxPZemmfuLYv5tq4RR
XBMoLISQls/Nq8rS148ifOe41PSDNQ2+JAgGiZBBMgavaXf1iZbIRaNw6b79
XDFXOu4qaMZqjQFpcZmb3MCbYJali271GF/St1jqTYFcV/SCzcsPgVAWXSgr
l0F+aLxVT77UzIsHQfuLOu64UvmWwsEixF6D5DHjqfJ/TVj7CsFJ9iMKxozT
2hpd4qPz7ThzZY3EJI0kxpsNIzzsxKJCR+NrbPlfKVZhzYY1UhsSWYF8WYg9
J6iEk9juYErElSPX5DXrbKkKZLYwc1guuzpxENDnzsPauqOAhUankma6NxFm
J3BJfzxndol3HUljedCpT8Bgiym6ZoTR0m3vAuGSv7J4UfdnfGvuSQPuhryy
Yqa26SeX2V0Rpv5K6PVHEXXaYYeWwPjm4Bi6NGoXCwuXa+VmZlgGwdts1Wsd
DF9ts7tKp+VPGkzotK3ZTPrvIb1kSzJMNsQK15YwaBuOE4q6HGZnSR/b4UOu
HSf4+f6cD5rVBV+8Mggufh5Y5EO7O+RhbUtQE1Efi49mI3GjgtIJD6LuKY6a
80WRckGfEHb0h+dpA+CszJ5I1QDpPZe50lI7ejK+AOMaf3LiPuho1IE8JvpD
gmPt0rG64E7ueSKxgDH0H8G2JMI2hAzuafEJa8blzoD2skXIHthwvXm1o6j5
ajvOp/OFK2ZF4NFSmqK+I52RaWYZ62OBldgn0UqS1YLLEIBOzjT6V4YRhHCB
7G5D6VLinWgzvI1arV+NqNWDGq0Wt6qCEfBoG7yk6xQFjpk4I2CXC97TGYEm
gICg/o10PYxxzfu2xDmlhVlL4Wic8upejk3RxlUFjpyZvqNoATO5RFjXyV0q
HQcqCXgDF0PwWGQCOyVXXC+aQVDNiKTN1KikCxZPG1sduO6mUCB561x6zycK
h1VuGmIUuOqCFOuzXQbKHLaRlON9iPxpAhzdrbQdJ8El1SS4tBLdx1VnxApk
02Cbsl/F3dC6bPuqF02Q0JL2Fe+c9hThMiSPBepWK8IhHgX0Snz/DZXQEKjL
D9ju3dqqduzKF2XcuHnECXhhKI0PKKG1kja2vLOURoO4roLXsQ7fB7cSJ2NP
dzRJSz+HRiokUaSCFvvyczcEJWzuAFGtbHGczkjaYkLQGJOwSbLoUa3kk8tZ
EJFDGZKVlF3/Zx8u00l8x084vlpTZoANOZRyEsF5x/wisXEDuS1agiYwx9oE
Rlra+PUezehgGoME2HxwJ9Jg2EamUqBmJKWjECxoG/vRHUvUblgtUlJWr427
odWuZEG9xbjRKzgg1mxB3H4sYeC4Nn/rGG7euC4GpJbkoYVxotZjy6vVw0eo
dFCE4wHgQZ5ZX2dz7TP9t+9Swp5xQphW5Ehy24cy7hukxfNaXEvu8TytLFqF
UJyroDyelsXTKnnSrCsBmV/ab+m9jlQLgMEKkcJLNx4/qH1XGlI/E7SDym7V
lpgx+ftWKypC3g4HdPOkDZDi7x6X5KkzmPKr4nWlRF/YW0RKCBXzVFOvWHNO
Lt1U9TwaueFLLUaHorxN2SmPhMI8VN1wx5xcSARXEGXoK2W07LevYjTu2FKq
ImfYFEMUusUxudbeHwmTUL3vKjm/sGVwW0DGVQkknOInYoXbQcwaAOewV0PV
gLXSxuTRKgt4VaAtQRsqF8sx2Ig6kYoTlHpBaBcLmM6wMs6Ii0FHRKIDlESJ
so7oPvjeytJC187CAbZS2cNVC7Bk3tb3sy0NrbJ+zGRY7W5fk1pGwcu2fsj+
4Ge6emjyjr40XmlNtLRfW4SSh2UWpfcN4Vn6AAsmSUVcqGPdgU3EiqSP+rx0
P7fD+hs+c4LLzxUIv318QWrKbhCsjh8DFuLjxGglcWIT27Hb0Y1AAUeL7UXG
LR/Hj+BebRIOuGUllS+DiFrlEkWWu+zh4Do4EK6Dz8ISq25VvvxVjIYdJaNs
D0u8wGHXIRjaXBpArVPR3AEcHD1EdrsI2fv0JBfSOXXGx69x80DzcU4IdsYS
YmDwkgeHW0zHTpwrQM2J6RiARwf3SUO5yyA4sYKCttzfV7cgmjoRqM+fz093
j06OTl539w5OBm9gCLv2kYRuuUk5IhmSxGK4KVHuQYLE8sVoNUkXtnCpzWb1
ipGTU2wRz15yFgsC+QyQfOR+FtI/S2KimYkub9BzrJjltDJOqvBQDRhMx8FX
7WEZOyPujHfvMBQchcxLb/J4uu4KyjyC/URZmFAGpzpidjI2rbusXJsVbb8K
913iv7OxoUKrQ+4oQkDLe4Nvinnp30g4kT3wx3k67+Lfow3z5w3C+LOdqN+8
9V3BGG322BiNj7w4/iwSx22CaG4JV9nQZNNa88YaJKghbTbfhlN2XC/DaltO
LuNwMDgedjgDYAJBSO9/OV+kd21bRqu7yynW1c1wxe/08VB9DnON67JeBY04
g7LuLKVxTGUiJqpKxfcZvJ+aNuhFVofbWl8WiDBPbVfYsBBcYHNlriVl6MPI
/MfTdysLYsjWOopK8vnY5uEmj6TCpZIJpNI0JGmILutaV4HuCPcB6KlzMkus
GUXafCyKy3zmpnV5Kl8TpUeFtaWxdAx7laL24Jd20JtBoJvYor1hvXqor5Jj
ht+4H6E7BPRFtUHz2WNJdGzHcNBTk3p1W0HayCdFQZGZ3+RLLgn8NcSrGu+J
rd9y/LWV6l3tTNsAVtu/2goTUfI0W5ttrtIna3p3DkKrpfEF1N4HCUucy1oI
brVdwqMh5xZvKjHmwz9EXRnEKJTqIhPty0BPvLV259YQ6mNUsQzVyl7SE/h8
q5YG3q4jH3onhQALjupBMYY3epNrimfrD+26V8VwZpQgIn0vmfjBZ47uIsNN
UxPZrEFPe1tKiwjZ27Z2PgikDpA44dZ3s3RK81YocNWw8IjE7PLdHqOpMb0T
XexhUUMQZkqHVWmlyFlZgnnlVOriJz4QC1/W0cYVw6uWYVKnpitALca+hkqz
4hCRpWheGCtjf6QTgAHvAbudvCbrlNeSP7FyhddGbVMxCaliYDsDP4w9fz08
8qy8titGJquP49uk9q21Aj+UuOScmlYIS7UoXOIP1IWoCD41y78YSfP1fhXe
FJRl/1o2Gwx9k6iUmc8IashVS8Lkj0qb6xpO/Mq1ry72q0WPW/jsVVxite2T
uJOHOdfM9VEPO4g83PAkWT3S8OTRs2eofkcnlaTeScUmCq1N89qhu2o7VdFt
a8cVx/SW01A6szZktW/NtSfKiqS27pXEKSHYHvfNV24IEq5s+8Eo8Yrzswub
GOMdF9U+Yb7sS0BXdEWCokxAha79ovVHh5JK/1ZLf5DYWa9g8lUb1DeUjQmq
wSR+F74UfIM6MrJ9y4MyMUHxFbGsx1VbOq5sS9cxE+vbmxWh7UlLhPnKjVjY
58+Pl8750tFowaltv+ysArFPU6i7llB/qBpNbFuTgjSPJzFrGRe10vrE1oat
CYeIC7sktrBLE1v/WnWXqEKCrYmttVu+s05HyeKL43xRUjabS2Aftjn8vSBh
42jfhu4ccy4FAYdm/L5AtHtzdkG49hez+ZMZLT/Fnz3daPiQQBZ8WgtQ+95M
i6+92zhe8yTSveLwdXc32h/YLVGqVyDeby4+3CJlnfsBEB7/vIJ+6rLFiV7+
jKp7+z71BL0res82zes9HW+z99T+4SfpP+9t1D7V1eyFDx7nY6xlez1YS23K
1m/P1/e6LkSebhMcsmx+aoeT1laChhi957UPN5/21h9a3SB88C0kGqwPqM/r
29o0Lam6+IZk9RBSx2/qkOpv9F74ibCaBlht9mugcqvZr8DKHJ2cbz8KMDxg
WpJP9u/Ip5Z313tbFTjcm2e9zfpqNvq9Zw/B5oCkMuLvxRQ5Ckf1pAYs7F/+
mcOg/+VfdX3B3/vhH0P/B3eb0fjjYCX1z5o/DNpxgEBWch1OHSWJ+9dXEx74
NgepDrWIaH7ApjLUo6GTFj/wSrIZ3ko644db/LuPH4MoF1TCTaBxcK6glCCx
dLhFtAeeDiK4L5nmvIKg9Xxr+6UQm1em/7TfWX++YVNsXd2S7BOiQCT/NbEJ
Etf5dappoCjRj9fX/7cXNk3i8RpWTdQ6rkZVLSWdODkp4i7fkl4Aj4zzjMXF
or6aXyDVf+6soT04aOIKLSGCap1LBJe5ZLiyEd/CTDEAm3grGEx42zEDrdKl
Wamc0jG7k/1IiIpWHypD41IQt+gD8+qZENWi+f9jZbLKepl8OqDEFvjmcwhq
pDkxCueC0jIa41PecDQuyR9OJUb9jmpVWVkQqnQ/UoIjkgYlREoipRvrX3N0
ktYyUi9PF82UOQo3rAeurgYuBqjlX1Dt8UHBCNkQXZX1vXQkgSiQcSrdaoHE
fLWShe31kPmmwEBYRvMMtTrYmkNvIclE5S+MqNu0qtBdnk3GJXJ1pgX9udFZ
33zOUC05KQhOmCIo+SGIIhelRetY4zSLcoXseSfPTe6ImqBonEvO8s4LGTas
XyT571K7f/lSgk90cRI6q0EsMjjBmIuca6/pAHGdh8rbBRJXPd9GDEHzjz4y
rWfiaItjfFjXv8nS25y0WS2raF94Eb9g5pNVGUqzcWDII9QMYK6XveeS91FN
aq/nsT7vgBlpht4LoLjCNw9T/Jmp2BR9A5Ywa0jH1raEWjK5sN6cwLnRX+fE
tQATbGyAzl2t62nVTFHWtAp0NkPIM8xUjxkOarqfGLadX0hri6CQL35Lcg6l
hiOhMYKsftn2uckTF1/lQRY6pvEjFUHEsYsiKSZlgimifhY6ib3B7m6gN1/B
1UbtmOGNeAQNcEHsS03l3KzlJwzESzRci9BcinYtBdTaE7Zra4NGHyPItOlz
82OCJm1ypPYcz3wIE7amfcS8t77Rqujc2+L5mEhxqpt87hy19cBxuc5pkw2A
aCjxoPEDuuWReAXVhz/hUOVacwtlRy4MVKaTWPSELjJt7cWz+D6LSzoo8UMi
tV4/aa9QPlSbNOG4GgmbFqN3YGFyJUTpYL9WptM2nLCF4yrFfRo2mvDaeiaq
uEcrnGjVbQmbhf+ezQEWwJfES6X0joA64x4n6IKWMtaGFKbhUIxm2tG43hav
3UOSSnOKBuvU850w0aPZQBX6L311CJGpymW35pOTVA8pzeebu2mRHhcZdS40
Es7wM3bh/p5WYT7QCuZ88cVI9eob0vET29A6bGbdhMXSGcGEzsKoMba2jpB2
2sJXsxw+5cThCh2BRRWpxVVaEWTCAbM0tVZsENHCvfhnLVPYSez7f5YahW2P
9WKlVDROohKNtq98p+4e01i0oJk3moy6NNJKocWgsKKzPvnTcwFeMC1LuU3s
IKkVWdQCi9hIQ5FFug4spHOPC1tbcVYsk7iaojb3I9p4U4yLSXH9GPH+dnA0
U3YrVYT2fo0PoUPrciPJKKs2upL1lxP/su9CydLzh+wuSEAITMY/mD12xZxB
FNYcGQbNwIdQ79l6p5L1+DWHpTvOIETHk0ufUdJJgjDtS52jE2YY1WL9HnNu
B3ff1qNmKci2rrJXOCgVlbQaG7SRUtsOGscFK7b7FMdTJHkFInCDR0qEz1r2
v/cdIjRgNUX5MQif1SKurXHboVCPBC8mNA3Q07AOSMLfirYOMWtLCnNhkOEY
7tBHQ181gUlK2c6kzzOqrTasVbDP+tNFchwusmw6d1rXgXriv4Zxdfc8p0Ky
IFmXOWjFoyxIDHD+/sKXN527hXxLwURFN00Ce/j6EtYsk34fzLLPPuw+M06N
lbANbJXwM+8kcYS5Zr/f67cr9RS5BPJVUotbKDsN2yi9KOnr3tXh5tzVj2ku
dfIWhUwQn7ErkSIR/lC5YGQrWBU/8JF0Dq+TNSNg4zGveUxObHV5R+Sagpm2
dzSdDkPurpaFzfnx8UvbjfFLWpse8WpwIfIYY3HEC2MqpCq0g7zWnAy7asvM
b1EhW66Nn2agw3+7IOIJqi5Ne21KfUPtXJnENQFFNKEhiEJrIkSjoNAQN7go
bIlW2mzpMhLt3CylqO0sncQGr8RaNCTBkD3xqAHZjpPA4CG0Qrgt9r2+sWlf
gp8n4de8bCLrEOG2FRTKRaKzsPKPHEOnl6ahwUVj75BOc3BtNZs26gyeVONc
Oy6sSQ7DJwcHDTOcVvC4CxlyFOQn19Qk2DgMPERQYrkc6g0ji5xHNzZAhs0h
fG3CoKMxiwyzJCp+7bLlFN7czEbVDach87K4BPxLX7jj+NfXyX9pZ+nk+ztL
WxqCqhzcxSqXqNs08W2hXXB9T00GcV/oYHMPdIZOmjpD/+DidUJyc2qT+M4J
Vb7G3Tg6U2EwdmleVkQqpFnAtBiDtipNcrmM3D/TUorQtEGsiMt4rqF/1G1Y
vZfjjmG9TDTGoiHB54wEcSneIxdfw8ad+LVkrUG7O+N7AK+7mov5yVIEWYHZ
tNZSm4B8HApZ/rZV7hcEKvyW8BqaHis0ObbuqyfUm2UfLW2BxKUB8KQN8AUL
478r4rdNK5I9jWGgFqPaIzf4gU1oTBivshv1ApFv2EjuQ/ODNbG13a+CIJtq
R6B4SY6EzO6SICoeh+y7WOYfsjI0Xlvk4RVZg5+PaeDyPLB/g2lLPHpghpmk
lwXXBboLIwhsRxiEdnMPnlRvA+ruHy19HDyig5mdTkJtkHB4QULCguYk4Kqt
CnFUh3RzcU/CrBFfjvtMTQFfU1hcrfew/9+VDM3WQXeHXK+eqCjAzIZH1hMq
0IEOJser1URDK0YNDoF9Ab63LtT6tAdZIYFsGXCwDi/YJ8WFWylmcpdSzlsj
mgbqz9+M0oVoR2GaLEQoVVgMPxu8IbclteOGzg4hF8THMUki8fyByOqrSSxW
XsSvBN0H90vy7BAOZ0/isbDg+uiVgPfmuydWlJB51vNF8KTWinOsE13VpFWB
k5gbMk2C4D1FB0YDt2cOuQ8dkck31DlTaLhYvwYx9wWJuYWWGSdSLeWvk+Qt
/E2L1UxTYKsYFppcWMy1gmKE7KrRJSHMuIaTz+ra2Oy+QbuQM4fOXtJ9yB3w
QH6MXUIZrcETHdEpk/pmOLYQaEQiJK23KaQwNh1w66rglj2sxSVOIo/1M8Le
lbbtsrpuJeYwXI9tE0NfTLje/SNtYrif43xSDT6y7VgyRqat9UQTUna+1hem
Icm8ExKMONRR01wHw/drNpQefuQON79mLx0HYnIThkXGTGOal6UonT8Pk2yx
KBZWjxseDtaQChsmhX8l3J9gh2DLK5aDxR/l+oko6tFThHSAayK5+ZGhDOv8
eWh4HS4F8sbnO1xN0rn9XGl54pMKcMTO1GpnixKDSAaf3SGqnBtmupkKl9mS
hDPQx248P4vvotD/Q8ccvz87N5ehX55tAbewYHD83ctEDJyVZHAvpavsVWrX
SfsmHyj4rJN7k6BlTNhu/liO+i1KW+0Twj9oiBnzlzZ1hWj/h9JWaPGhBz6H
H5YTMZdwnMI0vcO3+RVbvsum+nQPUZpq1Ljke3FErSymww1X7e/AAkQPQGFl
BOL1SjxBKaIWo3D0ha+bLVVRVUZOtRlcEIjs5adEUdGUoMHAFGCj89h7X62a
vB2U5mjI3AlXkciCtc+LmuLy2cyv36mEuBeu4gspOd96qSSEWGAXdGg7nKTX
HFJCXxVLlPBJbBtnsSjPC440k1z4D9U4ZeFc2jXZhGTD3TD9S17RxQQXWYts
qKwHznWqnEulupCzPc5PasG7LsYEFBosxiowEggbEPAaY3lQdguX7g6+YyG7
Y4mQqhROsibMU/qqKZKhL4APqWMODwZKUhbyMn+693q49u5seEhq1N/TkVSe
sBARTGmgyNKaCxYUrLe/IeuF3y1Q15JAnEdhmdXiUiUplS1FPiaaJpFeCmsr
1nw1e2sleVvArkaIeG8bQyapQyaEiYLDQaFGzgGGpAIG/jpC2jgZ0tWvsiBy
W05CiLDsVevp8PkHX1soSbiUGufcNQVcBaHEVoOYicoU9u3MZ8nnz6eHg41n
m5tfvsBryeexsdVDSdZF5gunuoFVx1ZKjEI0tvp+UCWIayhyeTJZGvMdWZIC
xW4ttMEkfGSuDletNGtDk2cplirQdpW8SjaXJN7sRIdVeRG5bTMEXoiucJuX
rjSwiLxRC9fkHVMcQdYh7FRKM885U3p3xMfO2U2T0OHX0JejMfXZa6exvcx5
ObiUE9L0XZFTqeThT9kRFG9Z8kB2q+J5uK3Xjz+eCbeMo0VlvbhZywCwUsOX
5D8JcLGAS4wv520vRogF2sWM9BH09NofwgDaMcNhtaYbXTYEuWC4Oh9kqxKh
ku8C12nQMbgMBRe2ChbH3dgBqrqhxpbNdTjgng0rENuavjSWbg/U1lX6vcoX
U87zcy8ryd09o8fYcFJcLeMnNOnWoM4mu4G1xg/IAJ1cJmnfdDy/2oTGWiTi
V84oEvdporgv5DRLkaaqHbw78bfYGYFawwMbFIYOjdcYTsAHFvWjamyoZmNa
OhZ9JBHThkNpY1ji3woEG0vqrhF27ctDMSe0NEYhsCOmJnsJuKmy8bTBRytg
D896famJw+3oSVWroCbeRvHa2CNrtIVsh2U311z3p+GRDQzQjFgaasxoaoUn
JRvgUOmsQHXrrKThrEDjKgM1LEWyalkM8izQe+OF3vDxcGXL1ufPCBQfr5Zf
vrR9UG7Y8MQXzdRRcg1pQPSCsZWdxdeqBWi46AArO8giJXVBDkNqvdPeqhog
DePAw6xvSPuaF6WoErBiTUncC2u4cNGjE8yhjYrVpF5bUIq7CIcHrqRVOKuN
jg97Ulo8DVLSwjVxaJWDIQohavk/frkTXjDmTWUcG4uxJGQUkoJkHjstDoxt
zoekx1s6pfEAcJxlS64pxW5V/gWI5XPCNPs5CFz2Xba5J66ySbU0hXlXjKNf
zeLSO/ZICx5PafiYWYyJav8rslnhAOBgEwohn+vs9qUBjHJJo4oNHLBXqQkN
CsFRGnT3R/kcwYUt256oLcUVv6uBEAhBQwshsTWw3BEsyfV8kFB4fwvwt+UI
XLVolDmvlCzHub3xaNcJB4vVRP1IuH3K5DvMC66lnoergyNxQoJcdE/k2qI7
eCu4/fQmX6oaSnnrCWeQISJqgcvK7bIrhVStKcH4pEVrd651PMpL61aTgLTM
2mndsHy9RIxjqqPC8dLaGsYrgW+mUGXB8OQdGyXCVgH26F46lGLJiCHIN+xj
oTCCaEpyc1CZiGmwEFq5khxBi0R9Y9LbNJ/w6nWTd5J/uMiyEEvRpFpLadpQ
L4WJJZqwtptQ+iTiXoREoga8sCdVRzcrtVilFCoAZ4uhBkKIGGe5pROXadIS
sUFeg09/bUi6wKiObLiSxgFRkaKl7Gjs0tRdvQGi70E01ZSbGa4/IMitWZfS
0HrJkonQdrZAkUAqJ8h19NToQoyxF7QRKG30FnCOn2B/sT/AGugKW9uTCHT5
Uk/Vfz1KZ9LIGKSdI+THnfppurKtTn5Q6mVLY8fHC93INJZOhbNXyE019sWx
T1ukVg8BI3F7sa4rUzFy4LCqVmqXO5NQS3HArtQnrnU+udwbjcGUzLmJNRAE
ERl8KeHI1kCMNNySjZoLabgTGWytBaa/xSwoc/tgdd6CPSJcCjm9noGtj1io
k3TUoGub6KC2J4krlxlEQzp6SAO06hpS28Cgd5nZYpQvQQu9cw+dHfyCNWmJ
0A7ir64CMOYkWltFVHQiNCgQzeyeS/jAF/6PSASsJpne137B7+il0KRHocWC
ehXHGqmBiybennvzNySpWde7tDdz8v7QdUj6HaNABj1bTTnd/pxfuNd/tQt8
LK+WzaMEnTa8cjCcFNzPYbB/CAgTOSa2RUsV3sfeCDUf3LNZcjqVCq/cMcEH
xKC2tUQsvUYmGDc7gOeLQzm+ZSxF9jcZnfoNykuAnxQMrXMHIpF+b/gZImK6
S6XllkCKBHGuZR5lwDtzymWTR5AhZlKt2QX4iok79Ubu0HzRDlbXKI/cewzl
wwjYprL7pptWPyGQg0jAchcYCzhNP8qsu7Yv07055sI9KA+QjhlEsiPTGpz9
0jF/PXt3gkTXd/Y2+zzTwO5vs0wr9ozTwH6DJNMfYERaLRBtNdCqVGJkVk+/
s23UajxUCYJtWl/3/2ez23xRzNSkEbbcsdmRuP5EhpYFHSMNCvtJXk45ImDp
ujYGtcNmBcdt2FdUGi3tTkbRTnw8JrL+1dDDQspEQpZovhn2kHPHSR+RXop+
VxsNVrHAOIbIpsBiVzHYGTbYbW883bbMeZJfz7zkGJBZdibG1LVmQEOd9uAA
2HVASkTGvZ/HmQSjNoVyLTRoSQRUt+e7MAkytWa73aMmm43j/bZysx418ZHp
apJLe/vmc+/YK8S3P+PmP9y0lPSHOHKiZG7jMmdzZQW5xJ5kMf5pT2lnnKFZ
iGKC7cBf5w39SqKWGh8TSrE05UzqBXL+C+IyHGe9c+W6nZZoAwxUYpozRjLY
7FqQXJaXXEqrWuZe2x44H5i+ooVCtNKIq9vvZHjRp1A/cSLFVxfcRAQXjg7K
hsuGcLnUWv6Y9KaYoxsx/cO1jLo2XtFds9JjfAPitIaHg44Z7B0O2q7uYMa5
R5zSzW7zQmBky6Byq2K56STqEYVE7XBey+UEaYWLdJyv2OSK6IbS2k1wBABQ
ED6do3EvNwEnWemllnDlSAvI5Nzv1RXOBHbPON5sQb+zx1DiUsos2Gv1AuUu
okAK2qbmCS1y9KF7WXx6gjiPnPV9oRRM+Z06V6qhgCk0NrkAMdajhmzHN/Kh
Trg9tlk42V9ZnRq71C4pZZ5dFcA23+KVlN6d3DlFKwsjrGKb/APEvck0nyRn
uHEI203nok+ArJy9eff+7T7fluxTLl147Aat1Y5Dn9ksHIJ2vlqgzkopbnH0
mlRNXZzR9r44qg3x2sUS2il0eqibbBIccaVT/poojfrDG65hydZ3f3Mid2pX
nbpzUFyJUKj0K2AL/BI07BPtgWsmQoUh/Cdmn2fOXyCxMq5JiXVAMEbqIw8x
TFFGdH/aDiLcCMxu3MZH/YrcQBh+xyHLS8RUtrb7z6y5RrpghcIzgSWkcxGW
N8IL1HUlHNLTab6RR0NHr7njeqkym/dEOeFlYFr9F9u9/nZvvbe+1n8mAe7D
282XSG3o74wvt3d21p5u+BGebm++oBH0uS02IJ4eDN4dHx+c7B/sc4f1hYSJ
kILFWGAbUmhyka0ZZLdUixI8j8JlKvwcB+vNz0XomVHGF57gTpJ02RkzI6gH
0Tqc8lWy0zkMeACx5bAlXq8lZuLqZHnSGlp1GO2HQCK3m0BGDi4CEwCu9KAe
xbJOta2OPCsilIomEWNTMbKFOQJTqGfcvaba6L7MF/DFtamPagCOC74EFrER
3sQFxcyYhN0eA/EdIgpRLEnu5kcEoBA5mKJEzIhh2dB1obZVRtl4JFitcVP1
hL3hGpY3IQFI3Ybe7J+6vIOaoE92ETGSruiyLioJeVg+lxZ+aTPmC1snEwEQ
tBQIBuKEXjqZacQdD2WH6eIyX7I3S2xq0fLoHr5l0R8YwpuxbDWYzYYFMdGZ
qURnD8/mvwPCqDeMVZHAwekbcdH90uX82/jdapF9SBjWdqzdHgJW0/JazSZU
fgYCiaDpPGvEJZYGRDBxAAqw01Z+NrVs+/kiL0SwR2klCYImccbXIO2Z4c1d
KdX/F+aXt7snXYRojgOZKuyoqSJTXrpwegEXw/tnKa853B+wt1EEVDcOwMg2
Gzy7dloMDm43vFAoiRSd5t0HrMx2T7FX34KAF2BxJiB8tCZ1Z8ly0MdUSyRz
WBfXAec7jSMOykOrPwUV779tkYxa0oRRzvP9/lBs1JvPXzz18bVW7GKcXxZN
HEWlehS3IFgGHj3eg2bjKiQE/rrMWSmuBysYlKtLrU3aOj87a3PigZdKLjNb
qNiyyjBoLOK+q9mEuzbWp0DIB1oeADpBWsllJkxbLDAc5XG0e7L7FVX5JmUN
lZ8UFgWxE4XPIDZjkJ+GR/D0aIfr+ZzDmMQMVOVWakaSekAIuGKzdNcXomMc
YvsojEle4Ew+f/4wz7vO0048NiATaBecz7QQQL6Uyitum2KYujdDrQR5rm/c
O2entbjV7G7BJ2xJgrfr3mz1+h36waX78Cv9fAoDCwfb4jnEp3JVNHnkKf/c
jB7BUNYgoyNiMFlUd7hvx/HPYDj9+lD6lW4cuGDX+/oifGwsT4Cl9Hmavv5e
f5y5M8bq80riLwkRLxCGyF9vxPutpVze+8niaapRuiiQRst5BiApXDd1lyed
EBb2RZ9JiVf7+uqzB95qai51b57jveeY9zlefu5ePqy9FE6nrz2NHlan2+Hg
PNhL9MQeR3pdhDFw92YbY227Ez2TiQcnF3q9L5hn8nPRI0QSL/gWXIh5Hk9s
YKTN6DHkkVRmZDi9YGTccIPKCoecRHOBZrB+XnkwRjmtM39xKg/V8EQqgl8w
v724yZd2tBcVhPnr4ZHWo+Qvw6thrX+47lOlJmr/ayA0YvVTOyziTn0lul9U
CUW33RNrRG2bzz/k7mlPeLqisn5R6ufayjtS5V8KymYGdcw4Mhg27UhJrtAs
UUucIViESRuegupbJbS0wsd72UhnX0oiTnyDqMrGMs6n2HjWpR9bPEtcJ+Lk
3Un35N3p8e750S8HarVkjsc2qnwJ885lbIr7rgTGnmvCIfbD/8rMSPP9mZG9
sG5iybYvNSAFYCltSUCk5HgzqQhErkuihAmyhfuluGxDPVTiL8rAJu82RedP
0s6YQxe4MjlzzsYsTJRREWPfrQjSYSRAR+Pe0sWILlTGWqBWap5rpFh0Ep7f
Nd6K1pFHprYyvvuYvbkaJAjm9+wsqETSwMH+RPjnUkxcKsDlaozSJjVeRmOF
Q8WcTFt1Xt5VYsE8bQhusJ6mUojHCIEkp/ub5NN3bOx1hVRY2lJ97NCF+w2s
benOpilh4QRiddrAodGukhRr17bt1x6OJhz54Udu+GSRTQijYAcuHrCYqgnW
zahdPyXjpzDXK7pCLkDVKRRCgCPTj0i99DrQfWYBU7ldbEFPUnNmww2dM/GA
8yIJ7C0ZWwJzgwhTltc0eCwwaYQWuyV3NKzDRmsCCL7Xz+Gu1uT+VMAmKbTq
xouMpw1u17pM2PhI5QVa0H5UVnoogaVrWoO+hcCye6/kaYhEbit216JQpQso
q+221bYNngsDRiUF+p4TW7SolG3VoxKR8yyIoUUCfwPFdwOKrwhb1SarQ+vQ
uve/SuyoxLI6O46uH4xal0+DBeHwGKzlTRzD9+cdBNTon2cHJ/trpweDX7iI
fJcZB8fzxPti1ZK0nEuOGi2t8ZgjQ+GV0jCSSaYt4uQ+spL/4VY4st0qwhEa
Ws22DoZt0mIYycx97IymU/Kh56zQeS1RDgg1HaQcR63iAnf3Lv3A9cPiFQ0f
OqOnduFNtYzuXWK+C5Qd2+wAjumoyBCX2iPi3uxy1TGf3BcF2IbBtaVrwxD0
1XCGO7/OZ/B8O5HQrHmcOlOLCO6kmmirXVeEWj/e4yWCXRQ4ZNmQBvhW2pxI
VmrTUhmrzp0+7U//feBftV9Dg9RjRE1mMZ50YJzgWCSJVqU1KrGrGCXFVfJS
+3uVYSWfwKWmS1VRxGXuRZYqXjnuypG9K+ZEsJFZ2uujkxCPdxVCV5pThlS7
VAJ+xrm2XLWXTuARGBVtRgDMifnstpjc2iABiz38Bjou5Ixoo5si52Amxmnf
0U9qwj6A0wgRXph3CyDm0pYXJhhcu+iWE+Hw9hJZXz2/qKYyn/bL6MqWz4Jt
7bYOgOMIMkAaFLJowOZtBfSxJvGcWleXRJP4L1zhGqnIY5kch9Y65gWbyiVi
oeiG5WM+M48pDcisPF5L1PDqvDDkhqV1zp0k9BUhxZfkPg8D1uNMhk6QmDCr
eIVYrRhHyJ36nCBhzfXAb/GbO+7lpvOxaw4LJUYNNPxlsCwxvC25u0fq64cE
hVxcTkitITpbvOqcjSHls5wcf6jLbVeuUGNosPL8JW6JUvcwsNcVuZ5qaZXY
g4q5/9fTo/MDkhHen7eDuyeaY2WyCbchYl2INKox3NY6Ms1IuLCa2K56USzc
Eezs+R6zp0CpMGfWAcovadxQ3+zOZtkns9t/bloyOunQn4/2zne7p+8GBwzW
e/Pu6gptfe/NIaovQ51HNOm9yN5E/CNZzCsdgfJBKse9DyTeh4q/O4Dlak8s
EIZWsWTHP3+ON7bCN84Wo/CN8zgK3r7T37DvnCORZs2cp9deoDkKEjXOh0cs
pm1gtPVP69u0wBZ8f1zSfP3T9tb+Pn+wpb1WV8gduUZgF32J+sQ6BH+5vb7R
6//clSdkJTB6yMe8iJaNZ8Skm5iUjd3yBl3TwREhxWDIOGbJbOBH6JhfMJkg
hbRPQ0rtItisbsKtvmfeoeirxDYXH+NdSAbRTX4lyc3gxJzgiGMu2fSLKbBO
7GUb6ibBhgAKiCCcbczsb2N9L4Dapv61xeLc2WD4amPLtHYPnyIR5mBw8upg
cN5ap9/5RF4B5d7vD4U1PN2mwZ9hIhjx3QTbjB7lcki3/NXm8xd9h6UdoAR/
nCFGZH6nfbPRVBFDvNWeOPh9cJONPpREvjHT5hbNtAXk2jt/Y1p7yA72UoHM
3Oa+E3scuDYgie4VAXdXywXIDX43Q9FwBjZ2XflGa1n7iJB0mfpu91rSWGvb
VIlN6Bd/aSWmbBy4FSFVybpKTL+1Rj+e48c2frwwrTLLzEmB1gQvSeTumGMC
eTrumPNfUItjkl6XL83wp+zuJS7uUlu2wXFzIo6b1samucyXeH2Xn6fHz078
xwzHZzix5zix0wMAkkFw8EkV0UaI8tX9JV+wTWZXvfStLR21Y04vaFGm9XTD
foAh5SD9p5rI5L9Rc4FtFQTKpBJi3IDdQXAhF0gMS3xmjhLzzp4D0V9scn+O
6f6ScLpykHqDhxKILQEuOFw5lO9AiY5XrIgjdPFIF/WMuR6dy1uSTyas+sd3
Op5097tu9XOc3wucn2OaQ/WOi5Em5Sj01RzS4/E5PAN0OmtSiyy1PVtsfAA8
zSjXvlhyyTcLQiY6AkUw28vSBbPSDADw4HRgwXk041lpxfyhPPNHHMPh4Mw+
5BiC8HW+2eaMd0o3KLAvK593waXCOR+SD1rw759V2DSbiPgecSQF0A7U5Ixj
xgxoD46vNEqAVDYNrMbc/5AhGjdnEC3Slo3g1r86Pl8lFDjKnSjC3vZbvTQa
2tKxn3/INDYHi1ZDmiUzXvKoILnUiW0q+LqMb9YVc/tvvl/igQxuGe9KQ6CF
qaEfLHCJ2ZwcSVjCh3AELbI02EDjkqVGrD95OVeMAoPzfL4oSDaXHJTNjfX1
P8rbHZP3sl7H/J1IWqExBOgiL+WjJIGaF7B2NFyjY10jbrDG4L8R5mPdrEQE
uSnjorJdFwBH9OunPSmEIVFvnmZz5KVrCyAEvxTawxEUKvdxxTdlBxxp6EeQ
o7MY4e/6VkRgDjGCtrBhHHoZB/HYmWXvfpTn0SjH+Xg8yTT5jaMfdU316bej
F9+mmF2Y4YvaNw8zw2+keS0Q1I75BoLaEcUhZrDFnO1UGuIJLUTsCtLklUG3
Jls3pRKSXhsRef4U7OdyBRhL8lLBogGOKn3zcLxikoJkAS9pFsBBtuoXrMvD
sy/a0aUnSqc00z7MDCasukDYqnHKs4IXhLuGa/3+4FwJ0UMXPFIzKsoDohoi
jcnpRxKF2VRcIM/Ed8LEcRwIFJI8Xko0hg2bDgMauLKcpS8oDJhN2M5gc4lO
3+1LNYz3+y57g9W8KFF0UEynq5lVbIYS2fW4Wd69O4re1agwz5QfKEHhTB1s
P19aUq6h/TbuxAerI3lJgjzT5Dj/BHWsW1x1xS5ZqgeID/OYKBTMGJl+5ZuR
uq6jJ2J+bCGMAtVljZRSOl47sW+hbJUtqYcdSDyKDQ/nyLGggcrMp2s1Q0NS
4jhqA9MRC4dT0okIXeYINrAOTTKRy5uIhYxeYAXSJR7BviM9G/ctEFtqQIdc
9bb42A0yhPQBsay3Kzb8R4z1X7Pjs9/e15CHsL9tuujXaJvR0Ef0QX/L/c2b
0OBB2Zg0KIASLIAwLQni58pLmvraZp0Z7TVac5vdiFIxIgOd3SD8jLMXl7ka
cbyNt1XeEeuaIMcYyVopAixb3OIKpiBCIkwqA5HoHlq3P3/ePzgYHgw5O4mE
9p+HrhnOzOU+bcv+mr6zxtKhM/WRxl034rMhNDT1Q1+K/m7Bcik2Hx6xY9hg
qTZNozZNWc8gdAhgaHqUPsbPluQ6+K/FfaAJ+jK+jGqlDbSocbe01DPGhtfN
8V5Q0x6BNeDeXW6ZHH4hbh4Z4HAh9P+ON6gp2f5mteYegRu+ZsrFPaxaY4/I
LhHuXPpDwGvah9cUj7uli+d1nShS5XMn6E6LzO9UhV3M7RavTbWDWh9MjiCF
oMVnbCqsIFIQY7CfZfODYYhauXUTOjNUCnNgJ+iANjNRQWYt5qCedmsTTL3v
McomaehrIRkxu39TI6MliYPB28pq4DgEN+TEV1HTZAKAJrZ0to6f7piDV9yw
9cMr7ufJBPnV8/7WNsrKvCKBVCfqa0FwrG07yqSWdpVa8EPas9lcamk6HqGE
OzCxEZ5fuA9emdYeuhx+kOaHwhro1w30QjoxwtK8xIsyCzV66rrEsv8HO2vv
oCEtj4Mf2Jn8IYI2qWpS3zwxtIDfnm/1nrFIG9A50jxF5n/Bw7x4Rg++6PRR
5ZMZVrEYczKzfZ4AArGIBpQXtre54/Xm5rYEBQbVKExLFR3N3N16viFDaA8U
m5eOagZgkiSqSMUQWRCdyXYX02r2exD+Qm/CxB02dW4jtf6bCjt0PDXY8TDB
VngX//kf/50kfzRo79EZNPMtue72HLbpFLa/9Qw2epvVI3gZpE07OtWS1TC8
aHz7nl0mDYaFbiC4ECtN9grW6665SjAb+cPI/sbiAoTgN7Z2iY27fMlVQOei
AotMiqhSn3Wq1QpylG2K6lc0QT2plZMScTO27nM79a2+v0alKjzqiEZkjpbW
4cq1QldpoN+ecscgDVfiMuHc5NBSmxKj1ly5WpeDsI1f16gLaT+IF/xzCZNm
WUS5zObsIYwV0w1uThcMjVek9KnzvqCXSplUFFp0G12DkayPM/1ND5KwhRfV
TjwmBETHRzVaW0AjfkIbV3EaVCbyFvhM8Qdj5lLbG5EY7sg6I+yEUafXKNC3
ksl1xCqCaCyc09bUplhjpJbmcEgiC0vK6C0tAV60hd9++y3xImb9vzOWpOgX
cVioCScRIxAyjRYWo9x/b+0v2+v8z3Bl82TDUC10MvG2sBt2tqKXcHe7baR3
LQ8hI725YFqJ/sdraAp9wej6ahtZUl2O6B4T4s7Yne/+c92LIaLSfwwK4hfT
FtpLtNe2NpNB1Ps23rlrxcytcI15jc5jCUncozyex/1n+7MSZeL/GOSvLJ1a
0wuaJGeE6UjWxL9m4FGAvrFNfIGyACT+EWDgN94S/yKr8z19k8S/BrDzQ9v6
NO8fv+hOZIQNWYjp7xh9U89L/nvlfutv4fPWT+aP5hdSJGclklPocTn3tg6z
sSNPYpyGYfqdDR6+Rd/THvm87atPd+z39KUelnu1v/W0s71pX43P2g6wueOf
o4d0mzTA1vN+Z317u7PlBrDdjrV3sQ7wjAYIn2XuggH6naebG53+8+e8PAE1
rgxd/d3Rh1nxcZKNJTCDxEpJ3sjGr55cpZOS5UMmAIFre0b3eRnyDCJso5Um
J3IWBfJA2c4elOj/OzfhOBoOj5nicSipbTnHAY8zH2JKsgD76lFmGpQ3nX3g
KIZBuiAKOzOnJEJks5vCtmIkEnaTImFwr1iN0jEUM1AiDs285Patt3n2USnt
VINa/bC7s/GCvv4bkQWQ59mHQqIGkIfP1SXsADaV0uWuZdHyTnKkHM7M3zJH
CPVFOyt2+Yj4AeKKTpeaZy4EVYuzcIEXW7glR9sxCT6QTLlMs5brVaHCLNuo
08f/BzbHRws5PgEA

-->

</rfc>
