<?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.29 (Ruby 2.6.10) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-evens-moq-bench-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="moq-bench">Media over QUIC Relay Benchmark Methodology</title>
    <seriesInfo name="Internet-Draft" value="draft-evens-moq-bench-00"/>
    <author initials="T." surname="Evens" fullname="Tim Evens">
      <organization>Cisco</organization>
      <address>
        <email>tievens@cisco.com</email>
      </address>
    </author>
    <author initials="T." surname="Rigaux" fullname="Tomas Rigaux">
      <organization>Cisco</organization>
      <address>
        <email>trigaux@cisco.com</email>
      </address>
    </author>
    <author initials="S." surname="Henning" fullname="Scott Henning">
      <organization/>
      <address>
        <email>scotthenning00@gmail.com</email>
      </address>
    </author>
    <date/>
    <area>Web and Internet Transport</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>media over quic</keyword>
    <abstract>
      <?line 53?>

<t>This document defines a comprehensive methodology for benchmarking Media over QUIC Transport (MOQT)
relays to evaluate their performance under realistic conditions. The methodology utilizes configurable
test profiles that simulate common media streaming scenarios including audio-only distribution, combined
audio-video streaming, and multi-participant conferencing environments. The framework defines standardized
message formats, synchronization mechanisms, and comprehensive metrics collection to ensure reproducible
and comparable results across different relay implementations. Test scenarios cover both (QUIC) datagram
and stream forwarding modes, enabling evaluation of relay performance characteristics such as throughput,
latency variance, object loss rates, and resource utilization. The resulting benchmark data facilitates
objective comparison and analysis of (MOQT) relay implementations, supporting informed deployment decisions
and performance optimization efforts.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://timevens.github.io/draft-evens-moq-bench/draft-evens-moq-bench.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-evens-moq-bench/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC Working Group mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/timevens/draft-evens-moq-bench"/>.</t>
    </note>
  </front>
  <middle>
    <?line 66?>

<section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="MOQT"/> specifies the client-server interactions and messaging used by clients and relays to fan-out
 published data to one or more subscribers. Implementations employ several state machines to coordinate
 these interactions. Relays must serialize and deserialize data objects and their extension headers when
 forwarding to subscribers. Because <xref target="MOQT"/> runs over <xref target="QUIC"/>, relay performance is directly affected
 by receive/send processing, encryption/decryption, and loss-recovery ACK handling.</t>
      <t>To evaluate relay performance under realistic conditions, this document defines a benchmarking methodology
 that mimics real-world use cases.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</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?>

<t>Commonly used terms in this document are described below.</t>
      <dl>
        <dt>Track Configurations:</dt>
        <dd>
          <t>Track configurations define the parameters and settings for individual media tracks used in benchmarking,
including transmission patterns, object sizes, intervals, and delivery modes.</t>
        </dd>
        <dt>Config Profile:</dt>
        <dd>
          <t>A set of Track Configurations that are used to perform a series of tests to evaluate the performance
of relays.</t>
        </dd>
        <dt>Test Scenario:</dt>
        <dd>
          <t>A test scenario is a set of config profiles that are used to perform a series of tests to evaluate the
performance
of relays.</t>
        </dd>
        <dt>Relay:</dt>
        <dd>
          <t>A <xref target="MOQT"/> relay is an intermediary that receives published media objects from publishers and forwards
them to subscribers, providing fan-out distribution capabilities.</t>
        </dd>
        <dt>Publisher:</dt>
        <dd>
          <t>An entity that produces and sends media objects to a <xref target="MOQT"/> relay for distribution to subscribers.</t>
        </dd>
        <dt>Subscriber:</dt>
        <dd>
          <t>An entity that receives media objects from a <xref target="MOQT"/> relay by subscribing to specific tracks.</t>
        </dd>
        <dt>Track:</dt>
        <dd>
          <t>A sequence of related media objects identified by a namespace and track name, representing a single
media stream such as audio or video.</t>
        </dd>
        <dt>Group:</dt>
        <dd>
          <t>A collection of related objects within a track that have dependencies on each other, typically used
for video frames where objects within a group are interdependent.</t>
        </dd>
        <dt>Object:</dt>
        <dd>
          <t>An individual unit of media data transmitted within a track, such as an audio sample or video frame.</t>
        </dd>
        <dt>Namespace:</dt>
        <dd>
          <t>A hierarchical identifier that groups related tracks together, allowing for organized distribution of media content.</t>
        </dd>
        <dt>Datagrams:</dt>
        <dd>
          <t><xref target="QUIC"/> datagram frames used for unreliable, low-latency transmission of small media objects, typically audio.</t>
        </dd>
        <dt>Streams:</dt>
        <dd>
          <t><xref target="QUIC"/> streams used for reliable, ordered transmission of media objects, typically video or larger content.</t>
        </dd>
      </dl>
    </section>
    <section anchor="data-patterns">
      <name>Data Patterns</name>
      <t>Data transmission patterns are relative to the data that is being transmitted at the time of transmission.</t>
      <section anchor="video-media">
        <name>Video Media</name>
        <t>Video media is a common <xref target="MOQT"/> use case. A video media track typically begins with a large data object,
followed by a series of smaller data objects within the same group. The initial object is often
significantly larger than the subsequent ones. Video is transmitted at regular intervals
(e.g., every 33 ms for 30 fps), producing a bursty fan-out pattern at each interval. Each data object
commonly carries at least three extension
headers.</t>
        <t>Video has a direct dependency on previous objects within a group. If objects are lost in a group, it breaks
the ability to render the video correctly.</t>
        <t>Video is often larger than MTU and cannot be transmitted as
defined in <xref target="MOQT"/> using datagram. Unless video is very low quality, video uses <xref target="QUIC"/> stream forwarding
instead of datagram forwarding.</t>
      </section>
      <section anchor="audio-media">
        <name>Audio Media</name>
        <t>Audio media is a common <xref target="MOQT"/> use case. An audio media track typically maintains fixed intervals with
similarly sized data objects. Like video, transmission occurs at each interval, producing a periodic fan-out
burst. Each data object usually carries fewer than three extension headers.</t>
        <t><xref target="MOQT"/> does not define how to handle larger than MTU sized data objects for <xref target="QUIC"/> datagrams.  Audio
does not have the same requirement as video where subsequent data objects are related to the previous
object or group.</t>
        <t>Audio is a prime candidate for datagram considering the size of the data objects are less than MTU and
there is no dependency on previous object within a group.</t>
        <t>Audio primarily uses <xref target="QUIC"/> datagrams for forwarding.</t>
      </section>
      <section anchor="fetch">
        <name>Fetch</name>
        <t>A fetch in <xref target="MOQT"/> is similar to a retrieval
of a file where the data will be sent all at once and not paced on an interval. In <xref target="MOQT"/> the data
will be sent using a single <xref target="QUIC"/> stream. The data will be sent as fast as the receiver <xref target="QUIC"/> connection
can receive it.</t>
      </section>
      <section anchor="interactive-data">
        <name>Interactive Data</name>
        <t>Chat, metrics, and logging are use cases for interactive data. This data is sent based on interaction,
such as a human typing a message or metrics event, or logging event.  A unique
characteristic of this data is that it is sent when needed and isn't always constant. Metrics might be
an exception where metrics are sent at a constant interval, but metrics may also be sent based on a triggered event.</t>
        <t>Interactive data is often sent using <xref target="QUIC"/> streams but can also be sent via datagram considering
the size of the data is often less than MTU size.</t>
      </section>
      <section anchor="group-and-subgroup-impact-to-relays">
        <name>Group and Subgroup Impact to Relays</name>
        <t>In <xref target="MOQT"/>, when a group or subgroup changes a <xref target="QUIC"/> stream is created for the group/subgroup.
This results in additional state for the <xref target="MOQT"/> relay implementation to handle multiple groups/subgroups in-flight.
The data transmission use case drives how frequently groups/subgroups change, which can impact the performance
of relays. Changing of group/subgroup is only impactful with <xref target="MOQT"/> stream tracks.</t>
      </section>
    </section>
    <section anchor="scenarios">
      <name>Scenarios</name>
      <t>A combination of data patterns are used to define a scenario. The scenario becomes a Config Profile. Various
data patterns are combined to define a scenario. The scenario (Config Profile)
is used to benchmark a relay.</t>
      <t>Below describes common scenarios that the benchmark and configuration profiles need to support.
Other scenarios can be defined as needed using the configuration profiles.</t>
      <section anchor="scenario-1-single-publisher-to-multiple-subscribers-audio">
        <name>Scenario 1: Single Publisher to Multiple Subscribers - Audio</name>
        <artset>
          <artwork type="svg" align="center" name="Publisher to Many Subscribers"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="448" viewBox="0 0 448 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,208 L 8,240" fill="none" stroke="black"/>
              <path d="M 72,144 L 72,200" fill="none" stroke="black"/>
              <path d="M 128,208 L 128,240" fill="none" stroke="black"/>
              <path d="M 160,32 L 160,64" fill="none" stroke="black"/>
              <path d="M 168,208 L 168,240" fill="none" stroke="black"/>
              <path d="M 184,128 L 184,160" fill="none" stroke="black"/>
              <path d="M 224,72 L 224,120" fill="none" stroke="black"/>
              <path d="M 224,168 L 224,200" fill="none" stroke="black"/>
              <path d="M 264,128 L 264,160" fill="none" stroke="black"/>
              <path d="M 280,32 L 280,64" fill="none" stroke="black"/>
              <path d="M 288,208 L 288,240" fill="none" stroke="black"/>
              <path d="M 320,208 L 320,240" fill="none" stroke="black"/>
              <path d="M 384,144 L 384,200" fill="none" stroke="black"/>
              <path d="M 440,208 L 440,240" fill="none" stroke="black"/>
              <path d="M 160,32 L 280,32" fill="none" stroke="black"/>
              <path d="M 160,64 L 280,64" fill="none" stroke="black"/>
              <path d="M 184,128 L 264,128" fill="none" stroke="black"/>
              <path d="M 72,144 L 176,144" fill="none" stroke="black"/>
              <path d="M 272,144 L 384,144" fill="none" stroke="black"/>
              <path d="M 184,160 L 264,160" fill="none" stroke="black"/>
              <path d="M 8,208 L 128,208" fill="none" stroke="black"/>
              <path d="M 168,208 L 288,208" fill="none" stroke="black"/>
              <path d="M 320,208 L 440,208" fill="none" stroke="black"/>
              <path d="M 8,240 L 128,240" fill="none" stroke="black"/>
              <path d="M 168,240 L 288,240" fill="none" stroke="black"/>
              <path d="M 320,240 L 440,240" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="392,200 380,194.4 380,205.6" fill="black" transform="rotate(90,384,200)"/>
              <polygon class="arrowhead" points="232,200 220,194.4 220,205.6" fill="black" transform="rotate(90,224,200)"/>
              <polygon class="arrowhead" points="232,120 220,114.4 220,125.6" fill="black" transform="rotate(90,224,120)"/>
              <polygon class="arrowhead" points="80,200 68,194.4 68,205.6" fill="black" transform="rotate(90,72,200)"/>
              <g class="text">
                <text x="224" y="52">Publisher</text>
                <text x="224" y="148">Relay</text>
                <text x="60" y="228">Subscriber</text>
                <text x="112" y="228">1</text>
                <text x="220" y="228">Subscriber</text>
                <text x="272" y="228">2</text>
                <text x="372" y="228">Subscriber</text>
                <text x="424" y="228">3</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center" name="Publisher to Many Subscribers"><![CDATA[
                   +--------------+
                   |   Publisher  |
                   +--------------+
                           |
                           |
                           v
                      +---------+
        +-------------|  Relay  |--------------+
        |             +---------+              |
        |                  |                   |
        v                  v                   v
+--------------+    +--------------+   +--------------+
| Subscriber 1 |    | Subscriber 2 |   | Subscriber 3 |
+--------------+    +--------------+   +--------------+
]]></artwork>
        </artset>
        <t>The above diagram shows a single publisher sending audio to multiple subscribers.</t>
        <t>A single audio track is published using datagram. The audio track is sent at a constant interval that is
then sent to all subscribers.  The benchmark is to see how many subscribers can be supported by the relay
using datagram forwarding.</t>
      </section>
      <section anchor="scenario-2-single-publisher-to-multiple-subscribers-audio-and-video">
        <name>Scenario 2: Single Publisher to Multiple Subscribers -  Audio and Video</name>
        <artset>
          <artwork type="svg" align="center" name="Publisher to Many Subscribers"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="448" viewBox="0 0 448 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,208 L 8,240" fill="none" stroke="black"/>
              <path d="M 72,144 L 72,200" fill="none" stroke="black"/>
              <path d="M 128,208 L 128,240" fill="none" stroke="black"/>
              <path d="M 160,32 L 160,64" fill="none" stroke="black"/>
              <path d="M 168,208 L 168,240" fill="none" stroke="black"/>
              <path d="M 184,128 L 184,160" fill="none" stroke="black"/>
              <path d="M 224,72 L 224,120" fill="none" stroke="black"/>
              <path d="M 224,168 L 224,200" fill="none" stroke="black"/>
              <path d="M 264,128 L 264,160" fill="none" stroke="black"/>
              <path d="M 280,32 L 280,64" fill="none" stroke="black"/>
              <path d="M 288,208 L 288,240" fill="none" stroke="black"/>
              <path d="M 320,208 L 320,240" fill="none" stroke="black"/>
              <path d="M 384,144 L 384,200" fill="none" stroke="black"/>
              <path d="M 440,208 L 440,240" fill="none" stroke="black"/>
              <path d="M 160,32 L 280,32" fill="none" stroke="black"/>
              <path d="M 160,64 L 280,64" fill="none" stroke="black"/>
              <path d="M 184,128 L 264,128" fill="none" stroke="black"/>
              <path d="M 72,144 L 176,144" fill="none" stroke="black"/>
              <path d="M 272,144 L 384,144" fill="none" stroke="black"/>
              <path d="M 184,160 L 264,160" fill="none" stroke="black"/>
              <path d="M 8,208 L 128,208" fill="none" stroke="black"/>
              <path d="M 168,208 L 288,208" fill="none" stroke="black"/>
              <path d="M 320,208 L 440,208" fill="none" stroke="black"/>
              <path d="M 8,240 L 128,240" fill="none" stroke="black"/>
              <path d="M 168,240 L 288,240" fill="none" stroke="black"/>
              <path d="M 320,240 L 440,240" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="392,200 380,194.4 380,205.6" fill="black" transform="rotate(90,384,200)"/>
              <polygon class="arrowhead" points="232,200 220,194.4 220,205.6" fill="black" transform="rotate(90,224,200)"/>
              <polygon class="arrowhead" points="232,120 220,114.4 220,125.6" fill="black" transform="rotate(90,224,120)"/>
              <polygon class="arrowhead" points="80,200 68,194.4 68,205.6" fill="black" transform="rotate(90,72,200)"/>
              <g class="text">
                <text x="224" y="52">Publisher</text>
                <text x="224" y="148">Relay</text>
                <text x="60" y="228">Subscriber</text>
                <text x="112" y="228">1</text>
                <text x="220" y="228">Subscriber</text>
                <text x="272" y="228">2</text>
                <text x="372" y="228">Subscriber</text>
                <text x="424" y="228">3</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center" name="Publisher to Many Subscribers"><![CDATA[
                   +--------------+
                   |   Publisher  |
                   +--------------+
                           |
                           |
                           v
                      +---------+
        +-------------|  Relay  |--------------+
        |             +---------+              |
        |                  |                   |
        v                  v                   v
+--------------+    +--------------+   +--------------+
| Subscriber 1 |    | Subscriber 2 |   | Subscriber 3 |
+--------------+    +--------------+   +--------------+
]]></artwork>
        </artset>
        <t>The above diagram shows a single publisher sending audio and video to multiple subscribers.</t>
        <t>Two tracks are published, an audio datagram track and a reliable stream track for video. The benchmark is to see
how many subscribers can be supported by the relay using both datagram and
stream forwarding tracks.</t>
      </section>
      <section anchor="scenario-3-groups-of-publishers-and-subscribers-aka-meeting">
        <name>Scenario 3: Groups of Publishers and Subscribers (aka Meeting)</name>
        <artset>
          <artwork type="svg" align="center" name="Groups of Publishers and Subscribers"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="464" width="448" viewBox="0 0 448 464" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,160" fill="none" stroke="black"/>
              <path d="M 8,320 L 8,448" fill="none" stroke="black"/>
              <path d="M 24,80 L 24,128" fill="none" stroke="black"/>
              <path d="M 24,352 L 24,400" fill="none" stroke="black"/>
              <path d="M 88,128 L 88,352" fill="none" stroke="black"/>
              <path d="M 144,80 L 144,128" fill="none" stroke="black"/>
              <path d="M 144,352 L 144,400" fill="none" stroke="black"/>
              <path d="M 160,80 L 160,128" fill="none" stroke="black"/>
              <path d="M 160,224 L 160,256" fill="none" stroke="black"/>
              <path d="M 160,352 L 160,400" fill="none" stroke="black"/>
              <path d="M 216,128 L 216,224" fill="none" stroke="black"/>
              <path d="M 216,256 L 216,352" fill="none" stroke="black"/>
              <path d="M 280,80 L 280,128" fill="none" stroke="black"/>
              <path d="M 280,224 L 280,256" fill="none" stroke="black"/>
              <path d="M 280,352 L 280,400" fill="none" stroke="black"/>
              <path d="M 296,80 L 296,128" fill="none" stroke="black"/>
              <path d="M 296,352 L 296,400" fill="none" stroke="black"/>
              <path d="M 352,128 L 352,352" fill="none" stroke="black"/>
              <path d="M 416,80 L 416,128" fill="none" stroke="black"/>
              <path d="M 416,352 L 416,400" fill="none" stroke="black"/>
              <path d="M 440,32 L 440,160" fill="none" stroke="black"/>
              <path d="M 440,320 L 440,448" fill="none" stroke="black"/>
              <path d="M 8,32 L 440,32" fill="none" stroke="black"/>
              <path d="M 24,80 L 144,80" fill="none" stroke="black"/>
              <path d="M 160,80 L 280,80" fill="none" stroke="black"/>
              <path d="M 296,80 L 416,80" fill="none" stroke="black"/>
              <path d="M 24,128 L 80,128" fill="none" stroke="black"/>
              <path d="M 96,128 L 144,128" fill="none" stroke="black"/>
              <path d="M 160,128 L 208,128" fill="none" stroke="black"/>
              <path d="M 224,128 L 280,128" fill="none" stroke="black"/>
              <path d="M 296,128 L 344,128" fill="none" stroke="black"/>
              <path d="M 360,128 L 416,128" fill="none" stroke="black"/>
              <path d="M 8,160 L 440,160" fill="none" stroke="black"/>
              <path d="M 160,224 L 280,224" fill="none" stroke="black"/>
              <path d="M 88,240 L 160,240" fill="none" stroke="black"/>
              <path d="M 280,240 L 352,240" fill="none" stroke="black"/>
              <path d="M 160,256 L 280,256" fill="none" stroke="black"/>
              <path d="M 8,320 L 440,320" fill="none" stroke="black"/>
              <path d="M 24,352 L 80,352" fill="none" stroke="black"/>
              <path d="M 96,352 L 144,352" fill="none" stroke="black"/>
              <path d="M 160,352 L 208,352" fill="none" stroke="black"/>
              <path d="M 224,352 L 280,352" fill="none" stroke="black"/>
              <path d="M 296,352 L 344,352" fill="none" stroke="black"/>
              <path d="M 360,352 L 416,352" fill="none" stroke="black"/>
              <path d="M 24,400 L 144,400" fill="none" stroke="black"/>
              <path d="M 160,400 L 280,400" fill="none" stroke="black"/>
              <path d="M 296,400 L 416,400" fill="none" stroke="black"/>
              <path d="M 8,448 L 440,448" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="360,352 348,346.4 348,357.6" fill="black" transform="rotate(90,352,352)"/>
              <polygon class="arrowhead" points="360,128 348,122.4 348,133.6" fill="black" transform="rotate(270,352,128)"/>
              <polygon class="arrowhead" points="224,352 212,346.4 212,357.6" fill="black" transform="rotate(90,216,352)"/>
              <polygon class="arrowhead" points="224,128 212,122.4 212,133.6" fill="black" transform="rotate(270,216,128)"/>
              <polygon class="arrowhead" points="96,352 84,346.4 84,357.6" fill="black" transform="rotate(90,88,352)"/>
              <polygon class="arrowhead" points="96,128 84,122.4 84,133.6" fill="black" transform="rotate(270,88,128)"/>
              <g class="text">
                <text x="56" y="52">namespace</text>
                <text x="104" y="52">=</text>
                <text x="148" y="52">meeting,</text>
                <text x="204" y="52">1234</text>
                <text x="72" y="100">Publisher</text>
                <text x="120" y="100">1</text>
                <text x="208" y="100">Publisher</text>
                <text x="256" y="100">2</text>
                <text x="344" y="100">Publisher</text>
                <text x="392" y="100">3</text>
                <text x="76" y="116">Subscriber</text>
                <text x="128" y="116">1</text>
                <text x="212" y="116">Subscriber</text>
                <text x="264" y="116">2</text>
                <text x="348" y="116">Subscriber</text>
                <text x="400" y="116">3</text>
                <text x="216" y="244">Relay</text>
                <text x="72" y="372">Publisher</text>
                <text x="120" y="372">1</text>
                <text x="208" y="372">Publisher</text>
                <text x="256" y="372">2</text>
                <text x="344" y="372">Publisher</text>
                <text x="392" y="372">3</text>
                <text x="76" y="388">Subscriber</text>
                <text x="128" y="388">1</text>
                <text x="212" y="388">Subscriber</text>
                <text x="264" y="388">2</text>
                <text x="348" y="388">Subscriber</text>
                <text x="400" y="388">3</text>
                <text x="56" y="436">namespace</text>
                <text x="104" y="436">=</text>
                <text x="148" y="436">meeting,</text>
                <text x="204" y="436">5678</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center" name="Groups of Publishers and Subscribers"><![CDATA[
+-----------------------------------------------------+
| namespace = meeting, 1234                           |
|                                                     |
| +--------------+ +--------------+ +--------------+  |
| | Publisher 1  | | Publisher 2  | | Publisher 3  |  |
| | Subscriber 1 | | Subscriber 2 | | Subscriber 3 |  |
| +-------^------+ +------^-------+ +------^-------+  |
|         |               |                |          |
+---------+---------------+----------------+----------+
          |               |                |
          |               |                |
          |               |                |
          |        +------+-------+        |
          +--------+    Relay     +--------+
          |        +------+-------+        |
          |               |                |
          |               |                |
          |               |                |
+---------+---------------+----------------+----------+
|         |               |                |          |
| +-------v------+ +------v-------+ +------v-------+  |
| | Publisher 1  | | Publisher 2  | | Publisher 3  |  |
| | Subscriber 1 | | Subscriber 2 | | Subscriber 3 |  |
| +--------------+ +--------------+ +--------------+  |
|                                                     |
| namespace = meeting, 5678                           |
+-----------------------------------------------------+
]]></artwork>
        </artset>
        <t>The above diagram shows a set of publishers and subscribers. Each client in this scenario publishes two tracks,
audio and video, and subscribe to the other subscribers audio and video tracks.  In this scenario, the set of
publishers and subscribers mimic a video conference meeting.  The benchmark is to see how many sets (aka meetings)
can be supported by the relay using datagram and stream forwarding tracks.</t>
      </section>
    </section>
    <section anchor="methodology">
      <name>Methodology</name>
      <section anchor="config-profile">
        <name>Config Profile</name>
        <t>A configuration profile consists of per track configuration settings. The following track settings are defined:</t>
        <table>
          <name>Textual NodeId Formats</name>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Notes</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">namespace</td>
              <td align="left">Namespace tuple of the track</td>
            </tr>
            <tr>
              <td align="left">name</td>
              <td align="left">Name of the track</td>
            </tr>
            <tr>
              <td align="left">reliable</td>
              <td align="left">True to use QUIC streams and false to use datagrams</td>
            </tr>
            <tr>
              <td align="left">mode</td>
              <td align="left">Is a value of 1 to indicate publisher, 2 to indicate subscriber, or 3 to indicate both. When both, the track namespace or name will often be interpolated based on the test script</td>
            </tr>
            <tr>
              <td align="left">priority</td>
              <td align="left">Priority of the track</td>
            </tr>
            <tr>
              <td align="left">ttl</td>
              <td align="left">Time to live for objects published</td>
            </tr>
            <tr>
              <td align="left">interval</td>
              <td align="left">Interval in milliseconds to send data objects</td>
            </tr>
            <tr>
              <td align="left">Objects Per Group</td>
              <td align="left">Number of objects within a group</td>
            </tr>
            <tr>
              <td align="left">First Object Size</td>
              <td align="left">First object of group size in bytes</td>
            </tr>
            <tr>
              <td align="left">Remaining Object Size</td>
              <td align="left">Remaining objects of group size in bytes</td>
            </tr>
            <tr>
              <td align="left">Duration</td>
              <td align="left">Duration in milliseconds to send data objects</td>
            </tr>
            <tr>
              <td align="left">Start Delay</td>
              <td align="left">Start delay in milliseconds</td>
            </tr>
          </tbody>
        </table>
        <t>Interpolation can be used to template the configuration profile.</t>
        <t>Upon start, the track will start off with <tt>"First Object Size"</tt> of data bytes.  Subsequent objects will use the
<tt>Remaining Object Size</tt> in bytes. The remaining objects sent will be <tt>Objects Per Group</tt> number minus the
first object. For example, if <tt>Objects Per Group</tt> is 10 and <tt>First Object Size</tt> is 100 bytes and
<tt>Remaining Object Size</tt> is 50 bytes, then the first group will be 100 bytes and the remaining 9
groups will be 50 bytes each.</t>
        <t>Groups value will increment based on sending <tt>Objects Per Group</tt> number of objects. TTL is used
to define how long published objects should remain in the transmit queue.</t>
        <t>Objects will be published at the <tt>Interval</tt> value.</t>
        <t>Objects and groups will continue for as long as the <tt>Duration</tt> value.</t>
      </section>
      <section anchor="synchronize-start-of-benchmark">
        <name>Synchronize Start of Benchmark</name>
        <t>Synchronization of the benchmark is required to ensure that all clients start at the same time as
the publisher so that objects published can be compared to objects received.</t>
        <t>To synchronize the start of the benchmark, the publisher will publish a start message (<xref target="start-message"/>)
repeatedly for the duration of <tt>Start Delay</tt> value in milliseconds. The start message will be published
every every 1/10th interval of the <tt>Start Delay</tt> value in milliseconds. If 1/10th is less than 100ms,
the start message will be published every 100ms.</t>
        <t>Clients will subscribe to the published track and will wait for the start message (<xref target="start-message"/>)
to be received. If the start message is not received before data messages or completion message,
the track benchmark is considered failed.</t>
        <t>Clients will ignore the repeated start messages after receiving the first one. The test begins on the
first data message (<xref target="data-message"/>) received. Start message <bcp14>MUST NOT</bcp14> be sent after sending the
first data message message.</t>
      </section>
      <section anchor="completion-of-benchmark">
        <name>Completion of benchmark</name>
        <t>The per track benchmark is completed when the publisher sends a completion message (<xref target="completion-message"/>).
The completion message will be sent after the last data message (<xref target="data-message"/>) message is sent.</t>
      </section>
      <section anchor="messages">
        <name>Messages</name>
        <t>Testing utilizes various messages to start testing, send data, and report metrics on completion.</t>
        <t>The following messages are defined:</t>
        <section anchor="start-message">
          <name>START</name>
          <artwork><![CDATA[
START Message {
  type (uint8) = 0x01,
  objects_per_group (uint32),
  first_object_size (uint32),
  remaining_object_size (uint32),
  interval (uint32),
}
]]></artwork>
        </section>
        <section anchor="data-message">
          <name>DATA</name>
          <artwork><![CDATA[
DATA Message {
  type (uint8) = 0x02,
  group_number (uint64),
  object_number (uint64),
  milliseconds_since_first_object (uint32_t),
  data_length (uint32),
  data (bytes),
}
]]></artwork>
          <dl>
            <dt>milliseconds_since_first_object:</dt>
            <dd>
              <t>Number of milliseconds since the first object was sent. The first object starts at zero and is
incremented by milliseconds from the publisher for each message sent. The publisher adds the time
when it sends the message. If there are publisher delays, then this time would reflect the delay variance
from expected interval.</t>
            </dd>
          </dl>
        </section>
        <section anchor="completion-message">
          <name>COMPLETION</name>
          <artwork><![CDATA[
COMPLETION Message {
  type (uint8) = 0x03,
  objects_sent (uint64),
  groups_sent (uint64),
  total_duration (uint32),
}
]]></artwork>
          <dl>
            <dt>total_duration:</dt>
            <dd>
              <t>Total duration is the total duration in milliseconds from first object to last object sent</t>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="benchmark-metrics">
        <name>Benchmark Metrics</name>
        <section anchor="while-track-is-in-progress">
          <name>While Track is in Progress</name>
          <t>The following metrics are computed ongoing as the track is in progress:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Metric</th>
                <th align="left">Notes</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Received Objects</td>
                <td align="left">Count of received objects</td>
              </tr>
              <tr>
                <td align="left">Received Groups</td>
                <td align="left">Count of received groups</td>
              </tr>
              <tr>
                <td align="left">Receive Delta</td>
                <td align="left">Delta time in milliseconds from last message to current message received</td>
              </tr>
              <tr>
                <td align="left">Average Delta</td>
                <td align="left">Average delta time in milliseconds from last message to current message received</td>
              </tr>
              <tr>
                <td align="left">Max Delta</td>
                <td align="left">Maximum delta time in milliseconds seen</td>
              </tr>
              <tr>
                <td align="left">Publisher Variance</td>
                <td align="left">Received milliseconds_since_first_object should be zero based on interval.  This metric tracks the variance of publisher sending delay</td>
              </tr>
              <tr>
                <td align="left">Receive Variance</td>
                <td align="left">Received milliseconds_since_first_object should be zero based on interval.  This metric tracks the variance of received objects based on expected interval</td>
              </tr>
              <tr>
                <td align="left">Average Bits Per Second</td>
                <td align="left">Average bits per second received</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="on-completion-of-track">
          <name>On completion of track</name>
          <t>The following result metrics are computed at the end of a track that has completed. Each track has the following metrics:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Metric</th>
                <th align="left">Notes</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Objects Sent</td>
                <td align="left">Number of objects reported sent by the publisher</td>
              </tr>
              <tr>
                <td align="left">Groups sent</td>
                <td align="left">Number of groups reported sent by the publisher</td>
              </tr>
              <tr>
                <td align="left">Objects Received</td>
                <td align="left">Number of objects received</td>
              </tr>
              <tr>
                <td align="left">Groups Received</td>
                <td align="left">Number of groups received</td>
              </tr>
              <tr>
                <td align="left">Lost Objects</td>
                <td align="left">Computed based on objects received to objects sent</td>
              </tr>
              <tr>
                <td align="left">Total Duration</td>
                <td align="left">Total duration in milliseconds from the publisher</td>
              </tr>
              <tr>
                <td align="left">Actual Duration</td>
                <td align="left">Duration in milliseconds from received first object to last object received</td>
              </tr>
              <tr>
                <td align="left">Average Receive Variance</td>
                <td align="left">The average receive variance of received objects based on expected interval</td>
              </tr>
              <tr>
                <td align="left">Average Publisher Variance</td>
                <td align="left">The average publisher variance of objects published</td>
              </tr>
              <tr>
                <td align="left">Average Bits Per Second</td>
                <td align="left">The average bits per second received</td>
              </tr>
              <tr>
                <td align="left">Expected Bits Per Second</td>
                <td align="left">Computed bits per second rate based on <xref target="start-message"/> first, remaining sizes and interval values</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="running-benchmark">
        <name>Running Benchmark</name>
        <t>Using a configuration profile, multiple instances of clients are ran to connect to the relay.  They will
publish and subscribe based on the configuration profile.  Interpolation is used to dynamically modify the
configuration profile namespace and name based on the test script. In the case of mode 3 (both), the
namespace and name will be interpolated based on the test script to avoid multi-publisher and mirroring
where the publisher subscribes to itself.</t>
      </section>
      <section anchor="test-environment-isolation">
        <name>Test Environment Isolation</name>
        <t>Benchmarking should be conducted in isolated test environments to prevent:</t>
        <ul spacing="normal">
          <li>
            <t>Interference with production traffic</t>
          </li>
          <li>
            <t>Exposure of test data patterns to unauthorized parties</t>
          </li>
          <li>
            <t>Resource exhaustion attacks on production systems</t>
          </li>
        </ul>
      </section>
      <section anchor="authentication-and-authorization">
        <name>Authentication and Authorization</name>
        <t>Benchmark implementations <bcp14>SHOULD</bcp14> implement proper authentication and authorization mechanisms to:</t>
        <ul spacing="normal">
          <li>
            <t>Prevent unauthorized participation in benchmark tests</t>
          </li>
          <li>
            <t>Ensure only authorized entities can initiate benchmark sessions</t>
          </li>
          <li>
            <t>Protect against malicious clients that could skew results</t>
          </li>
        </ul>
      </section>
      <section anchor="resource-management">
        <name>Resource Management</name>
        <t>Benchmark implementations <bcp14>MUST</bcp14> include safeguards to prevent:</t>
        <ul spacing="normal">
          <li>
            <t>Excessive resource consumption that could lead to denial of service</t>
          </li>
          <li>
            <t>Memory exhaustion from unbounded metric collection</t>
          </li>
          <li>
            <t>CPU exhaustion from processing malformed benchmark messages</t>
          </li>
        </ul>
      </section>
      <section anchor="data-privacy">
        <name>Data Privacy</name>
        <t>While benchmark data is typically synthetic, implementations <bcp14>SHOULD</bcp14>:</t>
        <ul spacing="normal">
          <li>
            <t>Avoid including sensitive information in test data</t>
          </li>
          <li>
            <t>Provide mechanisms to sanitize benchmark results before sharing</t>
          </li>
          <li>
            <t>Consider the privacy implications of detailed performance metrics</t>
          </li>
        </ul>
      </section>
      <section anchor="implementation-security">
        <name>Implementation Security</name>
        <t>Benchmark tools <bcp14>MUST</bcp14> follow secure coding practices and <bcp14>SHOULD</bcp14> undergo security review,
as they may be deployed in sensitive network environments.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document does not require any IANA actions. The benchmarking methodology defined herein:</t>
      <ul spacing="normal">
        <li>
          <t>Does not define new protocol elements that require IANA registration</t>
        </li>
        <li>
          <t>Does not create new registries or modify existing ones</t>
        </li>
        <li>
          <t>Uses existing <xref target="MOQT"/> and <xref target="QUIC"/> protocol mechanisms without extension</t>
        </li>
        <li>
          <t>Defines message formats for benchmarking purposes only, which are not part of the <xref target="MOQT"/> protocol specification</t>
        </li>
      </ul>
      <t>The message type values defined in this document (0x01, 0x02, 0x03) are used solely within the
context of benchmarking implementations and do not conflict with or extend the <xref target="MOQT"/> protocol message space.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document defines a benchmarking methodology and does not introduce new security vulnerabilities beyond
those inherent in <xref target="MOQT"/> and <xref target="QUIC"/>. However, the following security considerations apply when
implementing and running benchmarks.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="MOQT">
          <front>
            <title>Media over QUIC Transport</title>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   This document defines the core behavior for Media over QUIC Transport
   (MOQT), a media transport protocol designed to operate over QUIC and
   WebTransport, which have similar functionality.  MOQT allows a
   producer of media to publish data and have it consumed via
   subscription by a multiplicity of endpoints.  It supports
   intermediate content distribution networks and is designed for high
   scale and low latency distribution.

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

<section anchor="example-benchmark-results">
      <name>Example Benchmark Results</name>
      <t>Below are example results from running benchmark against existing relays.</t>
      <section anchor="environment">
        <name>Environment</name>
        <t>Each benchmark test was using the same set of EC2 instances in AWS.  The publisher
and relay ran on a one EC2 instance while the clients ran on one or more separate
EC2 instances.</t>
        <ul spacing="normal">
          <li>
            <t><strong>EC2 Instance Type</strong>: c8g.2xlarge (Graviton4 ARM processors (2.7/2.8GHz), 8 cores, 16GB ram</t>
          </li>
          <li>
            <t><strong>Networking</strong>: UP to 15Gbps. All instances on same VPC subnet and no NAT gateway was used</t>
          </li>
        </ul>
      </section>
      <section anchor="benchmark-tool">
        <name>Benchmark Tool</name>
        <t><eref target="https://github.com/quicr/qperf">qperf</eref> benchmark implementation was used.</t>
      </section>
      <section anchor="relays">
        <name>Relays</name>
        <t>Benchmark tests two open source relays using latest main branches on September 25th, 2025.</t>
        <ul spacing="normal">
          <li>
            <t><eref target="https://github.com/quicr/laps">LAPS</eref></t>
          </li>
          <li>
            <t><eref target="https://github.com/facebookexperimental/moxygen">Moxygen</eref></t>
          </li>
        </ul>
      </section>
      <section anchor="scenario-1-single-publisher-audio">
        <name>Scenario 1: Single publisher audio</name>
        <section anchor="config-profile-1">
          <name>Config Profile</name>
          <artwork><![CDATA[
[Audio Datagram]
namespace           = perf/audio/{} ; MAY be the same across tracks,
                                    ; entries delimited by /
name                = 1          ; SHOULD be unique to other tracks
track_mode          = datagram   ; (datagram|stream)
priority            = 2          ; (0-255)
ttl                 = 5000       ; TTL in ms
time_interval       = 20         ; transmit interval in floating
                                 ; point ms
objects_per_group   = 1          ; number of objects per group >=1
first_object_size   = 120        ; size in bytes of the first object
                                 ; in a group
object_size         = 120        ; size in bytes of remaining objects
                                 ; in a group
start_delay         = 5000       ; start delay in ms - after control
                                 ; messages are sent and acknowledged
total_transmit_time = 35000      ; total transmit time in ms,
                                 ; including start delay
]]></artwork>
        </section>
        <section anchor="results">
          <name>Results</name>
          <table>
            <name>Scenario 1 Relay Results</name>
            <thead>
              <tr>
                <th align="left">Relay</th>
                <th align="left">Number of Subscribers</th>
                <th align="left">Notes</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">LAPS</td>
                <td align="left">2000</td>
                <td align="left">No dropped datagrams and CPU was under 95% on a single core</td>
              </tr>
              <tr>
                <td align="left">Moxygen</td>
                <td align="left">1000</td>
                <td align="left">No dropped datagrams and CPU was under 95% on a single core</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="scenario-2-single-publisher-audiovideo">
        <name>Scenario 2: Single publisher audio/video</name>
        <section anchor="config-profile-2">
          <name>Config Profile</name>
          <artwork><![CDATA[
[Audio Datagram]
namespace          = perf/audio/{}  ; MAY be the same across tracks,
                                 ; entries delimited by /
name               = 1           ; SHOULD be unique to other tracks
track_mode         = datagram    ; (datagram|stream)
priority           = 2           ; (0-255)
ttl                = 5000        ; TTL in ms
time_interval      = 20          ; transmit interval in floating
                                 ; point ms
objects_per_group  = 1           ; number of objects per group >=1
first_object_size  = 120         ; size in bytes of the first
                                 ; object in group
object_size        = 120         ; size in bytes of remaining
                                 ; objects in a group
start_delay        = 5000        ; start delay in ms - after control
                                 ; messages are sent and acknowledged
total_transmit_time = 35000      ; total transmit time in ms

[360p Video]
namespace          = perf/video/{}  ; MAY be the same across tracks,
                                    ; entries delimited by /
name               = 1          ; SHOULD be unique to other tracks
track_mode         = stream     ; (datagram|stream)
priority           = 3          ; (0-255)
ttl                = 5000       ; TTL in ms
time_interval      = 33.33      ; transmit interval in floating
                                ; point ms
objects_per_group  = 150        ; number of objects per group >=1
first_object_size  = 21333      ; size in bytes of the first object
                                ; in a group
object_size        = 2666       ; size in bytes of remaining objects
                                ; in a group
start_delay        = 5000       ; start delay in ms - after control
                                ; messages are sent and acknowledged
total_transmit_time = 35000     ; total transmit time in ms
]]></artwork>
        </section>
        <section anchor="results-1">
          <name>Results</name>
          <table>
            <name>Scenario 2 Relay Results</name>
            <thead>
              <tr>
                <th align="left">Relay</th>
                <th align="left">Number of Subscribers</th>
                <th align="left">Notes</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">LAPS</td>
                <td align="left">1000</td>
                <td align="left">No dropped datagrams or stream data. CPU was under 95% on a single core</td>
              </tr>
              <tr>
                <td align="left">Moxygen</td>
                <td align="left">250</td>
                <td align="left">Datagrams started to get lost after 250 and subscriptions started to close and fail after 250. CPU on a single core was less than 85%</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="Acknowledgements">
      <name>Acknowledgments</name>
      <t>Thank you to Suhas Nandakumar for their reviews and suggestions.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
BlRWmkMBW2xnMlGaI/Ti/wCK+jpl53cAAA==

-->

</rfc>
