Highlights
🐛 Userspace tunnel: up to 13× faster interactive round-trips
Every DTX/RemoteXPC round-trip over the userspace tunnel used to stall for one
full delayed-ACK timer. The device Nagle-holds the tail segment of each
multi-segment response until our stack ACKs the previous one, and pmd-pytcp's
RFC-default timer is 100 ms — so short interactive operations paid ~110 ms
apiece, and the RSD/DTX handshakes paid several timers each. The delayed-ACK
timer is now dropped to 1 ms (effectively ACK-immediately) through the same
registered-knob check as the other throughput sysctls, so an older pmd-pytcp
just logs and runs untuned. Measured on a USB iPhone (iPhone12,1):
dvt ls /round-trip: 110 ms → 8 ms- RSD connect: 400 ms → ~85 ms; DTX connect: 190 ms → ~78 ms
- full
dvt ls /CLI: 1.45 s → 0.82 s - bulk transfers unaffected: DSC download stays at 38–39 MB/s
In addition, the userspace branch of tun_read_task no longer pays one
event-loop reschedule per outbound packet. It now batch-drains the stack egress
the same way the kernel-tun path does — one wakeup services a whole egress
burst — and hoists the per-packet Ethernet header and EtherType constants out
of the hot paths. This also moves Windows off the per-packet win32 branch.
What's Changed
- 5100e27 userspace_tunnel: drain the stack egress in batches and hoist per-packet constants (#1778) (@doronz88)
- 0c117fe userspace_tunnel: drop the pytcp delayed-ACK timer to 1 ms (#1778) (@doronz88)
Full Changelog: v9.36.2...v9.36.3