Performance Testing HTTP/3 (QUIC)
by SCOTT MOORE
Agenda
•HTTP/3 (QUIC) Timeline
•HTTP/3 Technical Breakdown
•HTTP/3 Challenges
•Demo
•Test Results and Findings
•Q&A
2
HTTP/3 TIMELINE
HTTP/2 AdptionRate
Source: HTTP/2 Adoption Dashboard (maintained by Telefónica Research, Case Western Reserve University,
and Carnegie Mellon University
HTTP/3 Timeline
• 2014 - Google deploys HTTP/2 over UDP. Calls it “QUIC”.
• November 2016 - Google takes QUIC to IETF. QUIC working group forms. Turned
into a Transport protocol.
• June 2018 - Google implements custom QUIC.
• November 2018
• Litespeed and Facebook test first functional HTTP/3 web server
• IETF changes the name for HTTP-over-QUIC to be HTTP/3
• April 2019 - Cloudflare releases Warp VPN based on QUIC draft
• July 2019 - HTTP/3 Draft expires at IETF
• August 2019 - Chromium fork released. Initial support for end-to-end iQUIC +
HTTP/3
• September 2019 - cURL, NGINX, Google Chrome show early HTTP/3 support
6
HTTP/2 Connection Versus HTTP 1.1
7
Image Source: Cloudflare
HTTP/3 ConnectionVersus HTTP/2
8
Image Source: Medium
WAIT....
Wasn't HTTP/2 multiplexing supposed to solve Head of Line Blocking?
HTTP level = YES. TCP level = NO.
Latency and Dropped Packets Expose This Problem.
QUIC is an attempt to fix it all once and for all...
HTTP/3 Stack
10
Image Source: Kinsta
TLS 1.3
1.2+
QLOG
11
• Log for QUIC and HTTP/3 events
• JSON Format
• Allows for debugging and visualization for QUIC streams
• Still being stanndardized
Image Source: Robin Marx
HTTP/3 Challenges
Challenges To Testing
•Lack of Support
•Draft code still has debugging (slower)
•Few Web Server Choices:
•LiteSpeed Enterprise (-not- OpenLiteSpeed)
•Caddy Server (VERY NEW)
•Cloudfare does not support it (yet)
13
Challenges forHTTP/3
•+/- 5% QUIC connections fail
•CPU Intensive - Requires 2X or more servers
•UDP on port 443 is blocked
•UDP is not as optimized as TCP
•No standard API for QUIC (yet)
14
HTTP/3 Tools
“Tools? Where we're going, we don't need tools.”
15
Tools
• cURL (after September 11, 2019)
• HTTP3 Check (http3check.net)
• QLog visualization tool (quicvis.edm.uhasselt.be/#/files)
• Browser Dev Tools
• Apposite Netropy
• Node JS and Puppeteer (??)
• Neotys Neoload
16
Current IETF QUIC Implementations
•AIOQUIC - Python
•lsquic - C - LiteSpeed
•ngtcp2 - C - open source effort
•QUICHE - RUST - Cloudflare
•Quiche - Google (because naming is hard)
•mvfst - C++ - Facebook
https://github.com/quicwg/base-drafts/wiki/Implementations
17
Demo - Test Results
The Mission
• Using a realistic web site,
compare:
• HTTP 1.1
• HTTP/2
• HTTP/3 (QUIC)
• Cloudflare/No Cloudflare
• Netropy Proxy
Determine:
• Is Head of Line Blocking gone?
20
https://loadtesthttp3.com
“I apologizefor the crudityofthis model...”
• Set up and configure cloud server instance (Ubuntu 18.04)
• Seperate Database (MySQL 8 on AWS RDS service)
• Litespeed web server with PHP 7.3
• Wordpress with custom theme
• Setup Domain, Email, and Cloudflare DNS/Caching
• Set up Network Emulation (Netropy Proxy)
• Baseline with GTMetrix, Web Page Test, Chrome DevTools
• Run up to 50 virtual users with NeoLoad
21
Chrome Waterfalls
22
HTTP 1.1 - 4.6 sec HTTP 2 - 0.5 sec H2 QUIC - 2.5 sec
Test Results - HTTP 1.1- No Network Emulation
23
Test Results - HTTP 2- No Network Emulation
24
Test Results - QUIC - No Network Emulationor Cloudflare
25
AddNetwork Emulation- LTE
26
AddNetwork Emulation- Satellite
27
Test Results - HTTP 1 -WITH Network Emulation LTE
28
Test Results - HTTP 1 -WITH Network Emulation - Satellite
29
Test Results - HTTP 2- WITH Network Emulation- LTE
30
Test Results - HTTP 2- WITH Network Emulation- Satellite
31
Test Results - QUIC - WITH Network Emulation- LTE
32
Test Results - QUIC - WITH Network Emulation- Satellite
33
Summary
• It SEEMS to remove HTTP HOL - but...
• Requires more server CPU/Memory
• Low Bandwidth situations benefit the most
• Will need to be tested as the spec evolves
• Test Cases Should include
Network Emulation
• TCP transition to UPD will be slow
• UDP will need to be optimized
• Additional protocols will come (i.e. DNS)
34
Who To Follow
• Robin Marx - @programmingart
• Daniel Stenberg (cURL) - @bagder
• Lucas Pardue - @SimmerVigor
• Barry Pollard - @tunetheweb
• Cloudflare
• LiteSpeed
• IETF
• Scott Moore - @loadtester
• Apposite Technologies - @Apposite_Tech
35
References
• CURL HTTP/3 library - https://github.com/curl/curl/blob/master/docs/HTTP3.md
• AIOQUIC - Python implementation. https://github.com/aiortc/aioquic.
• Cloudflare QUIC site: https://cloudflare-quic.com/
• QUIC Working group (IETF): https://quicwg.org/
• QLog visualization tool: https://quicvis.edm.uhasselt.be/#/files
• QUIC implementations: https://github.com/quicwg/base-drafts/wiki/Implementations
• HTTP/3 Verification Check (from LiteSpeed) - https://http3check.net/
36
http://scottmoore.consulting
help@scottmoore.consulting
Questionsand Contact

PAC 2019 virtual Scott Moore

  • 1.
    Performance Testing HTTP/3(QUIC) by SCOTT MOORE
  • 2.
    Agenda •HTTP/3 (QUIC) Timeline •HTTP/3Technical Breakdown •HTTP/3 Challenges •Demo •Test Results and Findings •Q&A 2
  • 4.
  • 5.
    HTTP/2 AdptionRate Source: HTTP/2Adoption Dashboard (maintained by Telefónica Research, Case Western Reserve University, and Carnegie Mellon University
  • 6.
    HTTP/3 Timeline • 2014- Google deploys HTTP/2 over UDP. Calls it “QUIC”. • November 2016 - Google takes QUIC to IETF. QUIC working group forms. Turned into a Transport protocol. • June 2018 - Google implements custom QUIC. • November 2018 • Litespeed and Facebook test first functional HTTP/3 web server • IETF changes the name for HTTP-over-QUIC to be HTTP/3 • April 2019 - Cloudflare releases Warp VPN based on QUIC draft • July 2019 - HTTP/3 Draft expires at IETF • August 2019 - Chromium fork released. Initial support for end-to-end iQUIC + HTTP/3 • September 2019 - cURL, NGINX, Google Chrome show early HTTP/3 support 6
  • 7.
    HTTP/2 Connection VersusHTTP 1.1 7 Image Source: Cloudflare
  • 8.
  • 9.
    WAIT.... Wasn't HTTP/2 multiplexingsupposed to solve Head of Line Blocking? HTTP level = YES. TCP level = NO. Latency and Dropped Packets Expose This Problem. QUIC is an attempt to fix it all once and for all...
  • 10.
    HTTP/3 Stack 10 Image Source:Kinsta TLS 1.3 1.2+
  • 11.
    QLOG 11 • Log forQUIC and HTTP/3 events • JSON Format • Allows for debugging and visualization for QUIC streams • Still being stanndardized Image Source: Robin Marx
  • 12.
  • 13.
    Challenges To Testing •Lackof Support •Draft code still has debugging (slower) •Few Web Server Choices: •LiteSpeed Enterprise (-not- OpenLiteSpeed) •Caddy Server (VERY NEW) •Cloudfare does not support it (yet) 13
  • 14.
    Challenges forHTTP/3 •+/- 5%QUIC connections fail •CPU Intensive - Requires 2X or more servers •UDP on port 443 is blocked •UDP is not as optimized as TCP •No standard API for QUIC (yet) 14
  • 15.
    HTTP/3 Tools “Tools? Wherewe're going, we don't need tools.” 15
  • 16.
    Tools • cURL (afterSeptember 11, 2019) • HTTP3 Check (http3check.net) • QLog visualization tool (quicvis.edm.uhasselt.be/#/files) • Browser Dev Tools • Apposite Netropy • Node JS and Puppeteer (??) • Neotys Neoload 16
  • 17.
    Current IETF QUICImplementations •AIOQUIC - Python •lsquic - C - LiteSpeed •ngtcp2 - C - open source effort •QUICHE - RUST - Cloudflare •Quiche - Google (because naming is hard) •mvfst - C++ - Facebook https://github.com/quicwg/base-drafts/wiki/Implementations 17
  • 18.
    Demo - TestResults
  • 20.
    The Mission • Usinga realistic web site, compare: • HTTP 1.1 • HTTP/2 • HTTP/3 (QUIC) • Cloudflare/No Cloudflare • Netropy Proxy Determine: • Is Head of Line Blocking gone? 20 https://loadtesthttp3.com
  • 21.
    “I apologizefor thecrudityofthis model...” • Set up and configure cloud server instance (Ubuntu 18.04) • Seperate Database (MySQL 8 on AWS RDS service) • Litespeed web server with PHP 7.3 • Wordpress with custom theme • Setup Domain, Email, and Cloudflare DNS/Caching • Set up Network Emulation (Netropy Proxy) • Baseline with GTMetrix, Web Page Test, Chrome DevTools • Run up to 50 virtual users with NeoLoad 21
  • 22.
    Chrome Waterfalls 22 HTTP 1.1- 4.6 sec HTTP 2 - 0.5 sec H2 QUIC - 2.5 sec
  • 23.
    Test Results -HTTP 1.1- No Network Emulation 23
  • 24.
    Test Results -HTTP 2- No Network Emulation 24
  • 25.
    Test Results -QUIC - No Network Emulationor Cloudflare 25
  • 26.
  • 27.
  • 28.
    Test Results -HTTP 1 -WITH Network Emulation LTE 28
  • 29.
    Test Results -HTTP 1 -WITH Network Emulation - Satellite 29
  • 30.
    Test Results -HTTP 2- WITH Network Emulation- LTE 30
  • 31.
    Test Results -HTTP 2- WITH Network Emulation- Satellite 31
  • 32.
    Test Results -QUIC - WITH Network Emulation- LTE 32
  • 33.
    Test Results -QUIC - WITH Network Emulation- Satellite 33
  • 34.
    Summary • It SEEMSto remove HTTP HOL - but... • Requires more server CPU/Memory • Low Bandwidth situations benefit the most • Will need to be tested as the spec evolves • Test Cases Should include Network Emulation • TCP transition to UPD will be slow • UDP will need to be optimized • Additional protocols will come (i.e. DNS) 34
  • 35.
    Who To Follow •Robin Marx - @programmingart • Daniel Stenberg (cURL) - @bagder • Lucas Pardue - @SimmerVigor • Barry Pollard - @tunetheweb • Cloudflare • LiteSpeed • IETF • Scott Moore - @loadtester • Apposite Technologies - @Apposite_Tech 35
  • 36.
    References • CURL HTTP/3library - https://github.com/curl/curl/blob/master/docs/HTTP3.md • AIOQUIC - Python implementation. https://github.com/aiortc/aioquic. • Cloudflare QUIC site: https://cloudflare-quic.com/ • QUIC Working group (IETF): https://quicwg.org/ • QLog visualization tool: https://quicvis.edm.uhasselt.be/#/files • QUIC implementations: https://github.com/quicwg/base-drafts/wiki/Implementations • HTTP/3 Verification Check (from LiteSpeed) - https://http3check.net/ 36
  • 37.