mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 10:18:54 +00:00
Closes #5589. Refs #5571 Improves upload speeds on my Windows 11 VM from 2 Mbps to 10.5 Mbps. On the resource-constrained VM it improved from 3 to 7 Mbps. ```[tasklist] ### Tasks - [x] Open for review - [x] Manual test on resource-constrained VM - [x] Run 5x replication steps from #5571 and make sure it doesn't deadlock again - [x] Merge - [ ] https://github.com/firezone/firezone/issues/5601 ``` Sorted by decreasing speed, M = macOS host, W = Windows guest in Parallels, RC = Resource-constrained Windows guest in VirtualBox: - M, Internet - 16 Mbps - W, Internet - 13 Mbps - M, Firezone - 12 Mbps - RC, Internet - 12 Mbps - W, Firezone, after this PR - 10.5 Mbps - RC, Firezone, after this PR - 8.5 Mbps - RC, Firezone, before this PR - 4 Mbps - W, Firezone, before this PR - 2 Mbps So it's not perfect but the worst part is fixed. The slow upload speeds were probably a regression from #5571. The MPSC channel only has a few spots in it, so if connlib doesn't pick up every packet immediately (which would be impossible under load), we drop packets. I measured 25% packet drops in an earlier commit. I first tried increasing the channel size from 5 to 64, and that worked. But this solution is simpler. I switch back to `blocking_send` so if connlib isn't clearing the MPSC channel, Wintun will just queue up packets in its internal ring buffers, and we aren't responsible for buffering. Getting rid of `blocking_send` was a defense-in-depth thing to fix the deadlock yesterday, but we still close the MPSC channel inside `Tun::drop`, and I confirmed in a manual test that this will kick the worker thread out of `blocking_send`, so the deadlock won't come back.
Connlib
Firezone's connectivity library shared by all clients.
Building Connlib
You shouldn't need to build connlib directly; it's typically built as a dependency of one of the other Firezone components. See READMEs in those directories for relevant instructions.