github anton48/vk-turn-proxy-ios v1.0-build306
v1.0-build306 — the downlink scheduler ships, and the uplink gets an optional pacer

latest releases: v1.0-build314, v1.0-build311
3 days ago

The first release since build 219 (5 August), and it carries BOTH throughput
directions: the downlink work, which landed on 8-9 August and has been running
unreleased since, and the uplink pacer measured this week. (The gap since the
last SERVER release dates from May; the work in it does not.)

🚨 PAIR IT WITH THE SERVER. The downlink half needs srtp-build306 on the
server — build 221 sends a group hello that the old server does not understand,
and without it the scheduler treats every connection as its own client.

Download — faster, and it needs the new server

The server now schedules and paces each client's connections as ONE GROUP
rather than thirty independent ones. Measured across the August sweep:
22.5 → 103 Mbit/s at N=60 with ~100% delivery; on an ordinary phone at the
default N=30 it lands around 55-57 Mbit/s.

  • build 221 — the client announces its connection group to the server, which
    is what lets the scheduler see a pool instead of a crowd.
  • build 222 — the anonymous-mode connection cap goes 30 → 60. 30 stays the
    default and 60 is a CEILING
    , decided on extension memory (a 50 MB jetsam
    limit), not on throughput.

Upload — a new setting, OFF by default

Settings › Advanced › Uplink → "Pace the uplink". It spaces this device's
uploads across the relay connections instead of sending them in bursts, so the
relay's own per-allocation rate limit stops cutting them.

Measured on an iPhone SE with six alternating speedtests (17.08/tcptest1):

  • upload 22.97 → 54.17 Mbit/s, +136% — the ranges do not overlap, and all
    three adjacent pairs agree;
  • download, idle ping and loaded-DOWNLOAD ping: unchanged. The effect is
    direction-specific, which is the control;
  • the price: response time while the upload is saturated, 223 → 366 ms.

It ships OFF because of that last line: of the four criteria registered
before the run it passes three, and the latency one fails against an absolute
threshold — even though the delay it adds (~140 ms) is a third of what this
phone's own cellular link adds under the same load. Turn it on if you upload;
leave it off if you care most about latency under load. It takes effect
immediately, with no reconnect.

Rate and burst are fixed at 247 KiB/s per allocation and 16 KiB, and are
deliberately not adjustable: a 13-arm sweep measured 260 and 270 KiB/s as
strictly worse (100-200× the packet loss), because 247 is the only one of them
below the relay's rate-limit knee.

Removed

Uplink chunking is gone. It was swept over 14 arms and closed in August —
it cannot engage, and the chunk never survived to the wire on either transport.
It also bypassed the new pacer: only the first packet of a chunk was metered.
A value left behind by its removed Settings picker is now inert, and a one-shot
cleanup removes settings that other retired experiments wrote.

Diagnostics (builds 223-240)

Queue residence and blocked time on both bridge queues, TUN read-loop timing,
downlink disorder measured at the phone, the kernel's own view of the 30 outer
sockets, and a "Detailed log every second" switch in Advanced for when a
measurement needs it. All passive; none of them changes how packets move.

Also

  • Tap-to-dismiss the keyboard on the settings screens (build 220).
  • One-shot retirement of settings written by UIs that no longer exist, so a
    removed experiment cannot keep running silently.

Full record: the August progress files in the project's memory; the uplink work
is 17.08/tcptest1, the downlink work the M0-M3 sweep.

Don't miss a new vk-turn-proxy-ios release

NewReleases is sending notifications on new releases.