<?xml version="1.0" encoding="us-ascii"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version  -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc comments="yes"?>

<rfc ipr="trust200902" docName="draft-banks-quic-performance-00" category="exp">

  <front>
    <title abbrev="QUIC-PERF">QUIC Performance</title>

    <author initials="N." surname="Banks" fullname="Nick Banks">
      <organization>Microsoft Corporation</organization>
      <address>
        <email>nibanks@microsoft.com</email>
      </address>
    </author>

    <date year="2020"/>

    <area>Transport</area>
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>The QUIC performance protocol provides a simple, general-purpose protocol for
testing the performance characteristics of a QUIC implementation.  With this
protocol a generic server can support any number of client-driven performance
tests and configurations.  Standardizing the performance protocol allows for
easy comparisons across different QUIC implementations.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>The various QUIC implementations are still quite young and not exhaustively
tested for many different performance heavy scenarios.  Some have done their own
testing, but many are just starting this process.  Additionally, most only test
the performance between their own client and server.  The QUIC performance
protocol aims to standardize the performance testing mechanisms.  This will
hopefully achieve the following:</t>

<t><list style="symbols">
  <t>Remove the need to redesign a performance test for each QUIC implementation.</t>
  <t>Provide standard test cases that can produce performance metrics that can be
easily compared across different configurations and implementations.</t>
  <t>Allow for easy cross-implementation performance testing.</t>
</list></t>

<section anchor="terms-and-definitions" title="Terms and Definitions">

<t>The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" 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>

</section>
</section>
<section anchor="specification" title="Specification">

<t>The sections below describe the mechanisms used by a client to connect to a
QUIC perf server and execute various performance scenarios.</t>

<section anchor="protocol-negotiation" title="Protocol Negotiation">

<t>The ALPN used by the QUIC performance protocol is "perf".  It can be used on any
UDP port, but UDP port 443 is used by default, if no other port is specified. No
SNI is required to connect, but may be optionally provided if the client wishes.</t>

</section>
<section anchor="configuration" title="Configuration">

<t>TODO - Possible options: use the first stream to exchange configurations data OR
use a custom transport parameter.</t>

</section>
<section anchor="streams" title="Streams">

<t>The performance protocol is primarily centered around sending and receiving
data.  Streams are the primary vehicle for this.  All performance tests are
client-driven:</t>

<t><list style="symbols">
  <t>The client opens a stream.</t>
  <t>The client encodes the size of the requested server response.</t>
  <t>The client sends any data it wishes to.</t>
  <t>The client cleanly closes the stream with a FIN.</t>
</list></t>

<t>When a server receives a stream does the following:</t>

<t><list style="symbols">
  <t>The server accepts the new stream.</t>
  <t>The server processes the encoded response size.</t>
  <t>The server drains the rest of the client data.</t>
  <t>The server then sends any response payload that was requested.</t>
</list></t>

<t><spanx style="strong">Note</spanx> - Should the server wait for FIN before replying?</t>

<section anchor="encoding-server-response-size" title="Encoding Server Response Size">

<t>Every stream opened by the client uses the first 8 bytes of the stream data to
encode a 64-bit unsigned integer in network byte order to indicate the length of
data the client wishes the server to respond with.  An encoded value of zero is
perfectly legal, and a value of MAX_UINT64 (0xFFFFFFFFFFFFFFFF) is practically
used to indicate an unlimited server response.  The client may then cancel the
transfer at its convenience with a STOP_SENDING frame.</t>

<t>On the server side, any stream that is closed before all 8 bytes are received
should just be ignored, and gracefully closed on its end (if applicable).</t>

</section>
<section anchor="bidirectional-vs-unidirectional-streams" title="Bidirectional vs Unidirectional Streams">

<t>When a client uses a bidirectional stream to request a response payload from the
server, the server sends the requested data on the same stream.  If no data is
requested by the client, the server merely closes its side of the stream.</t>

<t>When a client uses a unidirectional stream to request a response payload from
the server, the server opens a new unidirectional stream to send the requested
data.  If no data is requested by the client, the server need take no action.</t>

</section>
</section>
</section>
<section anchor="example-performance-scenarios" title="Example Performance Scenarios">

<t>All stream payload based tests below can be achieved either with bidirectional
or unidirectional streams.  Generally, the goal of all these performance tests
is to measure the maximum load that can be achieved with the given QUIC
implementation and hardware configuration.  To that end, the network is not
expected to be the bottleneck in any of these tests.  To achieve that, the
appropriate network hardware must be used so as to not limit throughput.</t>

<section anchor="single-connection-bulk-throughput" title="Single Connection Bulk Throughput">

<t>Bulk data throughput on a single QUIC connection is probably the most common
metric when first discussing the performance of a QUIC implementation.  It uses
only a single QUIC connection.  It may be either an upload or download.  It can
be of any desired length.</t>

<t>For an upload test, the client need only open a single stream, encodes a zero
server response size, sends the upload payload and then closes (FIN) the stream.</t>

<t>For a download test, the client again opens a single stream, encodes the
server's response size (N bytes) and then closes the stream.</t>

<t>The total throughput rate is measured by the client, and is calculated by
dividing the total bytes sent or received by difference in time from when the
client created its initial stream to the time the client received the server's
FIN.</t>

</section>
<section anchor="requests-per-second" title="Requests Per Second">

<t>Another very common performance metric is calculating the maximum requests per
second that a QUIC server can handle.  Unlike the bulk throughput test above,
this test generally requires many parallel connections (possibly from multiple
client machines) in order to saturate the server properly.  There are several
variables that tend to directly affect the results of this test:</t>

<t><list style="symbols">
  <t>The number of parallel connections.</t>
  <t>The size of the client's request.</t>
  <t>The size of the server's response.</t>
</list></t>

<t>All of the above variables may be changed to measure the maximum RPS in the
given scenario.</t>

<t>The test starts with the client connecting all parallel connections and waiting
for them to be connected.  It's recommended to wait an additional couple of
seconds for things to settle down.</t>

<t>The client then starts sending "requests" on each connection. Specifically, the
client should keep at least one request pending (preferrably at least two) on
each connection at all times.  When a request completes (receive server's FIN)
the client should immediately queue another request.</t>

<t>The client continues to do this for a configured period of time.  From my
testing, ten seconds seems to be a good amount of time to reach the steady
state.</t>

<t>Finally, the client measures the maximum requests per second rate as the total
number of requests completed divided by the total execution time of the
requests phase of the connection (not including the handshake and wait period).</t>

</section>
<section anchor="handshakes-per-second" title="Handshakes Per Second">

<t>Another metric that may reveal the connection setup efficiency is handshakes
per second. It lets multiple clients (possibly from multiple machines) setup
QUIC connections (then close them by CONNECTION_CLOSE) with a single server.
Variables that may potentially affect the results are:</t>

<t><list style="symbols">
  <t>The number of client machines.</t>
  <t>The number of connections a client can initialize in a second.</t>
  <t>The size of ClientHello (long list of supported ciphers, versions, etc.).</t>
</list></t>

<t>All the variables may be changed to measure the maximum handshakes per second
in a given scenario.</t>

<t>The test starts with the multiple clients initializing connections and waiting
for them to be connected with the single server on the other machine. It's
recommended to wait an additional couple of seconds for connections to settle
down.</t>

<t>The clients will initialize as many connections as possible to saturate the
server. Once the client receive the handshake from the server, it terminates
the connection by sending a CONNECTION_CLOSE to the server. The total
handshakes per second are calculated by dividing the time period by the total
number of connections that have successfully established during that time.</t>

</section>
<section anchor="throughput-fairness-index" title="Throughput Fairness Index">

<t>Connection fairness is able to help us reveal how the throughput is allocated
among each connection. A way of doing it is to establish multiple hundreds or
thousands of concurrent connections and request the same data block from a
single server. Variables that have potential impact on the results are:</t>

<t><list style="symbols">
  <t>the size of the data being requested.</t>
  <t>the number of the concurrent connections.</t>
</list></t>

<t>The test starts with establishing several hundreds or thousands of concurrent
connections and downloading the same data block from the server simultaneously.</t>

<t>The index of fairness is calculated using the complete time of each connection
and the size of the data block in [Jain's manner]
(https://www.cse.wustl.edu/~jain/atmf/ftp/af_fair.pdf).</t>

<t>Be noted that the relationship between fairness and whether the link is
saturated is uncertain before any test. Thus it is recommended that both cases
are covered in the test.</t>

<t>TODO: is it necessary that we also provide tests on latency fairness in the
multi-connection case?</t>

</section>
<section anchor="maximum-number-of-idle-connections" title="Maximum Number of Idle Connections">

<t>TODO</t>

</section>
</section>
<section anchor="things-to-note" title="Things to Note">

<t>There are a few important things to note when doing performance testing.</t>

<section anchor="what-data-should-be-sent" title="What Data Should be Sent?">

<t>Since the goal here is to measure the efficiency of the QUIC implementation and
not any application protocol, the performance application layer should be as
light-weight as possible.  To this end, the client and server application layer
may use a single preallocated and initialized buffer that it queues to send when
any payload needs to be sent out.</t>

</section>
<section anchor="ramp-up-congestion-control-or-not" title="Ramp up Congestion Control or Not?">

<t>When running CPU limited, and not network limited, performance tests ideally we
don't care too much about the congestion control state.  That being said,
assuming the tests run for enough time, generally congestion control should ramp
up very quickly and not be a measureable factor in the measurements that result.</t>

</section>
<section anchor="disabling-encryption" title="Disabling Encryption">

<t>A common topic when talking about QUIC performance is the effect that its
encryption has.  The draft-banks-quic-disable-encryption draft specifies a way
for encryption to be mutually negotiated to be disabled so that an A:B test can
be made to measure the "cost of encryption" in QUIC.</t>

</section>
</section>
<section anchor="security-considerations" title="Security Considerations">

<t>Since the performance protocol allows for a client to trivially request the
server to do a significant amount of work, it's generally advisable not to
deploy a server running this protocol on the open internet.</t>

<t>One possible mitigation for unauthenticated clients generating an unacceptable
amount of work on the server would be to use client certificates to authenticate
the client first.</t>

</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>None</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<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>




  </back>

<!-- ##markdown-source:
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
h2ejKgAA

-->

</rfc>

