<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.20 (Ruby 3.3.5) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY RFC9000 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9000.xml">
<!ENTITY I-D.ietf-moq-transport SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-moq-transport.xml">
<!ENTITY RFC9959 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9959.xml">
<!ENTITY RFC9743 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9743.xml">
]>


<rfc ipr="trust200902" docName="draft-huitema-ccwg-c4-test-03" category="info" consensus="true" submissionType="IETF">
  <front>
    <title abbrev="C4 Tests">Testing of Christian's Congestion Control Code (C4)</title>

    <author initials="C." surname="Huitema" fullname="Christian Huitema">
      <organization>Private Octopus Inc.</organization>
      <address>
        <email>huitema@huitema.net</email>
      </address>
    </author>
    <author initials="S." surname="Nandakumar" fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <author initials="C." surname="Jennings" fullname="Cullen Jennings">
      <organization>Cisco</organization>
      <address>
        <email>fluffy@iii.ca</email>
      </address>
    </author>

    <date year="2026" month="July" day="05"/>

    <area>Web and Internet Transport</area>
    
    <keyword>C4</keyword> <keyword>Congestion Control</keyword> <keyword>Realtime Communication</keyword> <keyword>Media over QUIC</keyword>

    <abstract>


<?line 61?>

<t>Christian's Congestion Control Code is a new congestion control
algorithm designed to support Real-Time applications such as
Media over QUIC. It is designed to drive towards low delays,
with good support for the "application limited" behavior
frequently found when using variable rate encoding, and
with fast reaction to congestion to avoid the "priority
inversion" happening when congestion control overestimates
the available capacity. The design was validated by
series of simulations, and also by initial deployments
in control networks. We describe here these simulations and
tests.</t>



    </abstract>



  </front>

  <middle>


<?line 75?>

<section anchor="introduction"><name>Introduction</name>

<t>Christian's Congestion Control Code (C4) is a new congestion control
algorithm designed to support Real-Time multimedia applications, specifically
multimedia applications using QUIC <xref target="RFC9000"/> and the Media
over QUIC transport <xref target="I-D.ietf-moq-transport"/>. The design was validated by
series of simulations, and also by initial deployments
in control networks. We describe here these simulations (see <xref target="simulations"/>),
the simulation results for each of the test cases (see <xref target="results"/>),
and the live networking tests (see <xref target="live-tests"/>).</t>

</section>
<section anchor="simulations"><name>Description of simulation tests</name>

<t>We test the design by running a series of simulations, which cover:</t>

<t><list style="symbols">
  <t>reaction to network events</t>
  <t>competition with other congestion control algorithms</t>
  <t>handling of high jitter environments</t>
  <t>handling of multimedia applications</t>
  <t>handling of ECN</t>
</list></t>

<t>We are running the tests using the picoquic network simulator <xref target="Picoquic_ns"/>.
The simulator embeds the picoquic implementation of QUIC <xref target="Picoquic"/>.
Picoquic itself comes with support for a variety of congestion control
protocols, including Cubic and BBR. We added an implementation of C4.</t>

<t>That implementation is designed so that the same code can be used
in execution over the network and in simulations, the main difference being
a replacement of the socket API by a simulation API. When running in
simulation, the code runs in "virtual time", with a virtual clock driven
by simulation events such as arrival and departure of packets from
simulated queues. With the virtual clock mechanism, we can simulate
in a fraction of a second a connection that would last 10 seconds in "real time".</t>

<section anchor="reaction-to-network-events"><name>Reaction to network events</name>

<t>The first series of simulation test how C4 behaves in simple scenarios
when it is the sole user of a link. The list of test includes:</t>

<t><list style="symbols">
  <t>a 20Mbps connection,</t>
  <t>a 200Mbps connection,</t>
  <t>a geostationary satellite connection,</t>
  <t>a sudden increase in path capacity, i.e. "low and up"</t>
  <t>a sudden decrese in path capacity followed by a return to normal, i.e. "drop and back"</t>
  <t>a sudden drop to 0 of path capacity for 2 seconds, i.e. a "black hole"</t>
  <t>a sudden increase in path latency, from "short" to "long"</t>
</list></t>

<section anchor="simulation-of-a-simple-20mbps-connection-alone"><name>Simulation of a simple 20Mbps connection (alone)</name>

<t>This scenario simulates a 10MB download over a 20 Mbps link,
with an 80ms RTT, and a bottlneck buffer capacity corresponding
to 1 BDP.</t>

<t>In a typical simulation, we see a initial phase complete in less
than 800ms, followed by a recovery phase in which the
transmission rate stabilizes to the line rate. After that,
the RTT remains very close to the path RTT, except for
periodic small bumps during the "push" transitions.</t>

</section>
<section anchor="simulation-of-a-simple-200mbps-connection-alone200"><name>Simulation of a simple 200Mbps connection (alone_200)</name>

<t>This scenario simulates a 20MB download over a 200 Mbps link,
with a 40ms RTT, and a bottleneck buffer capacity corresponding
to 1 BDP.</t>

<t>This short test shows that the initial phase correctly discover
the path capacity, and that the transmission operates at
the expected rate after that.</t>

</section>
<section anchor="low-and-up"><name>Low and up</name>

<t>The "low and up" scenario simulates a sudden increase in the
capacity of the path. At the beginning of the simulation,
the simulated bandwidth is set at 5 Mbps. It increases to
10 Mbps after 2.5 seconds. The RTT remains constant at
100ms.</t>

<t>The goal of the test is to verify that C4 promptly
discovers the increase in bandwidth, and
increases the transmission rate.</t>

</section>
<section anchor="drop-and-back"><name>Drop and back</name>

<t>The "drop and back" scenario simulates a sudden decrease in the
capacity of the path, followed by return to normal.
At the beginning of the simulation,
the simulated bandwidth is set at 10 Mbps. It decreases
to 5 Mbps after 1.5 second, then returns to 10 Mbps
after 2 seconds. The RTT remains constant at
100ms.</t>

<t>The goal of the test is to verify that C4 adapts
promptly to changes in the available bandwidth on a
path.</t>

</section>
<section anchor="black-hole"><name>Black Hole</name>

<t>The "black hole" scenario simulates a sudden decrease in the
capacity of the path, followed by return to normal.
At the beginning of the simulation,
the simulated bandwidth is set at . After 2 seconds,
the path capacity is set to 0, and is restored to normal
2 seconds later. The RTT remains constant at
70ms.</t>

<t>The goal of the test is to verify that C4 recovers
promptly after a short suspension of the path.</t>

</section>
<section anchor="short-and-long"><name>Short and long</name>

<t>The "short and long" scenario simulates a sudden increase in the
latency of the path.
At the beginning of the simulation,
the simulated RTT is set at 30ms. After 1 second, the
latency increases to 100ms. The data rate remains constant at
100ms.</t>

<t>The goal of the test is to verify that C4 react properly
exercises the "slow down" mechanism to discover the new RTT.</t>

</section>
<section anchor="simulation-of-a-geostationary-satellite-connection-satellite"><name>Simulation of a geostationary satellite connection (satellite)</name>

<t>This scenario simulates a 100MB download over a 250 Mbps link,
with a 600ms RTT, and a bottleneck buffer capacity corresponding
to 1 BDP, i.e., simulating a geostationary satellite connection.
The scenario also tests the support for careful resume
<xref target="RFC9959"/> by setting
the remembered CWND to 18750000 bytes and the
remembered RTT to 600.123ms.</t>

</section>
</section>
<section anchor="competition"><name>Competition</name>

<t>In accordance with <xref target="RFC9743"/>, we evaluate competition between
C4 connections, or between C4 and Cubic or BBR. We design a series of tests,
each correponding to a competition scenario between a "main" connection and
a "background" connection. For each test, we run the test using either C4,
Cubic or BBR for the "main" connection. The test scenario specifies the
algorithm managing the background connection, as well as scenario details.</t>

<t>we design series of tests
of multiple competing flows all using C4. We want to test
different conditions, such as data rate and latency,
and also different scenarios, such as testing whether
the "background" connection starts at the same time, before
or after the "main" connection.</t>

<t>We test that the bandwidth is shared reasonably by testing
the completion time of a download, and setting the target
value so it can only be achieved if the main connection
gets "about half" of the bandwidth.</t>

<section anchor="short-main-connection-versus-c4-vsc4"><name>Short main connection versus C4 (vs_c4)</name>

<t>Our first test simulates a main connection starting at the
same time as a background C4 connection. The path has a 20Mbps data rate
and 80ms RTT. The background connection
tries to download 10MB, the main connection downloads 5MB.</t>

</section>
<section anchor="short-background-c4-connection-first-afterc4"><name>Short background C4 connection first (after_c4)</name>

<t>The "background first" test simulates a main connection competing
with the background C4 connection that started
0.5 seconds before the main connection. The path has a 20Mbps data rate
and 80ms RTT. The background connection
tries to download 10MB, the main connection downloads 5MB.</t>

</section>
<section anchor="short-background-c4-connection-last-before-c4"><name>Short background C4 connection last (before C4)</name>

<t>The "background last"  simulates a main connections competing
with the background connection that starts
0.5 seconds after the main connection. The path has a 50Mbps data rate
and 30ms RTT. The background connection
tries to download 20MB, the main connection downloads 10MB.</t>

</section>
<section anchor="two-long-connections"><name>Two long connections</name>

<t>The long connection test simulates a main connections starting at the
same time as the background. The path has a 20Mbps data rate
and 80ms RTT. The background connection
tries to download 30MB, the main connection downloads 20MB.</t>

<t>There are three variants of that test, depending on the background
connection algorithm: C4 (vs_c4_lg), Cubic (vs_cubic_lg) or BBR
(vs_bbr_lg).</t>

</section>
<section anchor="long-background-connection-last"><name>Long background connection last</name>

<t>The long "background last" test simulates a main connections competing
with the background connection starting
1 second after it. The path has a 10Mbps data rate
and 70ms RTT. The background connection
tries to download 15MB, the main connection downloads 10MB.</t>

<t>There are three variants of that test, depending on the background
connection algorithm: C4 (vs_c4_lg2), Cubic (vs_cubic_lg2) or BBR
(vs_bbr_lg2).</t>

</section>
</section>
<section anchor="c4-wifi"><name>Handling of High Jitter Environments</name>

<t>In the design of C4, we have been paying special attention to
"bad Wi-Fi" environments, in which the usual delays of a few
milliseconds could spike to 50 or even 200ms. We spent a lot of time trying to
understand what causes such spikes. Our main hypothesis is that
this happens when multiple nearby Wi-Fi networks operate on the
same frequency or "channel", which causes collisons due to the
hidden node problem. This causes collisions and losses, to which
Wi-Fi responses involves two leves of exponential back-off.</t>

<t>We built a model to simulate this jitter by combining two generators:</t>

<t><list style="symbols">
  <t>A random value r between 0 and 1 ms to model collision avoidance,</t>
  <t>A Poisson arrival model with lambda=1 providing the number N1 of short scale 1ms intervals
to account for collision defferal and retry,</t>
  <t>A Poisson arrival arrival model with lambda = 12,
and an interval length of 7.5ms to account for Wi-Fi packet restransmission.</t>
</list></t>

<t>We combine these generators models by using a coefficient "x" that indicates the general
degree of collisions and repetitions:</t>

<t><list style="symbols">
  <t>For a fraction (1-x) of the packets, we set the number N2 to 0.</t>
  <t>For a fraction (x) of the packets, we compute N2 from the Poisson arrival model with lambda = 12,
and an interval length of 7.5ms.</t>
</list></t>

<t>The latency for a single sample will be:
~~~
latency = N1<em>1ms + N2</em>7.5ms
if N1 &gt;= 1:
    latency -= r
~~~
The coefficient x is derived from the target average jitter value. If the target is
1ms or less, we set x to zero. If it is higher than 91ms, we set x to 1. If
it is in between, we set:
~~~
x = (average_jitter - 1ms)/90ms
~~~
We have been using this simulation of jitter to test our implementation of multiple
congestion control algorithms.</t>

<section anchor="bad-wifi"><name>Bad Wi-Fi test</name>

<t>The "bad Wi-Fi" test simulates a connection experiencing a high level of
jitter. The average jitter is set to 7ms, which implies multiple spikes
of 100 to 200ms every second. The data rate is set to 10Mbps, and the base
RTT before jitter is set to 2ms, i.e., simulating a local server.</t>

</section>
<section anchor="wifi-fade"><name>Wifi fade trial</name>

<t>The "Wi-Fi fade" trial simulates varying conditions. The connection starts
with a data rate of 20Mbps, an 80ms latency, and Wi-Fi jitter
with average 1ms. After 1 second, the data rate drops to 2Mbps
and the jitter average increases to 12ms. After another 2 seconds,
data rate and jitter return to the original condition.</t>

</section>
<section anchor="wifi-suspension"><name>Wifi suspension trial</name>

<t>The "Wi-Fi suspension" test simulates a connection experiencing
multiple "suspensions". For every 1.8 second of a 2 second interval,
the data rate is set to 20Mbps, and the base
RTT before jitter is set to 10ms. For the last 200ms of these
intervals, the data rate is set to 0. This model was developed
before we got a better understanding of the Wi-Fi jitter. It is
obsolete, but we kept it as a test case anyhow.</t>

</section>
<section anchor="compete-over-bad-wi-fi"><name>Compete over bad Wi-Fi</name>

<t>The "compete over bad Wi-Fi" test simulates a main connection using 
a "bad Wi-Fi" path and competing on the same path with a background
connection, with the main
connection starting 1 second after the background connection.
The path has a 10Mbps data rate and 2ms RTT, plus Wi-Fi jitter
set to 7ms average -- 
the same jitter characteristics as in the "bad Wi-Fi" test (see <xref target="bad-wifi"/>).
The background connection
tries to download 10MB, the main connection downloads 4MB.</t>

<t>There are three variants of that test, depending on the background
connection algorithm: C4 (wifi_bad_c4), Cubic (wifi_bad_cubic) or BBR
(wifi_bad_bbr).</t>

</section>
</section>
<section anchor="ecn-simulations"><name>L4S and ECN</name>

<t>To evaluate the handling of ECN, we run a series of tests in which the
bottleneck queue is managed by the "duaQ" adaptie queue management
algorithm (AQM) specified for L4S <xref target="RFC9743"/></t>

<section anchor="ecn-test"><name>Basic ECN test (ecn)</name>

<t>The "ECN" test simulates a 20 Mbps link,
with an 80ms RTT, and a bottleneck buffer capacity corresponding
to 1 BDP.</t>

<t>When using C4 we set the ECT1 marking, signaling support
of L4S. We do not set these markings when using Cubic or BBR.</t>

</section>
<section anchor="competition-with-other-algorithms"><name>Competition with other algorithms</name>

<t>The "compete over ECN" tests simulates a main connection competing
against a background connection, using the same network path characteristics
as the "ECN" test (see <xref target="ecn-test"/>).</t>

<t>There are three variants of this test, with the background connection using
either C4 (ecn_c4), Cubic (ecn_cubic) or BBR (ecn_bbr).</t>

</section>
</section>
<section anchor="handling-of-multimedia-applications"><name>Handling of Multimedia Applications</name>

<t>C4 is specifically designed to properly handle multimedia applications. We test
that function by running simulations of a call including:</t>

<t><list style="symbols">
  <t>a simulated audio stream sending 80 bytes simulated audio segments every 20 ms.</t>
  <t>a simulated compressed video stream, sending 30 frames per second, organized
as groups of 30 frames each starting with a 37500 bytes simulated I-Frame
followed by 149 3750 bytes P-frames.</t>
  <t>a simulated less compressed video stream, sending 30 frames per second, organized
as groups of 30 frames each starting with a 62500 bytes simulated I-Frame
followed by 149 6250 bytes P-frames.</t>
</list></t>

<t>The simulation sends each simulated audio segment as QUIC datagram, with
QUIC priority 2, and each group of frames as a separate QUIC stream with priority
4 for the compressed stream, and a priority 6 for the less compressed stream.</t>

<t>If the frames delivered on the less compressed stream fall are delivered
more than 250ms later than the expected time, the receiver sends a "STOP SENDING"
request on the QUIC stream to cancel it; transmission will restart with
the next group of frame, simulating a plausible "simulcast" behavior.</t>

<t>The simulator collects statistics on the delivery of media frame, which are
summarized as average and maximum frame delivery delay. For each test, the
simulation specifies an expected average and an expected maximum delay, as
well as a "start measurement" time, typically set long enough to start after
the initial "startup" phase. The
test passes if the average and max value for the simulated audio and for
the simulated compressed video measured after the start time
are below the specified values.</t>

<section anchor="media-on-high-speed-connection-media"><name>Media on High Speed Connection (media)</name>

<t>The "media" test verifies simulates the handling of media on a 100 Mbps
connection with a 30ms RTT. The test lasts for 5 video groups of frames,
i.e. 5 seconds. The measurements start 200ms after the
start of the connection.</t>

</section>
<section anchor="media-on-10-mbps-connection-media10"><name>Media on 10 Mbps Connection (media10)</name>

<t>The "media10" test verifies the handling of media on a 10 Mbps
connection with a 40ms RTT.  The test lasts for 5 video groups of frames,
i.e. 5 seconds. The measurements start 200ms after the
start of the connection.</t>

</section>
<section anchor="media-for-20-seconds-media600"><name>Media for 20 seconds (media600)</name>

<t>The "media600" media checks that media performance does not
degrade over time, simulating a 100Mbps connection with a 30ms RTT.
The test lasts for 20 video groups of frames, i.e. 20 seconds. 
The measurements start 200ms after the
start of the connection.</t>

</section>
<section anchor="media-over-varying-rtt-mediashortlong"><name>Media over varying RTT (media_short_long)</name>

<t>The "media_short_long" media test verifies that media performance does not
degrade over time, simulating a 100Mbps connection with a 30ms RTT,
that changes to a 100ms RTT after 1 second.
The test lasts for 10 video groups of frames, i.e. 10 seconds. 
The measurements start 5 seconds after the
start of the connection.</t>

</section>
<section anchor="media-over-bad-wi-fi-mediawb"><name>Media over bad Wi-Fi (media_wb)</name>

<t>The "bad Wi-Fi" media test verifies that media performance does not
degrade too much on a connection that has the kind of jitter
discussed in <xref target="c4-wifi"/>. The connection has the characteristics
similar to the "bad Wi-Fi" scenario described in <xref target="bad-wifi"/>.
The average jitter is set to 7ms, which implies multiple spikes
of 100 to 200ms every second. The data rate is set to 20Mbps, and the base
RTT before jitter is set to 2ms, i.e., simulating a local server.
The test lasts for 5 video groups of frames,
i.e. 5 seconds. The measurements start 200ms after the
start of the connection.</t>

</section>
<section anchor="media-over-fading-wi-fi-mediawf"><name>Media over fading Wi-Fi (media_wf)</name>

<t>The "fading Wi-Fi" media test verifies that media performance does not
degrade too much on a connection that hast characteristics
similar to the "fading Wi-Fi" scenario described in <xref target="wifi-fade"/>.
The connection starts
with a data rate of 20Mbps, 40ms RTT, and Wi-Fi jitter
with average 1ms. After 1 second, the data rate drops to 2Mbps
and the jitter average increases to 12ms.
The test lasts for 5 video groups of frames,
i.e. 5 seconds. The measurements start 200ms after the
start of the connection.</t>

</section>
<section anchor="media-with-wi-fi-suspensions-mediaws"><name>Media with Wi-Fi suspensions (media_ws)</name>

<t>The "varying Wi-Fi" media test verifies that media performance does not
degrade too much on a connection experiences suspensions as
discussed in <xref target="wifi-suspension"/>.
For every 1.8 second of a 2 second interval,
the data rate is set to 20Mbps, and the base
RTT before jitter is set to 10ms. For the last 200ms of these
intervals, the data rate is set to 0.
The test lasts for 5 video groups of frames,
i.e. 5 seconds. The measurements start 200ms after the
start of the connection.</t>

</section>
<section anchor="media-over-an-ecn-capable-connection-mediaecn"><name>Media over an ECN capable connection (media_ecn)</name>

<t>The "varying Wi-Fi" media test verifies that media works as expected
on a path managed using ECN/L4S. The set up is similar to the "ECN" test
discussed in <xref target="ecn-simulations"/>.</t>

</section>
</section>
</section>
<section anchor="results"><name>Simulation results</name>

<t>Simulations include random events, such as network jitter or the
precise timing of packet arrivals and departure. Minute changes in starting
conditions can have cascading effects. To get reliable results, we run each test 100
times. The simulator produces a log of each test execution (in QLOG format), and a summary
of each test results, including the completion time for each test, and for tests
checking media the average and max frame delivery time.</t>

<t>We present here a summary of the results, including the average and the 90th percentile
of the completion time for each test. For media tests, we also report the average frame
delivery time and the 90th percentile of the max frame delivery time.</t>

<t>We run these tests for C4, Cubic and BBR, and present the results for these 3
congestion control algorithms in a set of tables. All times are expressed in microseconds,
and for all results lower time values are considered better.</t>

<section anchor="reaction-to-network-events-1"><name>Reaction to network events</name>

<t>Here the statistics for the network events test cases.</t>

<section anchor="average-time-for-network-events-tests"><name>average time for network events tests</name>

<texttable>
      <ttcol align='left'>average time for network events tests</ttcol>
      <ttcol align='right'>c4</ttcol>
      <ttcol align='right'>bbr</ttcol>
      <ttcol align='right'>cubic</ttcol>
      <c>alone</c>
      <c>4642195</c>
      <c>4687549</c>
      <c>4492758</c>
      <c>alone_200</c>
      <c>1161980</c>
      <c>1221731</c>
      <c>1147122</c>
      <c>low_and_up</c>
      <c>7762235</c>
      <c>7506642</c>
      <c>8067973</c>
      <c>drop_and_back</c>
      <c>7697371</c>
      <c>7627033</c>
      <c>7629153</c>
      <c>blackhole</c>
      <c>5628028</c>
      <c>5811312</c>
      <c>5695731</c>
      <c>short_long</c>
      <c>17537092</c>
      <c>42152692</c>
      <c>21386022</c>
      <c>satellite</c>
      <c>6807111</c>
      <c>7452075</c>
      <c>6704244</c>
</texttable>

</section>
<section anchor="top-90-time-for-network-events-tests"><name>top 90% time for network events tests</name>

<texttable>
      <ttcol align='left'>top 90% time for network events tests</ttcol>
      <ttcol align='right'>c4</ttcol>
      <ttcol align='right'>bbr</ttcol>
      <ttcol align='right'>cubic</ttcol>
      <c>alone</c>
      <c>4835141</c>
      <c>4701306</c>
      <c>4528876</c>
      <c>alone_200</c>
      <c>1186067</c>
      <c>1222109</c>
      <c>1156831</c>
      <c>low_and_up</c>
      <c>7764215</c>
      <c>7512100</c>
      <c>8085544</c>
      <c>drop_and_back</c>
      <c>7698289</c>
      <c>7631546</c>
      <c>7632407</c>
      <c>blackhole</c>
      <c>5628156</c>
      <c>5815444</c>
      <c>5699325</c>
      <c>short_long</c>
      <c>17538424</c>
      <c>43393686</c>
      <c>21547041</c>
      <c>satellite</c>
      <c>6807137</c>
      <c>7432491</c>
      <c>6704247</c>
</texttable>

</section>
</section>
<section anchor="competition-1"><name>Competition</name>

<t>Here the statistics for the compete test cases.</t>

<section anchor="average-time-for-compete-tests"><name>average time for compete tests</name>

<texttable>
      <ttcol align='left'>average time for compete tests</ttcol>
      <ttcol align='right'>c4</ttcol>
      <ttcol align='right'>bbr</ttcol>
      <ttcol align='right'>cubic</ttcol>
      <c>vs_bbr</c>
      <c>2964582</c>
      <c>4507849</c>
      <c>2849612</c>
      <c>vs_c4</c>
      <c>4490594</c>
      <c>6776085</c>
      <c>6902341</c>
      <c>vs_cubic</c>
      <c>3484869</c>
      <c>6988975</c>
      <c>5300570</c>
      <c>after_c4</c>
      <c>5239798</c>
      <c>6841587</c>
      <c>7457755</c>
      <c>before_c4</c>
      <c>2699206</c>
      <c>4136358</c>
      <c>3097226</c>
      <c>vs_c4_lg</c>
      <c>21067859</c>
      <c>26367492</c>
      <c>22958382</c>
      <c>vs_c4_lg2</c>
      <c>21102894</c>
      <c>21108978</c>
      <c>21798180</c>
      <c>vs_bbr_lg</c>
      <c>16742530</c>
      <c>21107935</c>
      <c>15582257</c>
      <c>vs_bbr_lg2</c>
      <c>20600335</c>
      <c>18756082</c>
      <c>21367106</c>
      <c>vs_cubic_lg</c>
      <c>17578391</c>
      <c>21478179</c>
      <c>20929801</c>
      <c>vs_cubic_lg2</c>
      <c>16969990</c>
      <c>15533602</c>
      <c>20733296</c>
</texttable>

</section>
<section anchor="top-90-time-for-compete-tests"><name>top 90% time for compete tests</name>

<texttable>
      <ttcol align='left'>top 90% time for compete tests</ttcol>
      <ttcol align='right'>c4</ttcol>
      <ttcol align='right'>bbr</ttcol>
      <ttcol align='right'>cubic</ttcol>
      <c>vs_bbr</c>
      <c>2983881</c>
      <c>4592446</c>
      <c>2872270</c>
      <c>vs_c4</c>
      <c>4864821</c>
      <c>6841410</c>
      <c>7345182</c>
      <c>vs_cubic</c>
      <c>3555684</c>
      <c>7090854</c>
      <c>5578225</c>
      <c>after_c4</c>
      <c>6102901</c>
      <c>7010851</c>
      <c>7952653</c>
      <c>before_c4</c>
      <c>3001428</c>
      <c>5433864</c>
      <c>3988378</c>
      <c>vs_c4_lg</c>
      <c>21141447</c>
      <c>31989078</c>
      <c>24186774</c>
      <c>vs_c4_lg2</c>
      <c>21174182</c>
      <c>21186594</c>
      <c>22376456</c>
      <c>vs_bbr_lg</c>
      <c>16936214</c>
      <c>21146009</c>
      <c>15863189</c>
      <c>vs_bbr_lg2</c>
      <c>21138531</c>
      <c>19075956</c>
      <c>22077739</c>
      <c>vs_cubic_lg</c>
      <c>18440982</c>
      <c>21770804</c>
      <c>21279706</c>
      <c>vs_cubic_lg2</c>
      <c>17548782</c>
      <c>15772770</c>
      <c>20959969</c>
</texttable>

</section>
</section>
<section anchor="wi-fi"><name>Wi-Fi</name>

<t>Here the statistics for the wifi test cases.</t>

<section anchor="average-time-for-wifi-tests"><name>average time for wifi tests</name>

<texttable>
      <ttcol align='left'>average time for wifi tests</ttcol>
      <ttcol align='right'>c4</ttcol>
      <ttcol align='right'>bbr</ttcol>
      <ttcol align='right'>cubic</ttcol>
      <c>wifi_bad</c>
      <c>4144883</c>
      <c>5518835</c>
      <c>4117296</c>
      <c>wifi_fade</c>
      <c>5203858</c>
      <c>5401158</c>
      <c>5341080</c>
      <c>wifi_suspension</c>
      <c>4563252</c>
      <c>4615927</c>
      <c>4601001</c>
      <c>wifi_bad_bbr</c>
      <c>7581238</c>
      <c>7267102</c>
      <c>7604761</c>
      <c>wifi_bad_c4</c>
      <c>9347050</c>
      <c>9527486</c>
      <c>8721036</c>
      <c>wifi_bad_cubic</c>
      <c>8407363</c>
      <c>8851061</c>
      <c>9928339</c>
</texttable>

</section>
<section anchor="top-90-time-for-wifi-tests"><name>top 90% time for wifi tests</name>

<texttable>
      <ttcol align='left'>top 90% time for wifi tests</ttcol>
      <ttcol align='right'>c4</ttcol>
      <ttcol align='right'>bbr</ttcol>
      <ttcol align='right'>cubic</ttcol>
      <c>wifi_bad</c>
      <c>4806788</c>
      <c>7575710</c>
      <c>4437927</c>
      <c>wifi_fade</c>
      <c>5480744</c>
      <c>5585208</c>
      <c>5542744</c>
      <c>wifi_suspension</c>
      <c>4573648</c>
      <c>4616912</c>
      <c>4607139</c>
      <c>wifi_bad_bbr</c>
      <c>11985779</c>
      <c>11799491</c>
      <c>12840326</c>
      <c>wifi_bad_c4</c>
      <c>12401707</c>
      <c>12389220</c>
      <c>13067528</c>
      <c>wifi_bad_cubic</c>
      <c>11723366</c>
      <c>12141374</c>
      <c>13952338</c>
</texttable>

</section>
</section>
<section anchor="ecn"><name>ECN</name>

<t>Here the statistics for the ecn test cases.</t>

<section anchor="average-time-for-ecn-tests"><name>average time for ecn tests</name>

<texttable>
      <ttcol align='left'>average time for ecn tests</ttcol>
      <ttcol align='right'>c4</ttcol>
      <ttcol align='right'>bbr</ttcol>
      <ttcol align='right'>cubic</ttcol>
      <c>ecn</c>
      <c>4494003</c>
      <c>4669871</c>
      <c>4460200</c>
      <c>ecn_c4</c>
      <c>11422019</c>
      <c>17079150</c>
      <c>14190287</c>
      <c>ecn_cubic</c>
      <c>8235549</c>
      <c>9963937</c>
      <c>13300675</c>
      <c>ecn_bbr</c>
      <c>13083701</c>
      <c>13239913</c>
      <c>16852679</c>
</texttable>

</section>
<section anchor="top-90-time-for-ecn-tests"><name>top 90% time for ecn tests</name>

<texttable>
      <ttcol align='left'>top 90% time for ecn tests</ttcol>
      <ttcol align='right'>c4</ttcol>
      <ttcol align='right'>bbr</ttcol>
      <ttcol align='right'>cubic</ttcol>
      <c>ecn</c>
      <c>4494072</c>
      <c>4670724</c>
      <c>4457944</c>
      <c>ecn_c4</c>
      <c>12383356</c>
      <c>17435154</c>
      <c>14527298</c>
      <c>ecn_cubic</c>
      <c>8720974</c>
      <c>10881018</c>
      <c>13952925</c>
      <c>ecn_bbr</c>
      <c>13345131</c>
      <c>13370326</c>
      <c>17523171</c>
</texttable>

</section>
</section>
<section anchor="media"><name>Media</name>

<t>Here the statistics for the media test cases.</t>

<section anchor="average-avlatency-for-media-tests"><name>average av_latency for media tests</name>

<texttable>
      <ttcol align='left'>average av_latency for media tests</ttcol>
      <ttcol align='right'>c4</ttcol>
      <ttcol align='right'>bbr</ttcol>
      <ttcol align='right'>cubic</ttcol>
      <c>media</c>
      <c>33511</c>
      <c>33427</c>
      <c>33513</c>
      <c>media10</c>
      <c>45204</c>
      <c>44997</c>
      <c>47758</c>
      <c>media_600fr</c>
      <c>33624</c>
      <c>33545</c>
      <c>33630</c>
      <c>media_short_long</c>
      <c>101036</c>
      <c>133981</c>
      <c>100765</c>
      <c>media_wb</c>
      <c>77485</c>
      <c>90804</c>
      <c>83044</c>
      <c>media_wf</c>
      <c>82971</c>
      <c>86612</c>
      <c>83811</c>
      <c>media_ws</c>
      <c>22854</c>
      <c>21644</c>
      <c>22459</c>
      <c>media_ecn</c>
      <c>34408</c>
      <c>34481</c>
      <c>34716</c>
</texttable>

</section>
<section anchor="top-90-maxlatency-for-media-tests"><name>top 90% max_latency for media tests</name>

<texttable>
      <ttcol align='left'>top 90% max_latency for media tests</ttcol>
      <ttcol align='right'>c4</ttcol>
      <ttcol align='right'>bbr</ttcol>
      <ttcol align='right'>cubic</ttcol>
      <c>media</c>
      <c>43453</c>
      <c>43453</c>
      <c>43453</c>
      <c>media10</c>
      <c>71128</c>
      <c>71128</c>
      <c>92163</c>
      <c>media_600fr</c>
      <c>43453</c>
      <c>43453</c>
      <c>43453</c>
      <c>media_short_long</c>
      <c>117984</c>
      <c>334491</c>
      <c>110426</c>
      <c>media_wb</c>
      <c>269770</c>
      <c>297718</c>
      <c>260222</c>
      <c>media_wf</c>
      <c>298762</c>
      <c>377437</c>
      <c>313883</c>
      <c>media_ws</c>
      <c>197821</c>
      <c>195521</c>
      <c>197821</c>
      <c>media_ecn</c>
      <c>49700</c>
      <c>50996</c>
      <c>50996</c>
</texttable>

</section>
</section>
</section>
<section anchor="live-tests"><name>Live Tests</name>

<t>We need real life tests as well.</t>

<section anchor="loopback-tests"><name>Loopback tests</name>

<t>Loopback tests were performed on Windows, downloading 10GB of data over
a loopback connection. They showed picoquic using C4 achieving a data rate
of 3Gbps, slightly more than the 2.9Gbps achieved when using Cubic or the
2.6 Gbps achieved when using BBR.</t>

</section>
<section anchor="webex-prototype-deployments"><name>Webex prototype deployments</name>

<t>To do. Write down.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>This documentation of protocol testing does not have any
particular security considerations.</t>

<t>We did not include specific security oriented tests in this document.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document has no IANA actions.</t>

</section>


  </middle>

  <back>




    <references title='Informative References' anchor="sec-informative-references">

&RFC9000;
&I-D.ietf-moq-transport;
&RFC9959;
&RFC9743;
<reference anchor="Picoquic" target="https://https://github.com/private-octopus/picoquic">
  <front>
    <title>Picoquic</title>
    <author initials="C." surname="Huitema">
      <organization></organization>
    </author>
    <date year="2025"/>
  </front>
  <seriesInfo name="GitHub Repository" value=""/>
</reference>
<reference anchor="Picoquic_ns" target="https://https://github.com/private-octopus/picoquic_ns">
  <front>
    <title>Picoquic Network Simulator</title>
    <author initials="C." surname="Huitema">
      <organization></organization>
    </author>
    <date year="2025"/>
  </front>
  <seriesInfo name="GitHub Repository" value=""/>
</reference>


    </references>



<?line 691?>

<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>TODO acknowledge.</t>

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

