<feed xmlns='http://www.w3.org/2005/Atom'>
<title>pure/research/experiments/020-lossy-paths, branch master</title>
<subtitle>Verified execution runtime unifying state, persistence, and replication.
</subtitle>
<id>http://git.yeowoo.org/pure/atom?h=master</id>
<link rel='self' href='http://git.yeowoo.org/pure/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/pure/'/>
<updated>2026-09-29T17:15:11Z</updated>
<entry>
<title>Say what adopting the link took, and how it fares against ngtcp2 (102)</title>
<updated>2026-09-29T17:15:11Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-29T17:15:11Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/pure/commit/?id=b09bda62059e11ee43ae6d1fd62bf31e2e4fbde6'/>
<id>urn:sha1:b09bda62059e11ee43ae6d1fd62bf31e2e4fbde6</id>
<content type='text'>
102: the spec (012) and a receiver written from it alone; the four holes
writing it found (REFUSED, the record's size, a peer's run places, the
memo's places beside) and the credit M6 showed fixed at 1,024 records;
M6 with ngtcp2 as a third, two rounds. Under reordering Pure carries the
most (45 Mbit/s; ngtcp2 29-47, quinn 1-2), under random loss the three
are the same, on a clean bottleneck Pure carries 3-5 % less (its framing,
some 112 B a packet to QUIC's 41), and where loss and reordering meet
ngtcp2 carries 1.3-3.6 times as much: undoing a loss it took for
reordering, it restores the window a real loss had cut too (its log: 22
of 34 undos past the window before the last cut; none without
reordering). Shares beside TCP stay within 25 %.

011 and the status table say so; 012 also says that a receiver answers
within 25 ms (a sender's PTO counts on it), that a shape and a record's
bytes are the app's, and why a packet of the past does no harm.
</content>
</entry>
<entry>
<title>Put ngtcp2 beside quinn in M6, as it is in M5</title>
<updated>2026-09-29T15:57:02Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-29T15:57:02Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/pure/commit/?id=1d6d2430960622589f6c11220e09ba4b6dba2989'/>
<id>urn:sha1:1d6d2430960622589f6c11220e09ba4b6dba2989</id>
<content type='text'>
drain.c takes a rate and seconds as quinn's client does (paced messages
stamped with the time they were written, and no more written past the
seconds), and its service writes quinn's line for each stream: the
messages read in each 100 ms and how long they took. 020's run.py runs
it as a third, on port 40005 behind the same bottleneck, and --who
picks whom to run.
</content>
</entry>
<entry>
<title>Keep a sender's congestion state as one, so an episode undoes it whole</title>
<updated>2026-09-29T13:43:30Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-29T13:43:30Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/pure/commit/?id=aee9eada19eb54203d776a61958e75e296767c0e'/>
<id>urn:sha1:aee9eada19eb54203d776a61958e75e296767c0e</id>
<content type='text'>
The window, threshold, the start of recovery and CUBIC's four values were
fields of their own, and an episode of congestion events copied each of
the seven aside and back. Now they are one Congestion: an episode keeps
a copy, and undoing it takes the copy back, the window grown since kept.
test-link's results and the M6 simulator's are the same to the byte.
</content>
</entry>
<entry>
<title>Measure a link on paths of loss, reordering and a bottleneck, against quinn (097)</title>
<updated>2026-09-29T10:49:32Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-29T10:49:32Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/pure/commit/?id=8140a59205911170e151c95ed5596db7aa0d5ba5'/>
<id>urn:sha1:8140a59205911170e151c95ed5596db7aa0d5ba5</id>
<content type='text'>
M6 of design 011: with a 50 Mbit/s bottleneck, a link carries 21-41
times quinn's goodput when packets reorder, the same under random loss,
and 1.3-3.5 times with both; its p99 at 50 records a second is the same
or shorter; beside TCP CUBIC it takes 0.48-0.55 of the path, inside the
guardrail. Only on a clean path is it 3-5% below quinn.
</content>
</entry>
<entry>
<title>Let M6's path waver by 1 ms when flows share it, and count from 20 s of 60</title>
<updated>2026-09-29T09:48:59Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-29T09:48:59Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/pure/commit/?id=34fc79fe568784294a274851e3040c1171af1fe2'/>
<id>urn:sha1:34fc79fe568784294a274851e3040c1171af1fe2</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>Record one round of M6 with the path's MTU found, before pacing (020)</title>
<updated>2026-09-29T08:49:35Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-29T08:49:35Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/pure/commit/?id=04fa30f5a321f3ce468e02f74851ebb6f795344e'/>
<id>urn:sha1:04fa30f5a321f3ce468e02f74851ebb6f795344e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Let the M6 simulator queue records at a rate and time each one</title>
<updated>2026-09-29T08:29:11Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-29T08:29:11Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/pure/commit/?id=2f3e24cea1ec49e52db11442e3bf084da1714192'/>
<id>urn:sha1:2f3e24cea1ec49e52db11442e3bf084da1714192</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Start M6's flows together, each a process, and count their shares from 10 s</title>
<updated>2026-09-29T08:27:50Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-29T08:27:50Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/pure/commit/?id=37d1ffb8b749cd9a0d7e4e2829a84d11e38c0991'/>
<id>urn:sha1:37d1ffb8b749cd9a0d7e4e2829a84d11e38c0991</id>
<content type='text'>
The TCP flow started first and in a thread of the runner; two TCP flows
split 0.31 to 0.56. Now every flow is a process started at once, run
40 s, counted from 10 s on.
</content>
</entry>
<entry>
<title>Find how large a packet the path carries: 1,452 bytes once a probe is acknowledged</title>
<updated>2026-09-29T08:27:49Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-29T08:27:49Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/pure/commit/?id=f26f5fbd0a487a9a2848f819361b4e6fdd7a9cb1'/>
<id>urn:sha1:f26f5fbd0a487a9a2848f819361b4e6fdd7a9cb1</id>
<content type='text'>
A link starts at 1,200 bytes; once an RTT is known it sends a PING padded
to 1,452 (DPLPMTUD, RFC 8899), alone and with the don't-fragment bit,
and uses that size once it is acknowledged. A probe lost is no
congestion; it is tried again a second on, three times, then ten minutes
on. GSO is asked for each burst (a control message), not the socket, so
a packet sent alone is never cut. CUBIC counts in the datagram.

On loopback packets fall by 19-27%; the CPU a record falls 13% at 1 KiB
and 7% at 16 KiB; in the simulator of a 50 Mbit/s path with 1% loss the
goodput rises from 6.1 to 7.0 Mbit/s (5%: 2.3 to 3.0).
</content>
</entry>
<entry>
<title>Record M6 with records in parts and no path MTU yet (020)</title>
<updated>2026-09-29T08:22:46Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-29T08:22:46Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/pure/commit/?id=a6c825b8613177e32e9bf43e2abd6ac820bc8321'/>
<id>urn:sha1:a6c825b8613177e32e9bf43e2abd6ac820bc8321</id>
<content type='text'>
</content>
</entry>
</feed>
