IITM
Indian Institute of Technology Madras Department of Computer Science and Engineering
CS6048 · Advanced Computer Networks Assignment 2 — Performance Analysis of QUIC vs TCP

DASH Streaming QoE Testbed BOLA adaptive bitrate · dash.js from remote CDN · HTTP/3 vs HTTP/2

dash.js — ABR: BOLA (not yet verified) transport: — idle
Bitrate
Rendition
Switches
0
Rebuffers
0
Rebuf. time
0s
Startup
Buffer
Throughput

Transport from Resource Timing · nextHopProtocol per segment

QUIC · HTTP/3
0
0 MB · —
TCP · HTTP/2 · HTTP/1.1
0
0 MB · —

A run is valid only if every segment landed on one protocol. A split count means the browser fell back mid-run — discard that run. Congestion control (CUBIC) is not visible from the browser; verify it on the hosts with ../setup_cubic.sh --verify.

Event log

Completed runs one row per run · 5 per protocol per condition

RunProtoCondition# DurSwUpDn RebufRebuf sStartup Avg MbpsAvg resStall %
No runs recorded yet.

Run setup

Representations from the MPD

idBitrateResolutionDecodable
Load a manifest to list the ladder.

Forcing the transport

The browser picks HTTP/3 on its own via Alt-Svc, which is not deterministic enough for a measurement. Launch a clean Chrome per arm:

# QUIC arm - force h3 to the server
google-chrome \
  --user-data-dir=/tmp/cn-quic \
  --enable-quic \
  --origin-to-force-quic-on=SERVER_IP:8088 \
  --ignore-certificate-errors-spki-list=SPKI

# TCP arm - QUIC compiled out of the run
google-chrome \
  --user-data-dir=/tmp/cn-tcp \
  --disable-quic \
  --ignore-certificate-errors-spki-list=SPKI

Confirm with the Transport panel above, and cross-check in DevTools → Network → Protocol column (h3 vs h2).

CPU utilisation

A page cannot read process CPU. Sample it alongside the run and merge on the run label when plotting:

# desktop client, 1 Hz for the run duration
pidstat -u -h -p $(pgrep -d, chrome) 1 120 \
  > cpu_PROTO_COND_runN.log

# android
adb shell top -n 120 -d 1 -o %CPU,ARGS \
  | grep -i chrome > cpu_mobile_PROTO_runN.log