aboutsummaryrefslogtreecommitdiffstats
path: root/research
diff options
context:
space:
mode:
authoreunhhu <[email protected]>2026-09-29 10:48:59 +0100
committereunhhu <[email protected]>2026-09-29 10:48:59 +0100
commit34fc79fe568784294a274851e3040c1171af1fe2 (patch)
treeb4860e9fd8a27f30e911f65d8ebd10d1158bb9c9 /research
parent4bf5b1250b6f6dbf0f35525b61792de54624fab3 (diff)
downloadpure-34fc79fe568784294a274851e3040c1171af1fe2.tar.gz
pure-34fc79fe568784294a274851e3040c1171af1fe2.zip
Let M6's path waver by 1 ms when flows share it, and count from 20 s of 60
With a fixed delay the drop-tail queue dropped one flow's packets eight times as often as the other's by their phases alone (Floyd and Jacobson, 1992): Pure took 0.63-0.77 of the path from TCP and 0.69 from quinn, 0.47 from itself, and 0.49 under fq_codel. With 1 ms of jitter it takes 0.53 at an RTT of 20 ms.
Diffstat (limited to 'research')
-rw-r--r--research/experiments/020-lossy-paths/run.py15
1 files changed, 9 insertions, 6 deletions
diff --git a/research/experiments/020-lossy-paths/run.py b/research/experiments/020-lossy-paths/run.py
index 5fc2ede..9dbb53f 100644
--- a/research/experiments/020-lossy-paths/run.py
+++ b/research/experiments/020-lossy-paths/run.py
@@ -18,8 +18,11 @@ GSO: a qdisc takes a GSO burst as one packet.
queued (written) to handed over (read): p50, p99, max.
share Pure, quinn or a second TCP flow beside a TCP CUBIC flow, each a
process of its own, started together, for --share-seconds; each
- one's share of the goodput from 10 s on (CUBIC's flows converge
- slowly at an RTT of 100 ms).
+ one's share of the goodput from 20 s on (CUBIC's flows converge
+ slowly at an RTT of 100 ms). The path's delay wavers by 1 ms: with
+ a fixed delay a drop-tail queue drops one flow's packets far more
+ than the other's by their phases alone (Floyd and Jacobson, 1992),
+ and which flow that is says nothing of either.
python3 research/experiments/020-lossy-paths/run.py [--rounds 3] [--out FILE]
"""
@@ -228,8 +231,8 @@ def inner(case):
else:
theirs = finish_quinn(start_quinn(work, seconds), seconds)['timeline_100ms']
mine = finish_tcp(tcp, seconds)
- row['mbit'] = goodput(theirs, SIZE + 13, 10.0, seconds - 1)
- row['tcp_mbit'] = goodput(mine, 1, 10.0, seconds - 1)
+ row['mbit'] = goodput(theirs, SIZE + 13, 20.0, seconds - 1)
+ row['tcp_mbit'] = goodput(mine, 1, 20.0, seconds - 1)
total = row['mbit'] + row['tcp_mbit']
row['share'] = round(row['mbit'] / total, 3) if total else 0.0
return row
@@ -248,14 +251,14 @@ def cases(seconds, share_seconds):
for who in ('pure', 'quinn'):
yield {'kind': 'paced', 'who': who, 'rtt_ms': rtt, 'loss': loss, 'jitter_ms': 0, 'seconds': seconds}
for who in ('pure', 'quinn', 'tcp'):
- yield {'kind': 'share', 'who': who, 'rtt_ms': rtt, 'loss': 0, 'jitter_ms': 0, 'seconds': share_seconds}
+ yield {'kind': 'share', 'who': who, 'rtt_ms': rtt, 'loss': 0, 'jitter_ms': 1, 'seconds': share_seconds}
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--rounds', type=int, default=1)
parser.add_argument('--seconds', type=int, default=20)
- parser.add_argument('--share-seconds', type=int, default=40)
+ parser.add_argument('--share-seconds', type=int, default=60)
parser.add_argument('--only', default=None, help='kinds to run, for example bulk,share')
parser.add_argument('--out', type=Path, default=None)
parser.add_argument('--inner', default=None, help=argparse.SUPPRESS)