Skip to content

DAG engine review, September 2026 ​

Date: 2026-09-07 to 2026-09-10Link: wired gigabit, RTT 47.4 ms to the lab serverControl: rclone v1.74.0Builds: review builds between 4.1.9 and 4.2.0Status: dated record

This is the record of a review of the DAG transfer engine in September 2026. The review measured each fix against the build before it, with rclone running the same cell in the same window as a control. It is published as a dated record: the builds are review builds, not releases, and the current release is measured in the comparative battery of October 2026.

How to read these numbers ​

  • The control is what makes a row readable. Contention on the station or on the shared uplink usually moves both tools in a cell. A row where AeroFTP moved and rclone did not most likely describes the code, and a row where both moved most likely describes the window; it is evidence, not proof, since a network or server change can affect two clients differently.
  • The noise floor is per target and per tool. In a quiet window AeroFTP rows spread 2 to 5 percent on S3 and WebDAV; one rclone pair on WebDAV spread 17.5 percent; FTP reached 42 percent between identical runs. A single run on this bench cannot separate a 40 percent effect from noise, so every table says how many runs it has.
  • Ratios are rclone seconds over AeroFTP seconds. Above 1.00, AeroFTP is faster. The link is the bottleneck for both tools, so ratios travel better than absolute seconds.
  • FTP rows are not like-for-like unless stated. The FTP lab profile uses explicit TLS (the default for a new FTP profile in AeroFTP), while the rclone remote in this battery used plain FTP. That asymmetry penalises AeroFTP. The one like-for-like FTP cell is marked as such.

Setup ​

  • Station: one Linux desktop, 12 cores, wired gigabit. Another job compiled Rust on the same station during both main sessions, and a second machine shared the uplink. Both confounds touch absolute seconds; neither can make one tool move while the other stays still.
  • Targets: one remote lab server running OpenSSH (SFTP), vsftpd (FTP with explicit TLS), Apache mod_dav behind nginx (WebDAV) and MinIO (S3).
  • Payloads: 5,000 files of 4 KiB ("small tree"), one 300 MiB file, a 200-file mixed tree, and 20 MiB under --limit-rate 2M for the rate cap cells.
  • Integrity: every download was compared with the source by SHA-256, file by file for trees. A timing without that check is not reported.
  • Binaries: each build was pinned by commit and identified by probing its behaviour, not by the directory it came from.
LabelCommitWhat it addssha256 (first 16)
before3417fcb46baselineb1b3d6a619bde840
after38d5c0b96session reuse and the review fixes (#735)12892e18beb9aa11
third7336fa6b5no size probe per small file (#757)7b9c2a244bcce827
fourth53ed27ce8parallel tree walk for check (#758)bb8daf4e7e3b43a8
ceiling4b25a288bSFTP --parallel up to 16 (#761)
FTP closea0d19d381FTP data close on the server's signal (#769)
stat overlap34c07bb6cSFTP stat and open overlapped (#782), against its base 43a37db1c

1. Session reuse on SFTP, and sync on S3 ​

One run per cell, 8 September 2026. Seconds, lower is better.

CellAeroFTP beforeAeroFTP afterrclone beforerclone afterRatio after
SFTP small tree, --parallel 4, upload1391.20330.52687.47643.641.95
SFTP small tree, --parallel 4, download1294.21272.76421.92431.571.58
SFTP small tree, --parallel 16, upload1383.41316.02366.92344.001.09
SFTP small tree, --parallel 16, download1293.45264.41115.86109.890.42
SFTP small tree, first sync1391.25313.60689.57649.912.07
SFTP 300 MiB, download155.0041.9117.4118.970.45
SFTP 300 MiB, upload39.7920.9211.8811.520.55
S3 small tree, sync with nothing to do69.903.5028.1130.278.65
S3 small tree, sync with a delta73.823.7730.9630.748.15

rclone stayed within 9 percent on every control while AeroFTP moved by 47 to 95 percent, so the movement belongs to the build. The --parallel 16 rows did not improve over --parallel 4 because on these builds the SFTP pool stopped at four sessions; section 3 shows what happened when that ceiling was raised. The 300 MiB SFTP rows are single-stream on this build; the channel effect on them is on the fixed pipe page.

2. The rate cap: slower is the correct answer ​

20 MiB under --limit-rate 2M should take 10.0 seconds. A faster time means the cap was ignored. One run per cell.

CellbeforeafterVerdict
S3 download3.089.75cap honoured after
S3 upload2.1610.13cap honoured after
WebDAV download2.909.55cap honoured after
WebDAV upload1.6310.10cap honoured after
FTP download4.5310.51cap honoured after
SFTP, both directions13 and 18 percent over target12 and 18 percent over targetcap honoured on both builds, unchanged

A table of percentage changes without the 10-second target would show these rows as a large regression.

The FTP upload under the cap stayed about 3 seconds over target after #735. The overshoot was constant in seconds (2.93 s over a 10 s target, 3.03 s over a 20 s one), which pointed at a fixed cost rather than a mistuned limiter: the client waited a timed interval before closing each data connection. #769 waits for the server's signal instead. Two runs, prediction written into the script before measuring:

Rowbefore #769predictedmeasured, two runs
FTP upload at 2M12.9311.0010.96, 10.84
FTP upload, 20 MiB, no cap4.762.702.96, 2.71
FTP upload, 1 MiB, no cap2.402.142.43, 2.27

3. SFTP above four sessions ​

Before #761, the SFTP provider capped its pool at four sessions, so --parallel 16 did what --parallel 4 did. Two runs per build, interleaved, integrity verified.

Cellceiling 4, two runsceiling 16, two runsChange of the mean
small tree, --parallel 16, download258.32, 254.60123.33, 129.60-51%
small tree, --parallel 16, upload285.74, 289.91144.67, 147.31-49%
small tree, --parallel 4, download (control)252.49, 248.85248.05, 243.85-2%
small tree, --parallel 4, upload (control)296.16, 293.33286.95, 284.72-3%

The --parallel 16 rows halve and the --parallel 4 rows do not move: the ceiling was raised without changing the default. A socket count taken during the runs read 10 connections at --parallel 16 and 6 at --parallel 4 on the new build (the count includes the main connection), so the pool follows the request instead of always opening its maximum.

Against rclone at --transfers 16, after this fix: upload 145.99 s against 344.00 s (ratio 2.36), download 126.47 s against 109.89 s (ratio 0.87).

4. Closing the last SFTP gap: stat and open overlapped ​

The download at --parallel 16 was the last row of the review where rclone was ahead. #782 overlaps the stat and open round trips for small files whose size is already known from the listing. Two interleaved runs, 20 integrity checks, 0 failed.

RunAeroFTP baserclone, same windowAeroFTP with #782rclone, same window
1133.63105.6399.60106.01
2136.48109.05103.49109.65

The medians move from 135.06 s to 101.54 s (-24.8 percent) while rclone moves by +0.5 percent. rclone in the same runs sits at about 107.5 s, so AeroFTP finished this cell about 5.6 percent ahead (ratio 1.06). The same change also improved --parallel 4 from 252.17 s to 202.04 s, where rclone took 382.62 s in the same window (one run per build, ratio 1.89).

The saving was larger than a simple model predicts: one round trip per file over ten sessions accounts for about 25 seconds, and the measured saving was 33.5 seconds. The direction and the order of magnitude agree; the remaining third is not explained here.

5. A regression found and fixed in the same review ​

The "after" build added one size probe before every small-file download (a signed HEAD on S3, a one-byte Range request on WebDAV). Three builds in one window, interleaved twice, integrity verified on all twelve runs:

Cellbeforeafterthird (#757)
S3 small tree, download67.68, 69.02124.94, 127.7769.67, 67.41
WebDAV small tree, download69.60, 71.85130.53, 124.2464.97, 67.39

The added time matches one extra round trip per file on each of the four download channels: 5,000 files over 4 channels is 1,250 files per channel, and the mean increases (58.0 s on S3, 56.7 s on WebDAV) divided by 1,250 give 46 ms and 45 ms, against a measured RTT of 47.36 ms. #757 removed the probe.

6. check on a populated remote ​

#758 moved the remote tree walk of check, reconcile and cryptcheck onto parallel sessions. One run per build: check opened 5 sessions instead of 1 and went from 11.37 s to 5.78 s. sync reached the remote tree through other walkers on that build and did not change; #762 followed for it.

7. FTP, like-for-like ​

The only FTP cell of the review where both tools ran the same transport. 1 MiB upload, three runs per arm, base commit 43a37db1c.

ArmSeconds
AeroFTP, plain FTP1.98
AeroFTP, explicit TLS (its default)2.22
rclone, plain FTP2.00
rclone, explicit TLS limited to TLS 1.2 (needs --ftp-disable-tls13)3.22
rclone, explicit TLS with its defaultsdoes not complete the transfer

Plain against plain the two tools are level. With TLS, AeroFTP is faster. Against this server (vsftpd 3.0.5, which requires each data connection to reuse the control connection's TLS session), rclone v1.74.0 with its default settings did not complete an upload over explicit TLS, and with --ftp-disable-tls13 it did; the mechanism on rclone's side was not isolated, so this is a result for this server and these versions. AeroFTP caps FTP over TLS at TLS 1.2 because, with its TLS library, a TLS 1.3 session ticket is consumed when used and a second data connection would not resume the control connection's session; its rclone exporter writes disable_tls13 into exported FTP remotes since 4.2.0.

An earlier reading of this cell compared AeroFTP over TLS with rclone in plain FTP and reported a 0.48 s gap. That arm of the cell had failed on every run and was not counted; the figure above replaces it.

8. What was left out, and why ​

The first pass of the review flagged eight anomalies. Each was repeated with the rclone control before anything was concluded.

Anomaly in the first passAfter repetitionVerdict
WebDAV 300 MiB upload, +44%+15%, and rclone moved +29% in the same windowthe link, not the build
FTP 300 MiB upload, +20%-12%sign reversed, environment
S3 first sync, +15%-5%environment
SFTP sync with nothing to do, -20%+2%environment
FTP slower above 4 channelsa six-point curve with two runs each: 8 channels is the best point, rclone has the same shapenoise
Interrupted upload resumed slowly, +39%on this link 15 of 16 legs finished before the 60 s kill, so they measured no resumeinstrument; rows dropped
FTP upload under the rate cap, +20%reproduced, then explained as a fixed cost per data connectionfixed by #769, section 2
S3 mixed 200-file upload, +17%eight runs per build, rclone subtracted: -2.0 points against a noise floor of 13.4%not a regression

Six of the eight did not survive repetition, and the seventh was a real cost with a different cause. Publishing after the first pass would have reported six false leads.

9. The channel sweep, and one row that does not measure what it says ​

The review also swept the number of channels on one 300 MiB download per protocol. Those tables live on the fixed pipe page, because they measure channel count, not the DAG engine against an older path.

The S3 points of that sweep were all single-stream. On these builds the S3 multi-stream download took the object size from a HEAD response through a call that always returns 0 for HEAD, so no download ever reached the range path, whatever the requested channel count. #881 fixed it on 19 September. The differences between the S3 points are noise, and the sweep says nothing about S3 ranged downloads. They are measured on 4.2.1 in the comparative battery.

Declared limits ​

  • One station, one uplink, one lab server. These numbers describe this link and these servers, not a general ranking.
  • Rows marked as one run are one run. On this bench a single run cannot separate a 40 percent effect from noise.
  • The review builds sit between 4.1.9 and 4.2.0; the fixes listed above shipped in 4.2.0.
  • The FTP rows outside section 7 compare AeroFTP over explicit TLS with rclone in plain FTP.
  • The station's CPU was shared with a compiler during both main sessions, and the uplink with a second machine. Both affect absolute seconds for both tools.

aeroftp.app - Released under the GPL-3.0 License. AeroFTP Reviews