All benchmark results
The full set of comparisons for syq 0.5.2, including other settings and every test run.
Copying to a distant server
Send a file or folder from Germany to the US East Coast.
Files stay in memory, so this tests the connection rather than disk writes.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. Two Hetzner Cloud CCX23 guests, each with 4 dedicated vCPUs and 16 GiB RAM, Debian 13. Warm tmpfs at both endpoints. Default syq uses SSH-authenticated encrypted TCP; the SSH control disables TCP; rsync uses SSH. Packet counters independently checked large-file data paths. Small-file data paths were not recorded per repetition. Both directions share allocations and are separate comparisons, not independent replications. Germany โ US East Coast; approximately 107 ms round-trip latency.
One large file
1 file ยท 1.07 GB total ยท copying to an empty folder
syq is 8.82ร faster than rsync in this run.
syq transfers different parts of the same file in parallel, including over SSH. Its default mode adds another speedup by sending the data over separate encrypted TCP connections, using SSH only to log in.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 6.44 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 1 | 6.25 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 2 | 7.55 s | โ | 0 | True | warm | TCP ยท observed |
| syq-ssh | 0 | 12.3 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 1 | 12.3 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 2 | 12.3 s | โ | 0 | True | warm | SSH ยท observed |
| rsync | 0 | 59.5 s | โ | 0 | True | warm | โ |
| rsync | 1 | 59.2 s | โ | 0 | True | warm | โ |
| rsync | 2 | 59.8 s | โ | 0 | True | warm | โ |
A folder of large files
16 files ยท 1.07 GB total ยท copying to an empty folder
syq is 8.65ร faster than rsync in this run.
syq copies several files at once and can split each file across several encrypted TCP connections. It uses SSH to log in, but the file data can bypass SSH.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 6.09 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 1 | 7.14 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 2 | 7.34 s | โ | 0 | True | warm | TCP ยท observed |
| syq-ssh | 0 | 12.5 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 1 | 12.5 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 2 | 12.4 s | โ | 0 | True | warm | SSH ยท observed |
| rsync | 0 | 59.1 s | โ | 0 | True | warm | โ |
| rsync | 1 | 59.7 s | โ | 0 | True | warm | โ |
| rsync | 2 | 59.0 s | โ | 0 | True | warm | โ |
Many small files
5,000 files ยท 21 MB total ยท copying to an empty folder
rsync is 1.06ร faster than syq in this run.
rsync finishes sooner here. Sending lots of small files involves work for each file, even though syq groups them together for transfer. Weโre still investigating the gap.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 4.13 s | โ | 0 | True | warm | Unrecorded |
| syq | 1 | 4.08 s | โ | 0 | True | warm | Unrecorded |
| syq | 2 | 4.13 s | โ | 0 | True | warm | Unrecorded |
| syq-ssh | 0 | 5.64 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 1 | 5.59 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 2 | 5.59 s | โ | 0 | True | warm | SSH ยท requested |
| rsync | 0 | 3.88 s | โ | 0 | True | warm | โ |
| rsync | 1 | 3.88 s | โ | 0 | True | warm | โ |
| rsync | 2 | 3.88 s | โ | 0 | True | warm | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | syq 0.5.2 / da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--rsync-path", "/path/to/syq"], "debug": false} |
| syq-ssh | syq 0.5.2 | syq 0.5.2 / da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef | {"name": "syq-ssh", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--rsync-path", "/path/to/syq", "--syq-no-tcp"], "debug": false} |
| rsync | rsync version 3.4.1 protocol version 32 | rsync version 3.4.1 protocol version 32 / a56c05b960beb734169619d5760b43ff495e84f85a93eb1f54fe58118262fb20 | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
{
"started": "2026-09-09T00:04:42+00:00",
"seed": 204330278,
"host": {
"kernel": "6.12.107+deb13-cloud-amd64",
"machine": "x86_64",
"cpus": 4,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "tmpfs",
"destination": "tmpfs"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/public-wan-forward.toml",
"environment": {
"kernel": "6.12.107+deb13-cloud-amd64",
"versions": {
"syq": "syq 0.5.2",
"syq-ssh": "syq 0.5.2",
"rsync": "rsync version 3.4.1 protocol version 32"
},
"allowed_cpus": 4,
"governors": [
"unavailable"
],
"cpu_model": "AMD EPYC-Milan Processor"
},
"path_filesystems": {
"source": "tmpfs",
"destination": "tmpfs"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture.",
"remote_identity_basis": "Independent deployment and final hashes of the explicit --rsync-path helper, checked on both endpoints; the stock PATH probe did not identify that helper.",
"transport_evidence": "Per-copy destination-port byte counters checked for every large-file and large-files repetition; small-file and update paths are not inferred from those controls."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"remote end: fixture pages evicted on the client only",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"Per-copy OUTPUT packet/byte counters distinguish benchmark TCP ports from SSH; headers/control packets included; same rules for all tools.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "public-wan-forward",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "benchmark-peer:/path/to/empty-destination-scratch",
"ssh": "/usr/bin/ssh"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--rsync-path",
"/path/to/syq"
],
"debug": false
},
{
"name": "syq-ssh",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--rsync-path",
"/path/to/syq",
"--syq-no-tcp"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "large-file",
"kind": "large-file",
"bytes": 1073741824,
"files": 1
},
{
"name": "large-files",
"kind": "small-files",
"bytes": 1073741824,
"files": 16
},
{
"name": "small-files",
"kind": "small-files",
"bytes": 20971520,
"files": 5000
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "warm",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 300,
"slow_cutoff": 0
}
}
}Copying back from a distant server
Send the same files from the US East Coast back to Germany.
The same two servers, with files again kept in memory.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. Two Hetzner Cloud CCX23 guests, each with 4 dedicated vCPUs and 16 GiB RAM, Debian 13. Warm tmpfs at both endpoints. Default syq uses SSH-authenticated encrypted TCP; the SSH control disables TCP; rsync uses SSH. Packet counters independently checked large-file data paths. Small-file data paths were not recorded per repetition. Both directions share allocations and are separate comparisons, not independent replications. US East Coast โ Germany; approximately 107 ms round-trip latency.
One large file
1 file ยท 1.07 GB total ยท copying to an empty folder
syq is 8.41ร faster than rsync in this run.
syq transfers different parts of the same file in parallel, including over SSH. Its default mode adds another speedup by sending the data over separate encrypted TCP connections, using SSH only to log in.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 6.84 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 1 | 7.31 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 2 | 7.19 s | โ | 0 | True | warm | TCP ยท observed |
| syq-ssh | 0 | 12.2 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 1 | 12.3 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 2 | 12.2 s | โ | 0 | True | warm | SSH ยท observed |
| rsync | 0 | 59.5 s | โ | 0 | True | warm | โ |
| rsync | 1 | 60.0 s | โ | 0 | True | warm | โ |
| rsync | 2 | 59.9 s | โ | 0 | True | warm | โ |
A folder of large files
16 files ยท 1.07 GB total ยท copying to an empty folder
syq is 8.14ร faster than rsync in this run.
syq copies several files at once and can split each file across several encrypted TCP connections. It uses SSH to log in, but the file data can bypass SSH.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 7.43 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 1 | 7.39 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 2 | 7.29 s | โ | 0 | True | warm | TCP ยท observed |
| syq-ssh | 0 | 12.5 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 1 | 12.5 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 2 | 12.4 s | โ | 0 | True | warm | SSH ยท observed |
| rsync | 0 | 59.9 s | โ | 0 | True | warm | โ |
| rsync | 1 | 60.3 s | โ | 0 | True | warm | โ |
| rsync | 2 | 59.8 s | โ | 0 | True | warm | โ |
Many small files
5,000 files ยท 21 MB total ยท copying to an empty folder
rsync is 1.05ร faster than syq in this run.
rsync finishes sooner here. Sending lots of small files involves work for each file, even though syq groups them together for transfer. Weโre still investigating the gap.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 4.13 s | โ | 0 | True | warm | Unrecorded |
| syq | 1 | 4.13 s | โ | 0 | True | warm | Unrecorded |
| syq | 2 | 4.13 s | โ | 0 | True | warm | Unrecorded |
| syq-ssh | 0 | 5.68 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 1 | 5.68 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 2 | 5.59 s | โ | 0 | True | warm | SSH ยท requested |
| rsync | 0 | 3.93 s | โ | 0 | True | warm | โ |
| rsync | 1 | 3.93 s | โ | 0 | True | warm | โ |
| rsync | 2 | 3.93 s | โ | 0 | True | warm | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | syq 0.5.2 / da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--rsync-path", "/path/to/syq"], "debug": false} |
| syq-ssh | syq 0.5.2 | syq 0.5.2 / da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef | {"name": "syq-ssh", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--rsync-path", "/path/to/syq", "--syq-no-tcp"], "debug": false} |
| rsync | rsync version 3.4.1 protocol version 32 | rsync version 3.4.1 protocol version 32 / a56c05b960beb734169619d5760b43ff495e84f85a93eb1f54fe58118262fb20 | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
{
"started": "2026-09-09T00:16:24+00:00",
"seed": 204330278,
"host": {
"kernel": "6.12.107+deb13-cloud-amd64",
"machine": "x86_64",
"cpus": 4,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "tmpfs",
"destination": "tmpfs"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/public-wan-reverse.toml",
"environment": {
"kernel": "6.12.107+deb13-cloud-amd64",
"versions": {
"syq": "syq 0.5.2",
"syq-ssh": "syq 0.5.2",
"rsync": "rsync version 3.4.1 protocol version 32"
},
"allowed_cpus": 4,
"governors": [
"unavailable"
],
"cpu_model": "AMD EPYC-Milan Processor"
},
"path_filesystems": {
"source": "tmpfs",
"destination": "tmpfs"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture.",
"remote_identity_basis": "Independent deployment and final hashes of the explicit --rsync-path helper, checked on both endpoints; the stock PATH probe did not identify that helper.",
"transport_evidence": "Per-copy destination-port byte counters checked for every large-file and large-files repetition; small-file and update paths are not inferred from those controls."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"remote end: fixture pages evicted on the client only",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"Per-copy OUTPUT packet/byte counters distinguish benchmark TCP ports from SSH; headers/control packets included; same rules for all tools.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "public-wan-reverse",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "benchmark-peer:/path/to/empty-destination-scratch",
"ssh": "/usr/bin/ssh"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--rsync-path",
"/path/to/syq"
],
"debug": false
},
{
"name": "syq-ssh",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--rsync-path",
"/path/to/syq",
"--syq-no-tcp"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "large-file",
"kind": "large-file",
"bytes": 1073741824,
"files": 1
},
{
"name": "large-files",
"kind": "small-files",
"bytes": 1073741824,
"files": 16
},
{
"name": "small-files",
"kind": "small-files",
"bytes": 20971520,
"files": 5000
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "warm",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 300,
"slow_cutoff": 0
}
}
}Copying a file or folder on one drive
Make another copy on the same SSD.
A rented Hetzner server, using the ext4 filesystem.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. One Hetzner Server Auction allocation: Ryzen 9 5950X, 32 logical CPUs, 128 GiB RAM, two dedicated 3.84 TB Samsung PM9A3 NVMe drives; Linux 6.12.67, powersave governor. Source fixture pages evicted, metadata warm; device caches and drive history uncontrolled. The 32-worker control also disables automatic tuning and the automatic sequential NFS fallback, so it is not an isolated worker-count comparison. Source and destination share one ext4 filesystem on one NVMe drive, mounted noatime.
One large file
1 file ยท 17.18 GB total ยท copying to an empty folder
syq and cp have speeds within 5% of each other.
syq can copy several parts of one file at once. That doesnโt always help as much as copying several separate files.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 14.9 s | โ | 0 | True | evict | Local copy |
| syq | 1 | 14.8 s | โ | 0 | True | evict | Local copy |
| syq | 2 | 14.8 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 0 | 15.2 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 1 | 14.8 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 2 | 15.5 s | โ | 0 | True | evict | Local copy |
| rsync | 0 | 23.8 s | โ | 0 | True | evict | โ |
| rsync | 1 | 23.6 s | โ | 0 | True | evict | โ |
| rsync | 2 | 23.9 s | โ | 0 | True | evict | โ |
| cp | 0 | 15.1 s | โ | 0 | True | evict | โ |
| cp | 1 | 14.7 s | โ | 0 | True | evict | โ |
| cp | 2 | 14.7 s | โ | 0 | True | evict | โ |
A folder with files of different sizes
16,000 files ยท 17.18 GB total ยท copying to an empty folder
syq is 3.88ร faster than cp in this run.
syq uses several workers to copy files in parallel. That can make better use of the available CPU and disk bandwidth.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 4.28 s | โ | 0 | True | evict | Local copy |
| syq | 1 | 4.83 s | โ | 0 | True | evict | Local copy |
| syq | 2 | 4.57 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 0 | 4.17 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 1 | 5.13 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 2 | 5.23 s | โ | 0 | True | evict | Local copy |
| rsync | 0 | 22.9 s | โ | 0 | True | evict | โ |
| rsync | 1 | 22.7 s | โ | 0 | True | evict | โ |
| rsync | 2 | 22.8 s | โ | 0 | True | evict | โ |
| cp | 0 | 17.4 s | โ | 0 | True | evict | โ |
| cp | 1 | 18.0 s | โ | 0 | True | evict | โ |
| cp | 2 | 17.6 s | โ | 0 | True | evict | โ |
Many small files
200,000 files ยท 838.8 MB total ยท copying to an empty folder
syq is 3.55ร faster than rsync in this run.
With small files, creating and checking each file can take more work than copying its contents. syq can do that work for several files at once.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 4.73 s | โ | 0 | True | evict | Local copy |
| syq | 1 | 4.57 s | โ | 0 | True | evict | Local copy |
| syq | 2 | 4.58 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 0 | 4.53 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 1 | 4.58 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 2 | 4.62 s | โ | 0 | True | evict | Local copy |
| rsync | 0 | 16.4 s | โ | 0 | True | evict | โ |
| rsync | 1 | 16.5 s | โ | 0 | True | evict | โ |
| rsync | 2 | 16.5 s | โ | 0 | True | evict | โ |
| cp | 0 | 24.9 s | โ | 0 | True | evict | โ |
| cp | 1 | 25.0 s | โ | 0 | True | evict | โ |
| cp | 2 | 24.9 s | โ | 0 | True | evict | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | Local operation | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false} |
| syq-j32 | syq 0.5.2 | Local operation | {"name": "syq-j32", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--syq-connections", "32"], "debug": false} |
| rsync | rsync version 3.2.7 protocol version 32 | Local operation | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
| cp | cp (GNU coreutils) 9.1 | Local operation | {"name": "cp", "kind": "cp", "binary": "/usr/bin/cp", "args": ["-a"], "debug": false} |
{
"started": "2026-09-08T23:24:38+00:00",
"seed": 204330278,
"host": {
"kernel": "6.12.67",
"machine": "x86_64",
"cpus": 32,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "ext2/ext3",
"destination": "ext2/ext3"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/public-ext4-same.toml",
"environment": {
"kernel": "6.12.67",
"versions": {
"syq": "syq 0.5.2",
"syq-j32": "syq 0.5.2",
"rsync": "rsync version 3.2.7 protocol version 32",
"cp": "cp (GNU coreutils) 9.1"
},
"allowed_cpus": 32,
"governors": [
"powersave"
],
"cpu_model": "AMD Ryzen 9 5950X 16-Core Processor"
},
"path_filesystems": {
"source": "ext4",
"destination": "ext4"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "public-ext4-same",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "/path/to/empty-destination-scratch"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap"
],
"debug": false
},
{
"name": "syq-j32",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--syq-connections",
"32"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
},
{
"name": "cp",
"kind": "cp",
"binary": "/usr/bin/cp",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "large-file",
"kind": "large-file",
"bytes": 17179869184,
"files": 1
},
{
"name": "mixed-tree",
"kind": "mixed-tree",
"bytes": 17179869184,
"files": 16000
},
{
"name": "small-files",
"kind": "small-files",
"bytes": 838860800,
"files": 200000
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "evict",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 120,
"slow_cutoff": 0
}
}
}Copying between two drives
Copy files from one SSD to another in the same server.
The same Hetzner server, with a separate ext4 filesystem on each drive.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. One Hetzner Server Auction allocation: Ryzen 9 5950X, 32 logical CPUs, 128 GiB RAM, two dedicated 3.84 TB Samsung PM9A3 NVMe drives; Linux 6.12.67, powersave governor. Source fixture pages evicted, metadata warm; device caches and drive history uncontrolled. The 32-worker control also disables automatic tuning and the automatic sequential NFS fallback, so it is not an isolated worker-count comparison. Source and destination use separate ext4 filesystems and separate drives, mounted noatime.
One large file
1 file ยท 17.18 GB total ยท copying to an empty folder
syq is 1.20ร faster than cp in this run.
syq can copy several parts of one file at once. That doesnโt always help as much as copying several separate files.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 12.8 s | โ | 0 | True | evict | Local copy |
| syq | 1 | 12.8 s | โ | 0 | True | evict | Local copy |
| syq | 2 | 12.9 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 0 | 12.8 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 1 | 12.7 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 2 | 12.7 s | โ | 0 | True | evict | Local copy |
| rsync | 0 | 23.5 s | โ | 0 | True | evict | โ |
| rsync | 1 | 23.2 s | โ | 0 | True | evict | โ |
| rsync | 2 | 23.2 s | โ | 0 | True | evict | โ |
| cp | 0 | 15.3 s | โ | 0 | True | evict | โ |
| cp | 1 | 15.2 s | โ | 0 | True | evict | โ |
| cp | 2 | 15.6 s | โ | 0 | True | evict | โ |
A folder with files of different sizes
16,000 files ยท 17.18 GB total ยท copying to an empty folder
syq is 4.66ร faster than cp in this run.
syq uses several workers to copy files in parallel. That can make better use of the available CPU and disk bandwidth.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 4.06 s | โ | 0 | True | evict | Local copy |
| syq | 1 | 3.72 s | โ | 0 | True | evict | Local copy |
| syq | 2 | 3.76 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 0 | 3.80 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 1 | 3.76 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 2 | 3.71 s | โ | 0 | True | evict | Local copy |
| rsync | 0 | 21.2 s | โ | 0 | True | evict | โ |
| rsync | 1 | 21.1 s | โ | 0 | True | evict | โ |
| rsync | 2 | 21.2 s | โ | 0 | True | evict | โ |
| cp | 0 | 17.8 s | โ | 0 | True | evict | โ |
| cp | 1 | 17.9 s | โ | 0 | True | evict | โ |
| cp | 2 | 18.1 s | โ | 0 | True | evict | โ |
Many small files
200,000 files ยท 838.8 MB total ยท copying to an empty folder
syq is 3.53ร faster than rsync in this run.
With small files, creating and checking each file can take more work than copying its contents. syq can do that work for several files at once.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 4.73 s | โ | 0 | True | evict | Local copy |
| syq | 1 | 4.64 s | โ | 0 | True | evict | Local copy |
| syq | 2 | 4.58 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 0 | 4.63 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 1 | 4.58 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 2 | 4.58 s | โ | 0 | True | evict | Local copy |
| rsync | 0 | 16.4 s | โ | 0 | True | evict | โ |
| rsync | 1 | 16.4 s | โ | 0 | True | evict | โ |
| rsync | 2 | 16.5 s | โ | 0 | True | evict | โ |
| cp | 0 | 28.2 s | โ | 0 | True | evict | โ |
| cp | 1 | 28.3 s | โ | 0 | True | evict | โ |
| cp | 2 | 28.3 s | โ | 0 | True | evict | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | Local operation | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false} |
| syq-j32 | syq 0.5.2 | Local operation | {"name": "syq-j32", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--syq-connections", "32"], "debug": false} |
| rsync | rsync version 3.2.7 protocol version 32 | Local operation | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
| cp | cp (GNU coreutils) 9.1 | Local operation | {"name": "cp", "kind": "cp", "binary": "/usr/bin/cp", "args": ["-a"], "debug": false} |
{
"started": "2026-09-09T00:00:39+00:00",
"seed": 204330278,
"host": {
"kernel": "6.12.67",
"machine": "x86_64",
"cpus": 32,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "ext2/ext3",
"destination": "ext2/ext3"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/public-ext4-cross.toml",
"environment": {
"kernel": "6.12.67",
"versions": {
"syq": "syq 0.5.2",
"syq-j32": "syq 0.5.2",
"rsync": "rsync version 3.2.7 protocol version 32",
"cp": "cp (GNU coreutils) 9.1"
},
"allowed_cpus": 32,
"governors": [
"powersave"
],
"cpu_model": "AMD Ryzen 9 5950X 16-Core Processor"
},
"path_filesystems": {
"source": "ext4",
"destination": "ext4"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "public-ext4-cross",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "/path/to/empty-destination-scratch"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap"
],
"debug": false
},
{
"name": "syq-j32",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--syq-connections",
"32"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
},
{
"name": "cp",
"kind": "cp",
"binary": "/usr/bin/cp",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "large-file",
"kind": "large-file",
"bytes": 17179869184,
"files": 1
},
{
"name": "mixed-tree",
"kind": "mixed-tree",
"bytes": 17179869184,
"files": 16000
},
{
"name": "small-files",
"kind": "small-files",
"bytes": 838860800,
"files": 200000
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "evict",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 120,
"slow_cutoff": 0
}
}
}Copying between nearby servers
Send files between two servers in the same data center.
Files stay in memory, so this tests the connection rather than disk writes.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. Two Hetzner Cloud CCX23 guests, each with 4 dedicated vCPUs and 16 GiB RAM, Debian 13. Warm tmpfs at both endpoints. Default syq uses SSH-authenticated encrypted TCP; the SSH control disables TCP; rsync uses SSH. Packet counters independently checked large-file data paths. Small-file data paths were not recorded per repetition. Both directions share allocations and are separate comparisons, not independent replications.
One large file
1 file ยท 4.29 GB total ยท copying to an empty folder
syq is 1.60ร faster than rsync in this run.
syq transfers different parts of the same file in parallel, including over SSH. Its default mode adds another speedup by sending the data over separate encrypted TCP connections, using SSH only to log in.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 5.98 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 1 | 5.75 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 2 | 5.64 s | โ | 0 | True | warm | TCP ยท observed |
| syq-ssh | 0 | 6.29 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 1 | 6.40 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 2 | 6.30 s | โ | 0 | True | warm | SSH ยท observed |
| rsync | 0 | 9.54 s | โ | 0 | True | warm | โ |
| rsync | 1 | 9.08 s | โ | 0 | True | warm | โ |
| rsync | 2 | 9.19 s | โ | 0 | True | warm | โ |
A folder of large files
64 files ยท 4.29 GB total ยท copying to an empty folder
syq is 1.91ร faster than rsync in this run.
syq copies several files at once and can split each file across several encrypted TCP connections. It uses SSH to log in, but the file data can bypass SSH.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 4.84 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 1 | 4.73 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 2 | 4.84 s | โ | 0 | True | warm | TCP ยท observed |
| syq-ssh | 0 | 5.05 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 1 | 5.50 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 2 | 5.64 s | โ | 0 | True | warm | SSH ยท observed |
| rsync | 0 | 9.29 s | โ | 0 | True | warm | โ |
| rsync | 1 | 9.04 s | โ | 0 | True | warm | โ |
| rsync | 2 | 9.24 s | โ | 0 | True | warm | โ |
Many small files
100,000 files ยท 419.4 MB total ยท copying to an empty folder
rsync is 1.30ร faster than syq in this run.
rsync finishes sooner here. Sending lots of small files involves work for each file, even though syq groups them together for transfer. Weโre still investigating the gap.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 4.24 s | โ | 0 | True | warm | Unrecorded |
| syq | 1 | 4.35 s | โ | 0 | True | warm | Unrecorded |
| syq | 2 | 4.23 s | โ | 0 | True | warm | Unrecorded |
| syq-ssh | 0 | 3.98 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 1 | 3.93 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 2 | 3.88 s | โ | 0 | True | warm | SSH ยท requested |
| rsync | 0 | 3.17 s | โ | 0 | True | warm | โ |
| rsync | 1 | 3.17 s | โ | 0 | True | warm | โ |
| rsync | 2 | 3.52 s | โ | 0 | True | warm | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | syq 0.5.2 / da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--rsync-path", "/path/to/syq"], "debug": false} |
| syq-ssh | syq 0.5.2 | syq 0.5.2 / da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef | {"name": "syq-ssh", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--rsync-path", "/path/to/syq", "--syq-no-tcp"], "debug": false} |
| rsync | rsync version 3.4.1 protocol version 32 | rsync version 3.4.1 protocol version 32 / a56c05b960beb734169619d5760b43ff495e84f85a93eb1f54fe58118262fb20 | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
{
"started": "2026-09-08T23:40:16+00:00",
"seed": 204330278,
"host": {
"kernel": "6.12.107+deb13-cloud-amd64",
"machine": "x86_64",
"cpus": 4,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "tmpfs",
"destination": "tmpfs"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/public-lan-forward.toml",
"environment": {
"kernel": "6.12.107+deb13-cloud-amd64",
"versions": {
"syq": "syq 0.5.2",
"syq-ssh": "syq 0.5.2",
"rsync": "rsync version 3.4.1 protocol version 32"
},
"allowed_cpus": 4,
"governors": [
"unavailable"
],
"cpu_model": "AMD EPYC-Milan Processor"
},
"path_filesystems": {
"source": "tmpfs",
"destination": "tmpfs"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture.",
"remote_identity_basis": "Independent deployment and final hashes of the explicit --rsync-path helper, checked on both endpoints; the stock PATH probe did not identify that helper.",
"transport_evidence": "Per-copy destination-port byte counters checked for every large-file and large-files repetition; small-file and update paths are not inferred from those controls."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"remote end: fixture pages evicted on the client only",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"Per-copy OUTPUT packet/byte counters distinguish benchmark TCP ports from SSH; headers/control packets included; same rules for all tools.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "public-lan-forward",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "benchmark-peer:/path/to/empty-destination-scratch",
"ssh": "/usr/bin/ssh"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--rsync-path",
"/path/to/syq"
],
"debug": false
},
{
"name": "syq-ssh",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--rsync-path",
"/path/to/syq",
"--syq-no-tcp"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "large-file",
"kind": "large-file",
"bytes": 4294967296,
"files": 1
},
{
"name": "large-files",
"kind": "small-files",
"bytes": 4294967296,
"files": 64
},
{
"name": "small-files",
"kind": "small-files",
"bytes": 419430400,
"files": 100000
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "warm",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 120,
"slow_cutoff": 0
}
}
}Copying back between nearby servers
Send the same files back the other way.
The same two servers, with files again kept in memory.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. Two Hetzner Cloud CCX23 guests, each with 4 dedicated vCPUs and 16 GiB RAM, Debian 13. Warm tmpfs at both endpoints. Default syq uses SSH-authenticated encrypted TCP; the SSH control disables TCP; rsync uses SSH. Packet counters independently checked large-file data paths. Small-file data paths were not recorded per repetition. Both directions share allocations and are separate comparisons, not independent replications.
One large file
1 file ยท 4.29 GB total ยท copying to an empty folder
syq is 1.79ร faster than rsync in this run.
syq transfers different parts of the same file in parallel, including over SSH. Its default mode adds another speedup by sending the data over separate encrypted TCP connections, using SSH only to log in.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 5.24 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 1 | 5.33 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 2 | 5.24 s | โ | 0 | True | warm | TCP ยท observed |
| syq-ssh | 0 | 5.94 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 1 | 5.90 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 2 | 5.90 s | โ | 0 | True | warm | SSH ยท observed |
| rsync | 0 | 9.64 s | โ | 0 | True | warm | โ |
| rsync | 1 | 8.99 s | โ | 0 | True | warm | โ |
| rsync | 2 | 9.69 s | โ | 0 | True | warm | โ |
A folder of large files
64 files ยท 4.29 GB total ยท copying to an empty folder
syq is 2.24ร faster than rsync in this run.
syq copies several files at once and can split each file across several encrypted TCP connections. It uses SSH to log in, but the file data can bypass SSH.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 4.34 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 1 | 4.43 s | โ | 0 | True | warm | TCP ยท observed |
| syq | 2 | 4.33 s | โ | 0 | True | warm | TCP ยท observed |
| syq-ssh | 0 | 5.15 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 1 | 5.20 s | โ | 0 | True | warm | SSH ยท observed |
| syq-ssh | 2 | 5.15 s | โ | 0 | True | warm | SSH ยท observed |
| rsync | 0 | 9.84 s | โ | 0 | True | warm | โ |
| rsync | 1 | 9.79 s | โ | 0 | True | warm | โ |
| rsync | 2 | 9.69 s | โ | 0 | True | warm | โ |
Many small files
100,000 files ยท 419.4 MB total ยท copying to an empty folder
rsync is 1.32ร faster than syq in this run.
rsync finishes sooner here. Sending lots of small files involves work for each file, even though syq groups them together for transfer. Weโre still investigating the gap.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 4.69 s | โ | 0 | True | warm | Unrecorded |
| syq | 1 | 4.68 s | โ | 0 | True | warm | Unrecorded |
| syq | 2 | 4.48 s | โ | 0 | True | warm | Unrecorded |
| syq-ssh | 0 | 4.08 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 1 | 4.03 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 2 | 4.09 s | โ | 0 | True | warm | SSH ยท requested |
| rsync | 0 | 3.27 s | โ | 0 | True | warm | โ |
| rsync | 1 | 3.72 s | โ | 0 | True | warm | โ |
| rsync | 2 | 3.52 s | โ | 0 | True | warm | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | syq 0.5.2 / da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--rsync-path", "/path/to/syq"], "debug": false} |
| syq-ssh | syq 0.5.2 | syq 0.5.2 / da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef | {"name": "syq-ssh", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--rsync-path", "/path/to/syq", "--syq-no-tcp"], "debug": false} |
| rsync | rsync version 3.4.1 protocol version 32 | rsync version 3.4.1 protocol version 32 / a56c05b960beb734169619d5760b43ff495e84f85a93eb1f54fe58118262fb20 | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
{
"started": "2026-09-08T23:45:47+00:00",
"seed": 204330278,
"host": {
"kernel": "6.12.107+deb13-cloud-amd64",
"machine": "x86_64",
"cpus": 4,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "tmpfs",
"destination": "tmpfs"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/public-lan-reverse.toml",
"environment": {
"kernel": "6.12.107+deb13-cloud-amd64",
"versions": {
"syq": "syq 0.5.2",
"syq-ssh": "syq 0.5.2",
"rsync": "rsync version 3.4.1 protocol version 32"
},
"allowed_cpus": 4,
"governors": [
"unavailable"
],
"cpu_model": "AMD EPYC-Milan Processor"
},
"path_filesystems": {
"source": "tmpfs",
"destination": "tmpfs"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture.",
"remote_identity_basis": "Independent deployment and final hashes of the explicit --rsync-path helper, checked on both endpoints; the stock PATH probe did not identify that helper.",
"transport_evidence": "Per-copy destination-port byte counters checked for every large-file and large-files repetition; small-file and update paths are not inferred from those controls."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"remote end: fixture pages evicted on the client only",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"Per-copy OUTPUT packet/byte counters distinguish benchmark TCP ports from SSH; headers/control packets included; same rules for all tools.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "public-lan-reverse",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "benchmark-peer:/path/to/empty-destination-scratch",
"ssh": "/usr/bin/ssh"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--rsync-path",
"/path/to/syq"
],
"debug": false
},
{
"name": "syq-ssh",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--rsync-path",
"/path/to/syq",
"--syq-no-tcp"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "large-file",
"kind": "large-file",
"bytes": 4294967296,
"files": 1
},
{
"name": "large-files",
"kind": "small-files",
"bytes": 4294967296,
"files": 64
},
{
"name": "small-files",
"kind": "small-files",
"bytes": 419430400,
"files": 100000
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "warm",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 120,
"slow_cutoff": 0
}
}
}Updating a distant copy
Both servers already have the files. Change the originals, then bring the other copy up to date.
Germany โ US East Coast. Both servers hold the files in memory.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. Two Hetzner Cloud CCX23 guests, each with 4 dedicated vCPUs and 16 GiB RAM, Debian 13. Warm tmpfs at both endpoints. Default syq uses SSH-authenticated encrypted TCP; the SSH control disables TCP; rsync uses SSH. Packet counters independently checked large-file data paths. Small-file data paths were not recorded per repetition. Both directions share allocations and are separate comparisons, not independent replications. Germany โ US East Coast. Each repetition restores the same pre-change destination. Scattered edits affect about 1% of 4 KiB regions in every file.
Small edits throughout the files
8 files ยท 2.15 GB total ยท updating an existing copy after small edits throughout the files
rsync is 1.22ร faster than syq in this run.
rsync can reuse smaller pieces of the old files. When edits are spread throughout a file, that can leave it with less data to send.
Updates can reuse existing data. This speed uses the size of the whole folder, not the bytes sent over the network.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 9.76 s | โ | 0 | True | warm | Unrecorded |
| syq | 1 | 9.00 s | โ | 0 | True | warm | Unrecorded |
| syq | 2 | 10.1 s | โ | 0 | True | warm | Unrecorded |
| syq-ssh | 0 | 19.7 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 1 | 19.6 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 2 | 19.8 s | โ | 0 | True | warm | SSH ยท requested |
| rsync | 0 | 7.89 s | โ | 0 | True | warm | โ |
| rsync | 1 | 7.89 s | โ | 0 | True | warm | โ |
| rsync | 2 | 7.89 s | โ | 0 | True | warm | โ |
All the contents have changed
8 files ยท 2.15 GB total ยท updating an existing copy after replacing all the contents
syq is 13.15ร faster than rsync in this run.
Both tools need to send all the new contents. syq can send different parts at the same time.
Updates can reuse existing data. This speed uses the size of the whole folder, not the bytes sent over the network.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 8.91 s | โ | 0 | True | warm | Unrecorded |
| syq | 1 | 8.81 s | โ | 0 | True | warm | Unrecorded |
| syq | 2 | 8.76 s | โ | 0 | True | warm | Unrecorded |
| syq-ssh | 0 | 25.0 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 1 | 19.7 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 2 | 19.7 s | โ | 0 | True | warm | SSH ยท requested |
| rsync | 0 | 115.8 s | โ | 0 | True | warm | โ |
| rsync | 1 | 116.7 s | โ | 0 | True | warm | โ |
| rsync | 2 | 115.6 s | โ | 0 | True | warm | โ |
Adding data to the ends of files
8 files ยท 2.15 GB total ยท updating an existing copy after adding data at the ends
syq is 1.34ร faster than rsync in this run.
Most of each file is unchanged. The job is to copy the new data added at the end.
Updates can reuse existing data. This speed uses the size of the whole folder, not the bytes sent over the network.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 4.49 s | โ | 0 | True | warm | Unrecorded |
| syq | 1 | 4.43 s | โ | 0 | True | warm | Unrecorded |
| syq | 2 | 4.48 s | โ | 0 | True | warm | Unrecorded |
| syq-ssh | 0 | 5.73 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 1 | 5.54 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 2 | 5.58 s | โ | 0 | True | warm | SSH ยท requested |
| rsync | 0 | 6.03 s | โ | 0 | True | warm | โ |
| rsync | 1 | 5.98 s | โ | 0 | True | warm | โ |
| rsync | 2 | 5.98 s | โ | 0 | True | warm | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | syq 0.5.2 / da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--rsync-path", "/path/to/syq"], "debug": false} |
| syq-ssh | syq 0.5.2 | syq 0.5.2 / da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef | {"name": "syq-ssh", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--rsync-path", "/path/to/syq", "--syq-no-tcp"], "debug": false} |
| rsync | rsync version 3.4.1 protocol version 32 | rsync version 3.4.1 protocol version 32 / a56c05b960beb734169619d5760b43ff495e84f85a93eb1f54fe58118262fb20 | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
{
"started": "2026-09-09T00:28:11+00:00",
"seed": 204330278,
"host": {
"kernel": "6.12.107+deb13-cloud-amd64",
"machine": "x86_64",
"cpus": 4,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "tmpfs",
"destination": "tmpfs"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/public-wan-updates.toml",
"environment": {
"kernel": "6.12.107+deb13-cloud-amd64",
"versions": {
"syq": "syq 0.5.2",
"syq-ssh": "syq 0.5.2",
"rsync": "rsync version 3.4.1 protocol version 32"
},
"allowed_cpus": 4,
"governors": [
"unavailable"
],
"cpu_model": "AMD EPYC-Milan Processor"
},
"path_filesystems": {
"source": "tmpfs",
"destination": "tmpfs"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture.",
"remote_identity_basis": "Independent deployment and final hashes of the explicit --rsync-path helper, checked on both endpoints; the stock PATH probe did not identify that helper."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"remote end: fixture pages evicted on the client only",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"Per-copy OUTPUT packet/byte counters distinguish benchmark TCP ports from SSH; headers/control packets included; same rules for all tools.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "public-wan-updates",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "benchmark-peer:/path/to/empty-destination-scratch",
"ssh": "/usr/bin/ssh"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--rsync-path",
"/path/to/syq"
],
"debug": false
},
{
"name": "syq-ssh",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--rsync-path",
"/path/to/syq",
"--syq-no-tcp"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "unchanged",
"kind": "small-files",
"bytes": 2147483648,
"files": 8,
"changed": 0.0,
"mutate": "rewrite"
},
{
"name": "block-edits",
"kind": "small-files",
"bytes": 2147483648,
"files": 8,
"changed": 1.0,
"mutate": "blocks"
},
{
"name": "full-rewrite",
"kind": "small-files",
"bytes": 2147483648,
"files": 8,
"changed": 1.0,
"mutate": "rewrite"
},
{
"name": "append",
"kind": "small-files",
"bytes": 2147483648,
"files": 8,
"changed": 1.0,
"mutate": "append"
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "warm",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 300,
"slow_cutoff": 0
}
}
}Checking a folder that hasnโt changed
Both servers already have identical files. Check whether anything needs copying.
Germany โ US East Coast, with a large folder of small files kept in memory.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. Two Hetzner Cloud CCX23 guests, each with 4 dedicated vCPUs and 16 GiB RAM, Debian 13. Warm tmpfs at both endpoints. Default syq uses SSH-authenticated encrypted TCP; the SSH control disables TCP; rsync uses SSH. Packet counters independently checked large-file data paths. Small-file data paths were not recorded per repetition. Both directions share allocations and are separate comparisons, not independent replications. Germany โ US East Coast. The destination already contains an identical copy.
An unchanged folder
100,000 files ยท identical copies at both ends ยท no file contents transferred
syq is 1.92ร faster than rsync in this run.
Nothing needs transferring. This measures how quickly each tool checks a large folder and finds that the files already match.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 6.13 s | โ | 0 | True | warm | Unrecorded |
| syq | 1 | 6.28 s | โ | 0 | True | warm | Unrecorded |
| syq | 2 | 6.43 s | โ | 0 | True | warm | Unrecorded |
| syq-ssh | 0 | 6.39 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 1 | 6.33 s | โ | 0 | True | warm | SSH ยท requested |
| syq-ssh | 2 | 6.18 s | โ | 0 | True | warm | SSH ยท requested |
| rsync | 0 | 12.2 s | โ | 0 | True | warm | โ |
| rsync | 1 | 12.1 s | โ | 0 | True | warm | โ |
| rsync | 2 | 12.0 s | โ | 0 | True | warm | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | syq 0.5.2 / da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--rsync-path", "/path/to/syq"], "debug": false} |
| syq-ssh | syq 0.5.2 | syq 0.5.2 / da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef | {"name": "syq-ssh", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--rsync-path", "/path/to/syq", "--syq-no-tcp"], "debug": false} |
| rsync | rsync version 3.4.1 protocol version 32 | rsync version 3.4.1 protocol version 32 / a56c05b960beb734169619d5760b43ff495e84f85a93eb1f54fe58118262fb20 | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
{
"started": "2026-09-09T01:56:22+00:00",
"seed": 204330278,
"host": {
"kernel": "6.12.107+deb13-cloud-amd64",
"machine": "x86_64",
"cpus": 4,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "tmpfs",
"destination": "tmpfs"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/public-wan-unchanged-tree.toml",
"environment": {
"kernel": "6.12.107+deb13-cloud-amd64",
"versions": {
"syq": "syq 0.5.2",
"syq-ssh": "syq 0.5.2",
"rsync": "rsync version 3.4.1 protocol version 32"
},
"allowed_cpus": 4,
"governors": [
"unavailable"
],
"cpu_model": "AMD EPYC-Milan Processor"
},
"path_filesystems": {
"source": "tmpfs",
"destination": "tmpfs"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture.",
"remote_identity_basis": "Independent deployment and final hashes of the explicit --rsync-path helper, checked on both endpoints; the stock PATH probe did not identify that helper."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"remote end: fixture pages evicted on the client only",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"Per-copy OUTPUT packet/byte counters distinguish benchmark TCP ports from SSH; headers/control packets included; same rules for all tools.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "public-wan-unchanged-tree",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "benchmark-peer:/path/to/empty-destination-scratch",
"ssh": "/usr/bin/ssh"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--rsync-path",
"/path/to/syq"
],
"debug": false
},
{
"name": "syq-ssh",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--rsync-path",
"/path/to/syq",
"--syq-no-tcp"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "unchanged-tree",
"kind": "small-files",
"bytes": 419430400,
"files": 100000,
"changed": 0.0,
"mutate": "rewrite"
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "warm",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 300,
"slow_cutoff": 0
}
}
}Many small files on XFS
Make another copy of a folder containing many small files.
The same Hetzner server, this time using the XFS filesystem.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. One Hetzner Server Auction allocation: Ryzen 9 5950X, 32 logical CPUs, 128 GiB RAM, two dedicated 3.84 TB Samsung PM9A3 NVMe drives; Linux 6.12.67, powersave governor. Source fixture pages evicted, metadata warm; device caches and drive history uncontrolled. The 32-worker control also disables automatic tuning and the automatic sequential NFS fallback, so it is not an isolated worker-count comparison. Source and destination share one XFS filesystem, mounted noatime with reflink enabled. One-file and mixed-tree copies were too short for charts. Extent sharing can avoid copying payload bytes, so scaling bytes alone would not establish physical bandwidth.
Many small files
200,000 files ยท 838.8 MB total ยท copying to an empty folder
syq is 1.84ร faster than cp in this run.
With small files, creating and checking each file can take more work than copying its contents. syq can do that work for several files at once.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 4.52 s | โ | 0 | True | evict | Local copy |
| syq | 1 | 5.03 s | โ | 0 | True | evict | Local copy |
| syq | 2 | 4.87 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 0 | 4.48 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 1 | 4.99 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 2 | 4.54 s | โ | 0 | True | evict | Local copy |
| rsync | 0 | 16.7 s | โ | 0 | True | evict | โ |
| rsync | 1 | 16.6 s | โ | 0 | True | evict | โ |
| rsync | 2 | 16.6 s | โ | 0 | True | evict | โ |
| cp | 0 | 8.93 s | โ | 0 | True | evict | โ |
| cp | 1 | 8.73 s | โ | 0 | True | evict | โ |
| cp | 2 | 8.83 s | โ | 0 | True | evict | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | Local operation | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false} |
| syq-j32 | syq 0.5.2 | Local operation | {"name": "syq-j32", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--syq-connections", "32"], "debug": false} |
| rsync | rsync version 3.2.7 protocol version 32 | Local operation | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
| cp | cp (GNU coreutils) 9.1 | Local operation | {"name": "cp", "kind": "cp", "binary": "/usr/bin/cp", "args": ["-a"], "debug": false} |
{
"started": "2026-09-09T00:35:59+00:00",
"seed": 204330278,
"host": {
"kernel": "6.12.67",
"machine": "x86_64",
"cpus": 32,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "xfs",
"destination": "xfs"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/public-xfs-same.toml",
"environment": {
"kernel": "6.12.67",
"versions": {
"syq": "syq 0.5.2",
"syq-j32": "syq 0.5.2",
"rsync": "rsync version 3.2.7 protocol version 32",
"cp": "cp (GNU coreutils) 9.1"
},
"allowed_cpus": 32,
"governors": [
"powersave"
],
"cpu_model": "AMD Ryzen 9 5950X 16-Core Processor"
},
"path_filesystems": {
"source": "xfs",
"destination": "xfs"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "public-xfs-same",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "/path/to/empty-destination-scratch"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap"
],
"debug": false
},
{
"name": "syq-j32",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--syq-connections",
"32"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
},
{
"name": "cp",
"kind": "cp",
"binary": "/usr/bin/cp",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "large-file",
"kind": "large-file",
"bytes": 17179869184,
"files": 1
},
{
"name": "mixed-tree",
"kind": "mixed-tree",
"bytes": 17179869184,
"files": 16000
},
{
"name": "small-files",
"kind": "small-files",
"bytes": 838860800,
"files": 200000
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "evict",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 120,
"slow_cutoff": 0
}
}
}Copying on an ext4 system drive
Make another copy on the serverโs system drive.
Local storage using ext4; no files are sent to another server.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. A server with two Xeon Platinum 8460Y+ CPUs, 160 logical CPUs and the performance governor; Linux 5.15.0-126-generic. Its ext4 system volume, XFS data volume and NFS mount are distinct placements. Shared-host activity was observed but not eliminated. Source fixture pages evicted, metadata warm; device caches and drive history uncontrolled. The 32-worker control also disables automatic tuning and the automatic sequential NFS fallback, so it is not an isolated worker-count comparison.
One large file
1 file ยท 8.59 GB total ยท copying to an empty folder
cp is 1.11ร faster than syq in this run.
syq can copy several parts of one file at once. That doesnโt always help as much as copying several separate files.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 8.43 s | โ | 0 | True | evict | Local copy |
| syq | 1 | 11.4 s | โ | 0 | True | evict | Local copy |
| syq | 2 | 8.43 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 0 | 8.43 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 1 | 8.48 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 2 | 12.4 s | โ | 0 | True | evict | Local copy |
| rsync | 0 | 13.4 s | โ | 0 | True | evict | โ |
| rsync | 1 | 17.1 s | โ | 0 | True | evict | โ |
| rsync | 2 | 13.6 s | โ | 0 | True | evict | โ |
| cp | 0 | 8.43 s | โ | 0 | True | evict | โ |
| cp | 1 | 8.48 s | โ | 0 | True | evict | โ |
| cp | 2 | 8.48 s | โ | 0 | True | evict | โ |
Many small files
200,000 files ยท 838.8 MB total ยท copying to an empty folder
syq is 8.49ร faster than rsync in this run.
With small files, creating and checking each file can take more work than copying its contents. syq can do that work for several files at once.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 4.67 s | โ | 0 | True | evict | Local copy |
| syq | 1 | 4.47 s | โ | 0 | True | evict | Local copy |
| syq | 2 | 4.57 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 0 | 4.47 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 1 | 4.52 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 2 | 4.62 s | โ | 0 | True | evict | Local copy |
| rsync | 0 | 38.8 s | โ | 0 | True | evict | โ |
| rsync | 1 | 38.8 s | โ | 0 | True | evict | โ |
| rsync | 2 | 38.7 s | โ | 0 | True | evict | โ |
| cp | 0 | 43.8 s | โ | 0 | True | evict | โ |
| cp | 1 | 43.5 s | โ | 0 | True | evict | โ |
| cp | 2 | 43.4 s | โ | 0 | True | evict | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | Local operation | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false} |
| syq-j32 | syq 0.5.2 | Local operation | {"name": "syq-j32", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--syq-connections", "32"], "debug": false} |
| rsync | rsync version 3.2.7 protocol version 31 | Local operation | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
| cp | cp (GNU coreutils) 8.32 | Local operation | {"name": "cp", "kind": "cp", "binary": "/usr/bin/cp", "args": ["-a"], "debug": false} |
{
"started": "2026-09-09T00:50:06+00:00",
"seed": 204330278,
"host": {
"kernel": "5.15.0-126-generic",
"machine": "x86_64",
"cpus": 160,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "ext2/ext3",
"destination": "ext2/ext3"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/private-ext4-same.toml",
"environment": {
"kernel": "5.15.0-126-generic",
"versions": {
"syq": "syq 0.5.2",
"syq-j32": "syq 0.5.2",
"rsync": "rsync version 3.2.7 protocol version 31",
"cp": "cp (GNU coreutils) 8.32"
},
"allowed_cpus": 160,
"governors": [
"performance"
],
"cpu_model": "Intel(R) Xeon(R) Platinum 8460Y+"
},
"path_filesystems": {
"source": "ext4",
"destination": "ext4"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "private-ext4-same",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "/path/to/empty-destination-scratch"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap"
],
"debug": false
},
{
"name": "syq-j32",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--syq-connections",
"32"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
},
{
"name": "cp",
"kind": "cp",
"binary": "/usr/bin/cp",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "large-file",
"kind": "large-file",
"bytes": 8589934592,
"files": 1
},
{
"name": "mixed-tree",
"kind": "mixed-tree",
"bytes": 8589934592,
"files": 8000
},
{
"name": "small-files",
"kind": "small-files",
"bytes": 838860800,
"files": 200000
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "evict",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 120,
"slow_cutoff": 0
}
}
}Copying from ext4 to XFS
Copy from the serverโs system drive to its data drive.
The source uses ext4 and the destination uses XFS.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. A server with two Xeon Platinum 8460Y+ CPUs, 160 logical CPUs and the performance governor; Linux 5.15.0-126-generic. Its ext4 system volume, XFS data volume and NFS mount are distinct placements. Shared-host activity was observed but not eliminated. Source fixture pages evicted, metadata warm; device caches and drive history uncontrolled. The 32-worker control also disables automatic tuning and the automatic sequential NFS fallback, so it is not an isolated worker-count comparison.
One large file
1 file ยท 8.59 GB total ยท copying to an empty folder
syq is 1.84ร faster than cp in this run.
syq can copy several parts of one file at once. That doesnโt always help as much as copying several separate files.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 4.37 s | โ | 0 | True | evict | Local copy |
| syq | 1 | 4.37 s | โ | 0 | True | evict | Local copy |
| syq | 2 | 4.37 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 0 | 4.22 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 1 | 4.17 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 2 | 4.32 s | โ | 0 | True | evict | Local copy |
| rsync | 0 | 12.3 s | โ | 0 | True | evict | โ |
| rsync | 1 | 12.3 s | โ | 0 | True | evict | โ |
| rsync | 2 | 12.3 s | โ | 0 | True | evict | โ |
| cp | 0 | 8.03 s | โ | 0 | True | evict | โ |
| cp | 1 | 8.08 s | โ | 0 | True | evict | โ |
| cp | 2 | 8.03 s | โ | 0 | True | evict | โ |
Many small files
200,000 files ยท 838.8 MB total ยท copying to an empty folder
syq is 7.60ร faster than rsync in this run.
With small files, creating and checking each file can take more work than copying its contents. syq can do that work for several files at once.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 5.62 s | โ | 0 | True | evict | Local copy |
| syq | 1 | 4.67 s | โ | 0 | True | evict | Local copy |
| syq | 2 | 4.72 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 0 | 5.57 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 1 | 4.92 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 2 | 5.77 s | โ | 0 | True | evict | Local copy |
| rsync | 0 | 37.9 s | โ | 0 | True | evict | โ |
| rsync | 1 | 38.1 s | โ | 0 | True | evict | โ |
| rsync | 2 | 38.1 s | โ | 0 | True | evict | โ |
| cp | 0 | 42.3 s | โ | 0 | True | evict | โ |
| cp | 1 | 42.3 s | โ | 0 | True | evict | โ |
| cp | 2 | 42.2 s | โ | 0 | True | evict | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | Local operation | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false} |
| syq-j32 | syq 0.5.2 | Local operation | {"name": "syq-j32", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--syq-connections", "32"], "debug": false} |
| rsync | rsync version 3.2.7 protocol version 31 | Local operation | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
| cp | cp (GNU coreutils) 8.32 | Local operation | {"name": "cp", "kind": "cp", "binary": "/usr/bin/cp", "args": ["-a"], "debug": false} |
{
"started": "2026-09-09T01:18:34+00:00",
"seed": 204330278,
"host": {
"kernel": "5.15.0-126-generic",
"machine": "x86_64",
"cpus": 160,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "ext2/ext3",
"destination": "xfs"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/private-ext4-xfs-cross.toml",
"environment": {
"kernel": "5.15.0-126-generic",
"versions": {
"syq": "syq 0.5.2",
"syq-j32": "syq 0.5.2",
"rsync": "rsync version 3.2.7 protocol version 31",
"cp": "cp (GNU coreutils) 8.32"
},
"allowed_cpus": 160,
"governors": [
"performance"
],
"cpu_model": "Intel(R) Xeon(R) Platinum 8460Y+"
},
"path_filesystems": {
"source": "ext4",
"destination": "xfs"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "private-ext4-xfs-cross",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "/path/to/empty-destination-scratch"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap"
],
"debug": false
},
{
"name": "syq-j32",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--syq-connections",
"32"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
},
{
"name": "cp",
"kind": "cp",
"binary": "/usr/bin/cp",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "large-file",
"kind": "large-file",
"bytes": 8589934592,
"files": 1
},
{
"name": "mixed-tree",
"kind": "mixed-tree",
"bytes": 8589934592,
"files": 8000
},
{
"name": "small-files",
"kind": "small-files",
"bytes": 838860800,
"files": 200000
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "evict",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 120,
"slow_cutoff": 0
}
}
}Many small files on an XFS data drive
Make another copy of a folder on the serverโs data drive.
Local XFS storage on the same server.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. A server with two Xeon Platinum 8460Y+ CPUs, 160 logical CPUs and the performance governor; Linux 5.15.0-126-generic. Its ext4 system volume, XFS data volume and NFS mount are distinct placements. Shared-host activity was observed but not eliminated. Source fixture pages evicted, metadata warm; device caches and drive history uncontrolled. The 32-worker control also disables automatic tuning and the automatic sequential NFS fallback, so it is not an isolated worker-count comparison. One-file and mixed-tree copies were too short for charts; extent sharing was confirmed separately.
Many small files
200,000 files ยท 838.8 MB total ยท copying to an empty folder
syq is 5.77ร faster than rsync in this run.
With small files, creating and checking each file can take more work than copying its contents. syq can do that work for several files at once.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 5.62 s | โ | 0 | True | evict | Local copy |
| syq | 1 | 4.62 s | โ | 0 | True | evict | Local copy |
| syq | 2 | 4.57 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 0 | 4.82 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 1 | 5.92 s | โ | 0 | True | evict | Local copy |
| syq-j32 | 2 | 5.57 s | โ | 0 | True | evict | Local copy |
| rsync | 0 | 28.5 s | โ | 0 | True | evict | โ |
| rsync | 1 | 28.5 s | โ | 0 | True | evict | โ |
| rsync | 2 | 28.5 s | โ | 0 | True | evict | โ |
| cp | 0 | 31.7 s | โ | 0 | True | evict | โ |
| cp | 1 | 31.7 s | โ | 0 | True | evict | โ |
| cp | 2 | 31.7 s | โ | 0 | True | evict | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | Local operation | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false} |
| syq-j32 | syq 0.5.2 | Local operation | {"name": "syq-j32", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--syq-connections", "32"], "debug": false} |
| rsync | rsync version 3.2.7 protocol version 31 | Local operation | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
| cp | cp (GNU coreutils) 8.32 | Local operation | {"name": "cp", "kind": "cp", "binary": "/usr/bin/cp", "args": ["-a"], "debug": false} |
{
"started": "2026-09-08T23:19:37+00:00",
"seed": 204330278,
"host": {
"kernel": "5.15.0-126-generic",
"machine": "x86_64",
"cpus": 160,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "xfs",
"destination": "xfs"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/private-xfs-full.toml",
"environment": {
"kernel": "5.15.0-126-generic",
"versions": {
"syq": "syq 0.5.2",
"syq-j32": "syq 0.5.2",
"rsync": "rsync version 3.2.7 protocol version 31",
"cp": "cp (GNU coreutils) 8.32"
},
"allowed_cpus": 160,
"governors": [
"performance"
],
"cpu_model": "Intel(R) Xeon(R) Platinum 8460Y+"
},
"path_filesystems": {
"source": "xfs",
"destination": "xfs"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "private-xfs-full",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "/path/to/empty-destination-scratch"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap"
],
"debug": false
},
{
"name": "syq-j32",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--syq-connections",
"32"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
},
{
"name": "cp",
"kind": "cp",
"binary": "/usr/bin/cp",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "large-file",
"kind": "large-file",
"bytes": 17179869184,
"files": 1
},
{
"name": "mixed-tree",
"kind": "mixed-tree",
"bytes": 17179869184,
"files": 16000
},
{
"name": "small-files",
"kind": "small-files",
"bytes": 838860800,
"files": 200000
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "evict",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 120,
"slow_cutoff": 0
}
}
}Copying to a shared network drive
Copy a large file or a folder onto a drive shared over the network.
An NFS network drive. Other NFS services may perform differently.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. A server with two Xeon Platinum 8460Y+ CPUs, 160 logical CPUs and the performance governor; Linux 5.15.0-126-generic. Its ext4 system volume, XFS data volume and NFS mount are distinct placements. Shared-host activity was observed but not eliminated. Source fixture pages evicted, metadata warm; device caches and drive history uncontrolled. The 32-worker control also disables automatic tuning and the automatic sequential NFS fallback, so it is not an isolated worker-count comparison. NFS 4.2; server cache and backing filesystem uncontrolled. Eviction affects the client only. The copy process accesses the NFS mount directly, without an SSH relay. The original small-file comparison timed out for two tools; the separate reduced-size comparison below is complete.
One large file
1 file ยท 8.59 GB total ยท copying to an empty folder
cp is 1.07ร faster than syq in this run.
syq can keep several reads or writes in progress at once, overlapping waits for the network drive.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 22.2 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq | 1 | 18.6 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq | 2 | 30.7 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 0 | 35.3 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 1 | 35.1 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 2 | 42.5 s | โ | 0 | True | evict | Local copy ยท NFS |
| rsync | 0 | 24.5 s | โ | 0 | True | evict | โ |
| rsync | 1 | 30.1 s | โ | 0 | True | evict | โ |
| rsync | 2 | 27.3 s | โ | 0 | True | evict | โ |
| cp | 0 | 23.1 s | โ | 0 | True | evict | โ |
| cp | 1 | 22.3 s | โ | 0 | True | evict | โ |
| cp | 2 | 21.6 s | โ | 0 | True | evict | โ |
A folder with files of different sizes
8,000 files ยท 8.59 GB total ยท copying to an empty folder
syq is 4.36ร faster than cp in this run.
syq uses several workers to create and write files in parallel, keeping more requests to the network drive in progress.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 14.4 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq | 1 | 11.6 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq | 2 | 11.5 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 0 | 12.7 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 1 | 12.2 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 2 | 12.6 s | โ | 0 | True | evict | Local copy ยท NFS |
| rsync | 0 | 64.9 s | โ | 0 | True | evict | โ |
| rsync | 1 | 52.7 s | โ | 0 | True | evict | โ |
| rsync | 2 | 57.9 s | โ | 0 | True | evict | โ |
| cp | 0 | 53.2 s | โ | 0 | True | evict | โ |
| cp | 1 | 44.8 s | โ | 0 | True | evict | โ |
| cp | 2 | 65.7 s | โ | 0 | True | evict | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | Local operation | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false} |
| syq-j32 | syq 0.5.2 | Local operation | {"name": "syq-j32", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--syq-connections", "32"], "debug": false} |
| rsync | rsync version 3.2.7 protocol version 31 | Local operation | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
| cp | cp (GNU coreutils) 8.32 | Local operation | {"name": "cp", "kind": "cp", "binary": "/usr/bin/cp", "args": ["-a"], "debug": false} |
{
"started": "2026-09-08T23:55:47+00:00",
"seed": 204330278,
"host": {
"kernel": "5.15.0-126-generic",
"machine": "x86_64",
"cpus": 160,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "xfs",
"destination": "nfs"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/private-nfs-write.toml",
"environment": {
"kernel": "5.15.0-126-generic",
"versions": {
"syq": "syq 0.5.2",
"syq-j32": "syq 0.5.2",
"rsync": "rsync version 3.2.7 protocol version 31",
"cp": "cp (GNU coreutils) 8.32"
},
"allowed_cpus": 160,
"governors": [
"performance"
],
"cpu_model": "Intel(R) Xeon(R) Platinum 8460Y+"
},
"path_filesystems": {
"source": "xfs",
"destination": "nfs4"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "private-nfs-write",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "/path/to/empty-destination-scratch"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap"
],
"debug": false
},
{
"name": "syq-j32",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--syq-connections",
"32"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
},
{
"name": "cp",
"kind": "cp",
"binary": "/usr/bin/cp",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "large-file",
"kind": "large-file",
"bytes": 8589934592,
"files": 1
},
{
"name": "mixed-tree",
"kind": "mixed-tree",
"bytes": 8589934592,
"files": 8000
},
{
"name": "small-files",
"kind": "small-files",
"bytes": 419430400,
"files": 100000
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "evict",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 120,
"slow_cutoff": 0
}
}
}Many small files on a network drive
Copy a folder of small files onto the same shared drive.
The same NFS network drive.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. A server with two Xeon Platinum 8460Y+ CPUs, 160 logical CPUs and the performance governor; Linux 5.15.0-126-generic. Its ext4 system volume, XFS data volume and NFS mount are distinct placements. Shared-host activity was observed but not eliminated. Source fixture pages evicted, metadata warm; device caches and drive history uncontrolled. The 32-worker control also disables automatic tuning and the automatic sequential NFS fallback, so it is not an isolated worker-count comparison. NFS 4.2; server cache and backing filesystem uncontrolled. Eviction affects the client only. The copy process accesses the NFS mount directly, without an SSH relay.
Many small files
25,000 files ยท 104.8 MB total ยท copying to an empty folder
syq is 6.60ร faster than cp in this run.
syq uses several workers to create and write files in parallel, keeping more requests to the network drive in progress.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 5.47 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq | 1 | 5.37 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq | 2 | 5.57 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 0 | 5.47 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 1 | 5.52 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 2 | 5.52 s | โ | 0 | True | evict | Local copy ยท NFS |
| rsync | 0 | 41.7 s | โ | 0 | True | evict | โ |
| rsync | 1 | 44.8 s | โ | 0 | True | evict | โ |
| rsync | 2 | 44.0 s | โ | 0 | True | evict | โ |
| cp | 0 | 35.3 s | โ | 0 | True | evict | โ |
| cp | 1 | 35.6 s | โ | 0 | True | evict | โ |
| cp | 2 | 37.4 s | โ | 0 | True | evict | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | Local operation | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false} |
| syq-j32 | syq 0.5.2 | Local operation | {"name": "syq-j32", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--syq-connections", "32"], "debug": false} |
| rsync | rsync version 3.2.7 protocol version 31 | Local operation | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
| cp | cp (GNU coreutils) 8.32 | Local operation | {"name": "cp", "kind": "cp", "binary": "/usr/bin/cp", "args": ["-a"], "debug": false} |
{
"started": "2026-09-09T00:41:53+00:00",
"seed": 204330278,
"host": {
"kernel": "5.15.0-126-generic",
"machine": "x86_64",
"cpus": 160,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "xfs",
"destination": "nfs"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/private-nfs-metadata-25k.toml",
"environment": {
"kernel": "5.15.0-126-generic",
"versions": {
"syq": "syq 0.5.2",
"syq-j32": "syq 0.5.2",
"rsync": "rsync version 3.2.7 protocol version 31",
"cp": "cp (GNU coreutils) 8.32"
},
"allowed_cpus": 160,
"governors": [
"performance"
],
"cpu_model": "Intel(R) Xeon(R) Platinum 8460Y+"
},
"path_filesystems": {
"source": "xfs",
"destination": "nfs4"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"NFS cache control applies only to the client; server cache and backing filesystem are not controlled.",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "private-nfs-metadata-25k",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "/path/to/empty-destination-scratch"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap"
],
"debug": false
},
{
"name": "syq-j32",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--syq-connections",
"32"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
},
{
"name": "cp",
"kind": "cp",
"binary": "/usr/bin/cp",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "small-files",
"kind": "small-files",
"bytes": 104857600,
"files": 25000
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "evict",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 120,
"slow_cutoff": 0
}
}
}Copying from a shared network drive
Read files from the shared drive back onto the server.
The copy is kept in memory, so local disk writes donโt slow it down.
Test setup & limitations
syq 0.5.2, source fd2b17c; static GNU build with Rust 1.94.1. Three rotated repetitions, each checksum-verified outside timing. Generated incompressible data, seed 204330278; compression off. No final flush: completion is not a durability measurement. A server with two Xeon Platinum 8460Y+ CPUs, 160 logical CPUs and the performance governor; Linux 5.15.0-126-generic. Its ext4 system volume, XFS data volume and NFS mount are distinct placements. Shared-host activity was observed but not eliminated. Source fixture pages evicted, metadata warm; device caches and drive history uncontrolled. The 32-worker control also disables automatic tuning and the automatic sequential NFS fallback, so it is not an isolated worker-count comparison. NFS 4.2; server cache and backing filesystem uncontrolled. Eviction affects the client only. The copy process accesses the NFS mount directly, without an SSH relay. Destination tmpfs removes local disk writes from this comparison.
One large file
1 file ยท 8.59 GB total ยท copying to an empty folder
syq and cp have speeds within 5% of each other.
syq can keep several reads or writes in progress at once, overlapping waits for the network drive.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 9.68 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq | 1 | 9.78 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq | 2 | 9.68 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 0 | 9.73 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 1 | 9.73 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 2 | 9.69 s | โ | 0 | True | evict | Local copy ยท NFS |
| rsync | 0 | 14.2 s | โ | 0 | True | evict | โ |
| rsync | 1 | 14.8 s | โ | 0 | True | evict | โ |
| rsync | 2 | 14.3 s | โ | 0 | True | evict | โ |
| cp | 0 | 10.1 s | โ | 0 | True | evict | โ |
| cp | 1 | 10.2 s | โ | 0 | True | evict | โ |
| cp | 2 | 9.63 s | โ | 0 | True | evict | โ |
A folder with files of different sizes
8,000 files ยท 8.59 GB total ยท copying to an empty folder
syq is 1.95ร faster than cp in this run.
syq can read several files at once, overlapping waits for the network drive.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 8.33 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq | 1 | 8.33 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq | 2 | 8.43 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 0 | 8.33 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 1 | 8.33 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 2 | 8.48 s | โ | 0 | True | evict | Local copy ยท NFS |
| rsync | 0 | 18.1 s | โ | 0 | True | evict | โ |
| rsync | 1 | 18.0 s | โ | 0 | True | evict | โ |
| rsync | 2 | 18.0 s | โ | 0 | True | evict | โ |
| cp | 0 | 16.3 s | โ | 0 | True | evict | โ |
| cp | 1 | 16.2 s | โ | 0 | True | evict | โ |
| cp | 2 | 16.4 s | โ | 0 | True | evict | โ |
Many small files
100,000 files ยท 419.4 MB total ยท copying to an empty folder
syq is 6.05ร faster than rsync in this run.
syq can read several files at once, overlapping waits for the network drive.
Other syq settings
See each test run
| Tool | Repeat | Tool time | Post-copy flush | Exit | Checksum | Cache | syq data path |
|---|---|---|---|---|---|---|---|
| syq | 0 | 7.07 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq | 1 | 6.62 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq | 2 | 5.57 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 0 | 6.62 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 1 | 6.62 s | โ | 0 | True | evict | Local copy ยท NFS |
| syq-j32 | 2 | 5.57 s | โ | 0 | True | evict | Local copy ยท NFS |
| rsync | 0 | 40.7 s | โ | 0 | True | evict | โ |
| rsync | 1 | 37.9 s | โ | 0 | True | evict | โ |
| rsync | 2 | 38.0 s | โ | 0 | True | evict | โ |
| cp | 0 | 64.5 s | โ | 0 | True | evict | โ |
| cp | 1 | 61.5 s | โ | 0 | True | evict | โ |
| cp | 2 | 57.1 s | โ | 0 | True | evict | โ |
Versions, commands & measurement conditions
| Tool | Local version / SHA-256 | Remote identity | Arguments |
|---|---|---|---|
| syq | syq 0.5.2 | Local operation | {"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false} |
| syq-j32 | syq 0.5.2 | Local operation | {"name": "syq-j32", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap", "--syq-connections", "32"], "debug": false} |
| rsync | rsync version 3.2.7 protocol version 31 | Local operation | {"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false} |
| cp | cp (GNU coreutils) 8.32 | Local operation | {"name": "cp", "kind": "cp", "binary": "/usr/bin/cp", "args": ["-a"], "debug": false} |
{
"started": "2026-09-09T01:43:05+00:00",
"seed": 204330278,
"host": {
"kernel": "5.15.0-126-generic",
"machine": "x86_64",
"cpus": 160,
"python": "3.13.13",
"hostname": "source-host"
},
"filesystems": {
"source": "nfs",
"destination": "tmpfs"
},
"publication": {
"syq_revision": "fd2b17c642e62d7ee63f7f3835560a6ceacd0afb",
"build_type": "release source build",
"release": "0.5.2",
"harness_revision": "a81f64898a1080f7dceba0d05a6b4a919f8211c5",
"manual_recipe": "specs/release-052/private-nfs-read.toml",
"environment": {
"kernel": "5.15.0-126-generic",
"versions": {
"syq": "syq 0.5.2",
"syq-j32": "syq 0.5.2",
"rsync": "rsync version 3.2.7 protocol version 31",
"cp": "cp (GNU coreutils) 8.32"
},
"allowed_cpus": 160,
"governors": [
"performance"
],
"cpu_model": "Intel(R) Xeon(R) Platinum 8460Y+"
},
"path_filesystems": {
"source": "nfs4",
"destination": "tmpfs"
},
"source_build_sha256": "da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef",
"selection_note": "Charts omit entire workloads if any tool is incomplete, unverified, cache preparation failed, or any repeat is under three seconds. Omitted cases remain in this capture."
},
"uncontrolled": [
"metadata cache (dentries/inodes) is not evicted: generation, checksum, and repeats all warm it",
"NFS cache control applies only to the client; server cache and backing filesystem are not controlled.",
"Shared host activity not reserved by OS; untimed before/after resource snapshots retained.",
"Metadata caches warm; data cache preparation recorded per repeat; no global eviction.",
"No final flush requested; command completion does not establish durability or physical device throughput.",
"Logical throughput is not physical disk, network or DRAM traffic.",
"GNU time wrapper is timed; maximum process RSS is not aggregate simultaneous memory.",
"Clean runs have no debug tracing or concurrent diagnostic sampler; setup snapshots are untimed."
],
"aborted": null,
"probes": [],
"spec": {
"name": "private-nfs-read",
"description": "Release 0.5.2 comparison; generated incompressible fixture; logical throughput",
"endpoints": {
"source": "/path/to/empty-source-scratch",
"destination": "/path/to/empty-destination-scratch"
},
"tools": [
{
"name": "syq",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap"
],
"debug": false
},
{
"name": "syq-j32",
"kind": "syq",
"binary": "/path/to/syq",
"args": [
"rsync",
"-a",
"--stats",
"--no-progress",
"--syq-no-bootstrap",
"--syq-connections",
"32"
],
"debug": false
},
{
"name": "rsync",
"kind": "rsync",
"binary": "/usr/bin/rsync",
"args": [
"-a"
],
"debug": false
},
{
"name": "cp",
"kind": "cp",
"binary": "/usr/bin/cp",
"args": [
"-a"
],
"debug": false
}
],
"workloads": [
{
"name": "large-file",
"kind": "large-file",
"bytes": 8589934592,
"files": 1
},
{
"name": "mixed-tree",
"kind": "mixed-tree",
"bytes": 8589934592,
"files": 8000
},
{
"name": "small-files",
"kind": "small-files",
"bytes": 419430400,
"files": 100000
}
],
"protocol": {
"repeats": 3,
"seed": 204330278,
"cache": "evict",
"durable": false,
"verify": true,
"probes": false,
"tool_timeout": 120,
"slow_cutoff": 0
}
}
}