All benchmark results

The full set of comparisons for syq 0.5.2, including other settings and every test run.

โ† Back to the short version

01Cloud servers

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.

Run 1 ยท 2026-09-09Download results โ†“

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.

syqData path: TCP ยท observed
159.1 MB/s6.75 s
Fastest measured
rsync
18.0 MB/s59.5 s
11% of fastest
Other syq settings
AutomaticData path: TCP ยท observed
159.1 MB/s6.75 s
Fastest measured
Transfer over SSHData path: SSH ยท observed
87.2 MB/s12.3 s
55% of fastest
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq06.44 sโ€”0TruewarmTCP ยท observed
syq16.25 sโ€”0TruewarmTCP ยท observed
syq27.55 sโ€”0TruewarmTCP ยท observed
syq-ssh012.3 sโ€”0TruewarmSSH ยท observed
syq-ssh112.3 sโ€”0TruewarmSSH ยท observed
syq-ssh212.3 sโ€”0TruewarmSSH ยท observed
rsync059.5 sโ€”0Truewarmโ€”
rsync159.2 sโ€”0Truewarmโ€”
rsync259.8 sโ€”0Truewarmโ€”

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.

syqData path: TCP ยท observed
156.6 MB/s6.86 s
Fastest measured
rsync
18.1 MB/s59.3 s
12% of fastest
Other syq settings
AutomaticData path: TCP ยท observed
156.6 MB/s6.86 s
Fastest measured
Transfer over SSHData path: SSH ยท observed
86.1 MB/s12.5 s
55% of fastest
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq06.09 sโ€”0TruewarmTCP ยท observed
syq17.14 sโ€”0TruewarmTCP ยท observed
syq27.34 sโ€”0TruewarmTCP ยท observed
syq-ssh012.5 sโ€”0TruewarmSSH ยท observed
syq-ssh112.5 sโ€”0TruewarmSSH ยท observed
syq-ssh212.4 sโ€”0TruewarmSSH ยท observed
rsync059.1 sโ€”0Truewarmโ€”
rsync159.7 sโ€”0Truewarmโ€”
rsync259.0 sโ€”0Truewarmโ€”

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.

syqData path: Unrecorded
5.1 MB/s4.11 s
94% of fastest
rsync
5.4 MB/s3.88 s
Fastest measured
Other syq settings
AutomaticData path: Unrecorded
5.1 MB/s4.11 s
Fastest measured
Transfer over SSHData path: SSH ยท requested
3.7 MB/s5.61 s
73% of fastest
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq04.13 sโ€”0TruewarmUnrecorded
syq14.08 sโ€”0TruewarmUnrecorded
syq24.13 sโ€”0TruewarmUnrecorded
syq-ssh05.64 sโ€”0TruewarmSSH ยท requested
syq-ssh15.59 sโ€”0TruewarmSSH ยท requested
syq-ssh25.59 sโ€”0TruewarmSSH ยท requested
rsync03.88 sโ€”0Truewarmโ€”
rsync13.88 sโ€”0Truewarmโ€”
rsync23.88 sโ€”0Truewarmโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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-sshsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.4.1 protocol version 32
a56c05b960beb734169619d5760b43ff495e84f85a93eb1f54fe58118262fb20
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
    }
  }
}
02Cloud servers

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.

Run 1 ยท 2026-09-09Download results โ†“

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.

syqData path: TCP ยท observed
151.0 MB/s7.11 s
Fastest measured
rsync
18.0 MB/s59.8 s
12% of fastest
Other syq settings
AutomaticData path: TCP ยท observed
151.0 MB/s7.11 s
Fastest measured
Transfer over SSHData path: SSH ยท observed
87.7 MB/s12.2 s
58% of fastest
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq06.84 sโ€”0TruewarmTCP ยท observed
syq17.31 sโ€”0TruewarmTCP ยท observed
syq27.19 sโ€”0TruewarmTCP ยท observed
syq-ssh012.2 sโ€”0TruewarmSSH ยท observed
syq-ssh112.3 sโ€”0TruewarmSSH ยท observed
syq-ssh212.2 sโ€”0TruewarmSSH ยท observed
rsync059.5 sโ€”0Truewarmโ€”
rsync160.0 sโ€”0Truewarmโ€”
rsync259.9 sโ€”0Truewarmโ€”

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.

syqData path: TCP ยท observed
145.6 MB/s7.37 s
Fastest measured
rsync
17.9 MB/s60.0 s
12% of fastest
Other syq settings
AutomaticData path: TCP ยท observed
145.6 MB/s7.37 s
Fastest measured
Transfer over SSHData path: SSH ยท observed
86.1 MB/s12.5 s
59% of fastest
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq07.43 sโ€”0TruewarmTCP ยท observed
syq17.39 sโ€”0TruewarmTCP ยท observed
syq27.29 sโ€”0TruewarmTCP ยท observed
syq-ssh012.5 sโ€”0TruewarmSSH ยท observed
syq-ssh112.5 sโ€”0TruewarmSSH ยท observed
syq-ssh212.4 sโ€”0TruewarmSSH ยท observed
rsync059.9 sโ€”0Truewarmโ€”
rsync160.3 sโ€”0Truewarmโ€”
rsync259.8 sโ€”0Truewarmโ€”

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.

syqData path: Unrecorded
5.1 MB/s4.13 s
95% of fastest
rsync
5.3 MB/s3.93 s
Fastest measured
Other syq settings
AutomaticData path: Unrecorded
5.1 MB/s4.13 s
Fastest measured
Transfer over SSHData path: SSH ยท requested
3.7 MB/s5.65 s
73% of fastest
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq04.13 sโ€”0TruewarmUnrecorded
syq14.13 sโ€”0TruewarmUnrecorded
syq24.13 sโ€”0TruewarmUnrecorded
syq-ssh05.68 sโ€”0TruewarmSSH ยท requested
syq-ssh15.68 sโ€”0TruewarmSSH ยท requested
syq-ssh25.59 sโ€”0TruewarmSSH ยท requested
rsync03.93 sโ€”0Truewarmโ€”
rsync13.93 sโ€”0Truewarmโ€”
rsync23.93 sโ€”0Truewarmโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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-sshsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.4.1 protocol version 32
a56c05b960beb734169619d5760b43ff495e84f85a93eb1f54fe58118262fb20
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
    }
  }
}
03Rented server

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.

Run 1 ยท 2026-09-08Download results โ†“

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.

syqData path: Local copy
1.16 GB/s14.9 s
Comparable
rsync
723.7 MB/s23.7 s
62% of fastest
cp
1.16 GB/s14.8 s
Fastest measured
Other syq settings
AutomaticData path: Local copy
1.16 GB/s14.9 s
Fastest measured
32 workersData path: Local copy
1.13 GB/s15.2 s
Comparable
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq014.9 sโ€”0TrueevictLocal copy
syq114.8 sโ€”0TrueevictLocal copy
syq214.8 sโ€”0TrueevictLocal copy
syq-j32015.2 sโ€”0TrueevictLocal copy
syq-j32114.8 sโ€”0TrueevictLocal copy
syq-j32215.5 sโ€”0TrueevictLocal copy
rsync023.8 sโ€”0Trueevictโ€”
rsync123.6 sโ€”0Trueevictโ€”
rsync223.9 sโ€”0Trueevictโ€”
cp015.1 sโ€”0Trueevictโ€”
cp114.7 sโ€”0Trueevictโ€”
cp214.7 sโ€”0Trueevictโ€”

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.

syqData path: Local copy
3.77 GB/s4.56 s
Fastest measured
rsync
754.2 MB/s22.8 s
20% of fastest
cp
971.9 MB/s17.7 s
26% of fastest
Other syq settings
AutomaticData path: Local copy
3.77 GB/s4.56 s
Fastest measured
32 workersData path: Local copy
3.55 GB/s4.84 s
Comparable
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq04.28 sโ€”0TrueevictLocal copy
syq14.83 sโ€”0TrueevictLocal copy
syq24.57 sโ€”0TrueevictLocal copy
syq-j3204.17 sโ€”0TrueevictLocal copy
syq-j3215.13 sโ€”0TrueevictLocal copy
syq-j3225.23 sโ€”0TrueevictLocal copy
rsync022.9 sโ€”0Trueevictโ€”
rsync122.7 sโ€”0Trueevictโ€”
rsync222.8 sโ€”0Trueevictโ€”
cp017.4 sโ€”0Trueevictโ€”
cp118.0 sโ€”0Trueevictโ€”
cp217.6 sโ€”0Trueevictโ€”

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.

syqData path: Local copy
181.3 MB/s4.63 s
Fastest measured
rsync
51.0 MB/s16.4 s
28% of fastest
cp
33.7 MB/s24.9 s
19% of fastest
Other syq settings
AutomaticData path: Local copy
181.3 MB/s4.63 s
Comparable
32 workersData path: Local copy
183.1 MB/s4.58 s
Fastest measured
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq04.73 sโ€”0TrueevictLocal copy
syq14.57 sโ€”0TrueevictLocal copy
syq24.58 sโ€”0TrueevictLocal copy
syq-j3204.53 sโ€”0TrueevictLocal copy
syq-j3214.58 sโ€”0TrueevictLocal copy
syq-j3224.62 sโ€”0TrueevictLocal copy
rsync016.4 sโ€”0Trueevictโ€”
rsync116.5 sโ€”0Trueevictโ€”
rsync216.5 sโ€”0Trueevictโ€”
cp024.9 sโ€”0Trueevictโ€”
cp125.0 sโ€”0Trueevictโ€”
cp224.9 sโ€”0Trueevictโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
Local operation{"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false}
syq-j32syq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.2.7 protocol version 32
ab544a0e536ca83f9399e86942c466bb5b43abde469dfb1200ddba98b00e559d
Local operation{"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false}
cpcp (GNU coreutils) 9.1
e296487a3a8f10a1c55e56056ba4bbb2d3ca22ae625af9f0d5cebaed28e55fa4
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
    }
  }
}
04Rented server

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.

Run 1 ยท 2026-09-09Download results โ†“

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.

syqData path: Local copy
1.34 GB/s12.9 s
Fastest measured
rsync
738.0 MB/s23.3 s
55% of fastest
cp
1.12 GB/s15.4 s
84% of fastest
Other syq settings
AutomaticData path: Local copy
1.34 GB/s12.9 s
Comparable
32 workersData path: Local copy
1.35 GB/s12.7 s
Fastest measured
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq012.8 sโ€”0TrueevictLocal copy
syq112.8 sโ€”0TrueevictLocal copy
syq212.9 sโ€”0TrueevictLocal copy
syq-j32012.8 sโ€”0TrueevictLocal copy
syq-j32112.7 sโ€”0TrueevictLocal copy
syq-j32212.7 sโ€”0TrueevictLocal copy
rsync023.5 sโ€”0Trueevictโ€”
rsync123.2 sโ€”0Trueevictโ€”
rsync223.2 sโ€”0Trueevictโ€”
cp015.3 sโ€”0Trueevictโ€”
cp115.2 sโ€”0Trueevictโ€”
cp215.6 sโ€”0Trueevictโ€”

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.

syqData path: Local copy
4.47 GB/s3.85 s
Fastest measured
rsync
811.8 MB/s21.2 s
18% of fastest
cp
957.4 MB/s17.9 s
21% of fastest
Other syq settings
AutomaticData path: Local copy
4.47 GB/s3.85 s
Comparable
32 workersData path: Local copy
4.57 GB/s3.76 s
Fastest measured
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq04.06 sโ€”0TrueevictLocal copy
syq13.72 sโ€”0TrueevictLocal copy
syq23.76 sโ€”0TrueevictLocal copy
syq-j3203.80 sโ€”0TrueevictLocal copy
syq-j3213.76 sโ€”0TrueevictLocal copy
syq-j3223.71 sโ€”0TrueevictLocal copy
rsync021.2 sโ€”0Trueevictโ€”
rsync121.1 sโ€”0Trueevictโ€”
rsync221.2 sโ€”0Trueevictโ€”
cp017.8 sโ€”0Trueevictโ€”
cp117.9 sโ€”0Trueevictโ€”
cp218.1 sโ€”0Trueevictโ€”

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.

syqData path: Local copy
180.4 MB/s4.65 s
Fastest measured
rsync
51.1 MB/s16.4 s
28% of fastest
cp
29.7 MB/s28.3 s
16% of fastest
Other syq settings
AutomaticData path: Local copy
180.4 MB/s4.65 s
Comparable
32 workersData path: Local copy
182.4 MB/s4.60 s
Fastest measured
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq04.73 sโ€”0TrueevictLocal copy
syq14.64 sโ€”0TrueevictLocal copy
syq24.58 sโ€”0TrueevictLocal copy
syq-j3204.63 sโ€”0TrueevictLocal copy
syq-j3214.58 sโ€”0TrueevictLocal copy
syq-j3224.58 sโ€”0TrueevictLocal copy
rsync016.4 sโ€”0Trueevictโ€”
rsync116.4 sโ€”0Trueevictโ€”
rsync216.5 sโ€”0Trueevictโ€”
cp028.2 sโ€”0Trueevictโ€”
cp128.3 sโ€”0Trueevictโ€”
cp228.3 sโ€”0Trueevictโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
Local operation{"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false}
syq-j32syq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.2.7 protocol version 32
ab544a0e536ca83f9399e86942c466bb5b43abde469dfb1200ddba98b00e559d
Local operation{"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false}
cpcp (GNU coreutils) 9.1
e296487a3a8f10a1c55e56056ba4bbb2d3ca22ae625af9f0d5cebaed28e55fa4
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
    }
  }
}
05Cloud servers

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.

Run 1 ยท 2026-09-08Download results โ†“

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.

syqData path: TCP ยท observed
742.0 MB/s5.79 s
Fastest measured
rsync
463.3 MB/s9.27 s
62% of fastest
Other syq settings
AutomaticData path: TCP ยท observed
742.0 MB/s5.79 s
Fastest measured
Transfer over SSHData path: SSH ยท observed
678.7 MB/s6.33 s
91% of fastest
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq05.98 sโ€”0TruewarmTCP ยท observed
syq15.75 sโ€”0TruewarmTCP ยท observed
syq25.64 sโ€”0TruewarmTCP ยท observed
syq-ssh06.29 sโ€”0TruewarmSSH ยท observed
syq-ssh16.40 sโ€”0TruewarmSSH ยท observed
syq-ssh26.30 sโ€”0TruewarmSSH ยท observed
rsync09.54 sโ€”0Truewarmโ€”
rsync19.08 sโ€”0Truewarmโ€”
rsync29.19 sโ€”0Truewarmโ€”

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.

syqData path: TCP ยท observed
893.9 MB/s4.80 s
Fastest measured
rsync
467.5 MB/s9.19 s
52% of fastest
Other syq settings
AutomaticData path: TCP ยท observed
893.9 MB/s4.80 s
Fastest measured
Transfer over SSHData path: SSH ยท observed
795.5 MB/s5.40 s
89% of fastest
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq04.84 sโ€”0TruewarmTCP ยท observed
syq14.73 sโ€”0TruewarmTCP ยท observed
syq24.84 sโ€”0TruewarmTCP ยท observed
syq-ssh05.05 sโ€”0TruewarmSSH ยท observed
syq-ssh15.50 sโ€”0TruewarmSSH ยท observed
syq-ssh25.64 sโ€”0TruewarmSSH ยท observed
rsync09.29 sโ€”0Truewarmโ€”
rsync19.04 sโ€”0Truewarmโ€”
rsync29.24 sโ€”0Truewarmโ€”

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.

syqData path: Unrecorded
98.1 MB/s4.28 s
77% of fastest
rsync
127.5 MB/s3.29 s
Fastest measured
Other syq settings
AutomaticData path: Unrecorded
98.1 MB/s4.28 s
92% of fastest
Transfer over SSHData path: SSH ยท requested
106.6 MB/s3.93 s
Fastest measured
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq04.24 sโ€”0TruewarmUnrecorded
syq14.35 sโ€”0TruewarmUnrecorded
syq24.23 sโ€”0TruewarmUnrecorded
syq-ssh03.98 sโ€”0TruewarmSSH ยท requested
syq-ssh13.93 sโ€”0TruewarmSSH ยท requested
syq-ssh23.88 sโ€”0TruewarmSSH ยท requested
rsync03.17 sโ€”0Truewarmโ€”
rsync13.17 sโ€”0Truewarmโ€”
rsync23.52 sโ€”0Truewarmโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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-sshsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.4.1 protocol version 32
a56c05b960beb734169619d5760b43ff495e84f85a93eb1f54fe58118262fb20
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
    }
  }
}
06Cloud servers

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.

Run 1 ยท 2026-09-08Download results โ†“

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.

syqData path: TCP ยท observed
815.0 MB/s5.27 s
Fastest measured
rsync
455.1 MB/s9.44 s
56% of fastest
Other syq settings
AutomaticData path: TCP ยท observed
815.0 MB/s5.27 s
Fastest measured
Transfer over SSHData path: SSH ยท observed
726.4 MB/s5.91 s
89% of fastest
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq05.24 sโ€”0TruewarmTCP ยท observed
syq15.33 sโ€”0TruewarmTCP ยท observed
syq25.24 sโ€”0TruewarmTCP ยท observed
syq-ssh05.94 sโ€”0TruewarmSSH ยท observed
syq-ssh15.90 sโ€”0TruewarmSSH ยท observed
syq-ssh25.90 sโ€”0TruewarmSSH ยท observed
rsync09.64 sโ€”0Truewarmโ€”
rsync18.99 sโ€”0Truewarmโ€”
rsync29.69 sโ€”0Truewarmโ€”

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.

syqData path: TCP ยท observed
983.6 MB/s4.37 s
Fastest measured
rsync
439.6 MB/s9.77 s
45% of fastest
Other syq settings
AutomaticData path: TCP ยท observed
983.6 MB/s4.37 s
Fastest measured
Transfer over SSHData path: SSH ยท observed
831.2 MB/s5.17 s
85% of fastest
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq04.34 sโ€”0TruewarmTCP ยท observed
syq14.43 sโ€”0TruewarmTCP ยท observed
syq24.33 sโ€”0TruewarmTCP ยท observed
syq-ssh05.15 sโ€”0TruewarmSSH ยท observed
syq-ssh15.20 sโ€”0TruewarmSSH ยท observed
syq-ssh25.15 sโ€”0TruewarmSSH ยท observed
rsync09.84 sโ€”0Truewarmโ€”
rsync19.79 sโ€”0Truewarmโ€”
rsync29.69 sโ€”0Truewarmโ€”

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.

syqData path: Unrecorded
90.8 MB/s4.62 s
76% of fastest
rsync
119.7 MB/s3.51 s
Fastest measured
Other syq settings
AutomaticData path: Unrecorded
90.8 MB/s4.62 s
88% of fastest
Transfer over SSHData path: SSH ยท requested
103.1 MB/s4.07 s
Fastest measured
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq04.69 sโ€”0TruewarmUnrecorded
syq14.68 sโ€”0TruewarmUnrecorded
syq24.48 sโ€”0TruewarmUnrecorded
syq-ssh04.08 sโ€”0TruewarmSSH ยท requested
syq-ssh14.03 sโ€”0TruewarmSSH ยท requested
syq-ssh24.09 sโ€”0TruewarmSSH ยท requested
rsync03.27 sโ€”0Truewarmโ€”
rsync13.72 sโ€”0Truewarmโ€”
rsync23.52 sโ€”0Truewarmโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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-sshsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.4.1 protocol version 32
a56c05b960beb734169619d5760b43ff495e84f85a93eb1f54fe58118262fb20
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
    }
  }
}
07Cloud servers

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.

Run 1 ยท 2026-09-09Download results โ†“

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.

syqData path: Unrecorded
223.2 MB/s9.62 s
82% of fastest
rsync
272.3 MB/s7.89 s
Fastest measured
Other syq settings
AutomaticData path: Unrecorded
223.2 MB/s9.62 s
Fastest measured
Transfer over SSHData path: SSH ยท requested
108.9 MB/s19.7 s
49% of fastest
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq09.76 sโ€”0TruewarmUnrecorded
syq19.00 sโ€”0TruewarmUnrecorded
syq210.1 sโ€”0TruewarmUnrecorded
syq-ssh019.7 sโ€”0TruewarmSSH ยท requested
syq-ssh119.6 sโ€”0TruewarmSSH ยท requested
syq-ssh219.8 sโ€”0TruewarmSSH ยท requested
rsync07.89 sโ€”0Truewarmโ€”
rsync17.89 sโ€”0Truewarmโ€”
rsync27.89 sโ€”0Truewarmโ€”

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.

syqData path: Unrecorded
243.4 MB/s8.82 s
Fastest measured
rsync
18.5 MB/s116.0 s
7.6% of fastest
Other syq settings
AutomaticData path: Unrecorded
243.4 MB/s8.82 s
Fastest measured
Transfer over SSHData path: SSH ยท requested
100.0 MB/s21.5 s
41% of fastest
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq08.91 sโ€”0TruewarmUnrecorded
syq18.81 sโ€”0TruewarmUnrecorded
syq28.76 sโ€”0TruewarmUnrecorded
syq-ssh025.0 sโ€”0TruewarmSSH ยท requested
syq-ssh119.7 sโ€”0TruewarmSSH ยท requested
syq-ssh219.7 sโ€”0TruewarmSSH ยท requested
rsync0115.8 sโ€”0Truewarmโ€”
rsync1116.7 sโ€”0Truewarmโ€”
rsync2115.6 sโ€”0Truewarmโ€”

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.

syqData path: Unrecorded
480.7 MB/s4.47 s
Fastest measured
rsync
357.9 MB/s6.00 s
74% of fastest
Other syq settings
AutomaticData path: Unrecorded
480.7 MB/s4.47 s
Fastest measured
Transfer over SSHData path: SSH ยท requested
382.2 MB/s5.62 s
80% of fastest
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq04.49 sโ€”0TruewarmUnrecorded
syq14.43 sโ€”0TruewarmUnrecorded
syq24.48 sโ€”0TruewarmUnrecorded
syq-ssh05.73 sโ€”0TruewarmSSH ยท requested
syq-ssh15.54 sโ€”0TruewarmSSH ยท requested
syq-ssh25.58 sโ€”0TruewarmSSH ยท requested
rsync06.03 sโ€”0Truewarmโ€”
rsync15.98 sโ€”0Truewarmโ€”
rsync25.98 sโ€”0Truewarmโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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-sshsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.4.1 protocol version 32
a56c05b960beb734169619d5760b43ff495e84f85a93eb1f54fe58118262fb20
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
    }
  }
}
08Cloud servers

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.

Run 1 ยท 2026-09-09Download results โ†“

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.

syqNo file data transferred
6.28 s
Fastest measured
rsync
12.1 s
52% of fastest
Other syq settings
AutomaticNo file data transferred
6.28 s
Fastest measured
Transfer over SSHNo file data transferred
6.30 s
Comparable
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq06.13 sโ€”0TruewarmUnrecorded
syq16.28 sโ€”0TruewarmUnrecorded
syq26.43 sโ€”0TruewarmUnrecorded
syq-ssh06.39 sโ€”0TruewarmSSH ยท requested
syq-ssh16.33 sโ€”0TruewarmSSH ยท requested
syq-ssh26.18 sโ€”0TruewarmSSH ยท requested
rsync012.2 sโ€”0Truewarmโ€”
rsync112.1 sโ€”0Truewarmโ€”
rsync212.0 sโ€”0Truewarmโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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-sshsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.4.1 protocol version 32
a56c05b960beb734169619d5760b43ff495e84f85a93eb1f54fe58118262fb20
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
    }
  }
}
09Rented server

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.

Run 1 ยท 2026-09-09Download results โ†“

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.

syqData path: Local copy
174.4 MB/s4.81 s
Fastest measured
rsync
50.4 MB/s16.6 s
29% of fastest
cp
95.0 MB/s8.83 s
54% of fastest
Other syq settings
AutomaticData path: Local copy
174.4 MB/s4.81 s
Comparable
32 workersData path: Local copy
179.6 MB/s4.67 s
Fastest measured
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq04.52 sโ€”0TrueevictLocal copy
syq15.03 sโ€”0TrueevictLocal copy
syq24.87 sโ€”0TrueevictLocal copy
syq-j3204.48 sโ€”0TrueevictLocal copy
syq-j3214.99 sโ€”0TrueevictLocal copy
syq-j3224.54 sโ€”0TrueevictLocal copy
rsync016.7 sโ€”0Trueevictโ€”
rsync116.6 sโ€”0Trueevictโ€”
rsync216.6 sโ€”0Trueevictโ€”
cp08.93 sโ€”0Trueevictโ€”
cp18.73 sโ€”0Trueevictโ€”
cp28.83 sโ€”0Trueevictโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
Local operation{"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false}
syq-j32syq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.2.7 protocol version 32
ab544a0e536ca83f9399e86942c466bb5b43abde469dfb1200ddba98b00e559d
Local operation{"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false}
cpcp (GNU coreutils) 9.1
e296487a3a8f10a1c55e56056ba4bbb2d3ca22ae625af9f0d5cebaed28e55fa4
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
    }
  }
}
10Existing server

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.

Run 1 ยท 2026-09-09Download results โ†“

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.

syqData path: Local copy
912.6 MB/s9.41 s
Comparable
rsync
583.4 MB/s14.7 s
57% of fastest
cp
1.02 GB/s8.46 s
Fastest measured
Other syq settings
AutomaticData path: Local copy
912.6 MB/s9.41 s
Fastest measured
32 workersData path: Local copy
878.3 MB/s9.78 s
Comparable
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq08.43 sโ€”0TrueevictLocal copy
syq111.4 sโ€”0TrueevictLocal copy
syq28.43 sโ€”0TrueevictLocal copy
syq-j3208.43 sโ€”0TrueevictLocal copy
syq-j3218.48 sโ€”0TrueevictLocal copy
syq-j32212.4 sโ€”0TrueevictLocal copy
rsync013.4 sโ€”0Trueevictโ€”
rsync117.1 sโ€”0Trueevictโ€”
rsync213.6 sโ€”0Trueevictโ€”
cp08.43 sโ€”0Trueevictโ€”
cp18.48 sโ€”0Trueevictโ€”
cp28.48 sโ€”0Trueevictโ€”

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.

syqData path: Local copy
183.5 MB/s4.57 s
Fastest measured
rsync
21.6 MB/s38.8 s
12% of fastest
cp
19.2 MB/s43.6 s
10% of fastest
Other syq settings
AutomaticData path: Local copy
183.5 MB/s4.57 s
Comparable
32 workersData path: Local copy
184.8 MB/s4.54 s
Fastest measured
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq04.67 sโ€”0TrueevictLocal copy
syq14.47 sโ€”0TrueevictLocal copy
syq24.57 sโ€”0TrueevictLocal copy
syq-j3204.47 sโ€”0TrueevictLocal copy
syq-j3214.52 sโ€”0TrueevictLocal copy
syq-j3224.62 sโ€”0TrueevictLocal copy
rsync038.8 sโ€”0Trueevictโ€”
rsync138.8 sโ€”0Trueevictโ€”
rsync238.7 sโ€”0Trueevictโ€”
cp043.8 sโ€”0Trueevictโ€”
cp143.5 sโ€”0Trueevictโ€”
cp243.4 sโ€”0Trueevictโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
Local operation{"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false}
syq-j32syq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.2.7 protocol version 31
f029cadc3f0b1c879bf8dfb899f434703c13ee53197d27da5d17bf0faf1f1318
Local operation{"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false}
cpcp (GNU coreutils) 8.32
ff67abc6eb03d81e080343971605e185e64da71d9804dd5a556f9001a10f0586
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
    }
  }
}
11Existing server

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.

Run 1 ยท 2026-09-09Download results โ†“

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.

syqData path: Local copy
1.96 GB/s4.37 s
Fastest measured
rsync
697.3 MB/s12.3 s
35% of fastest
cp
1.07 GB/s8.05 s
54% of fastest
Other syq settings
AutomaticData path: Local copy
1.96 GB/s4.37 s
Comparable
32 workersData path: Local copy
2.03 GB/s4.24 s
Fastest measured
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq04.37 sโ€”0TrueevictLocal copy
syq14.37 sโ€”0TrueevictLocal copy
syq24.37 sโ€”0TrueevictLocal copy
syq-j3204.22 sโ€”0TrueevictLocal copy
syq-j3214.17 sโ€”0TrueevictLocal copy
syq-j3224.32 sโ€”0TrueevictLocal copy
rsync012.3 sโ€”0Trueevictโ€”
rsync112.3 sโ€”0Trueevictโ€”
rsync212.3 sโ€”0Trueevictโ€”
cp08.03 sโ€”0Trueevictโ€”
cp18.08 sโ€”0Trueevictโ€”
cp28.03 sโ€”0Trueevictโ€”

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.

syqData path: Local copy
167.6 MB/s5.01 s
Fastest measured
rsync
22.0 MB/s38.0 s
13% of fastest
cp
19.8 MB/s42.3 s
12% of fastest
Other syq settings
AutomaticData path: Local copy
167.6 MB/s5.01 s
Fastest measured
32 workersData path: Local copy
154.7 MB/s5.42 s
Comparable
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq05.62 sโ€”0TrueevictLocal copy
syq14.67 sโ€”0TrueevictLocal copy
syq24.72 sโ€”0TrueevictLocal copy
syq-j3205.57 sโ€”0TrueevictLocal copy
syq-j3214.92 sโ€”0TrueevictLocal copy
syq-j3225.77 sโ€”0TrueevictLocal copy
rsync037.9 sโ€”0Trueevictโ€”
rsync138.1 sโ€”0Trueevictโ€”
rsync238.1 sโ€”0Trueevictโ€”
cp042.3 sโ€”0Trueevictโ€”
cp142.3 sโ€”0Trueevictโ€”
cp242.2 sโ€”0Trueevictโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
Local operation{"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false}
syq-j32syq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.2.7 protocol version 31
f029cadc3f0b1c879bf8dfb899f434703c13ee53197d27da5d17bf0faf1f1318
Local operation{"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false}
cpcp (GNU coreutils) 8.32
ff67abc6eb03d81e080343971605e185e64da71d9804dd5a556f9001a10f0586
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
    }
  }
}
12Existing server

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.

Run 1 ยท 2026-09-08Download results โ†“

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.

syqData path: Local copy
169.8 MB/s4.94 s
Fastest measured
rsync
29.4 MB/s28.5 s
17% of fastest
cp
26.5 MB/s31.7 s
16% of fastest
Other syq settings
AutomaticData path: Local copy
169.8 MB/s4.94 s
Fastest measured
32 workersData path: Local copy
154.2 MB/s5.44 s
Comparable
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq05.62 sโ€”0TrueevictLocal copy
syq14.62 sโ€”0TrueevictLocal copy
syq24.57 sโ€”0TrueevictLocal copy
syq-j3204.82 sโ€”0TrueevictLocal copy
syq-j3215.92 sโ€”0TrueevictLocal copy
syq-j3225.57 sโ€”0TrueevictLocal copy
rsync028.5 sโ€”0Trueevictโ€”
rsync128.5 sโ€”0Trueevictโ€”
rsync228.5 sโ€”0Trueevictโ€”
cp031.7 sโ€”0Trueevictโ€”
cp131.7 sโ€”0Trueevictโ€”
cp231.7 sโ€”0Trueevictโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
Local operation{"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false}
syq-j32syq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.2.7 protocol version 31
f029cadc3f0b1c879bf8dfb899f434703c13ee53197d27da5d17bf0faf1f1318
Local operation{"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false}
cpcp (GNU coreutils) 8.32
ff67abc6eb03d81e080343971605e185e64da71d9804dd5a556f9001a10f0586
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
    }
  }
}
13Existing server

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.

Run 1 ยท 2026-09-08Download results โ†“

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.

syqData path: Local copy ยท NFS
360.1 MB/s23.9 s
Comparable
rsync
314.6 MB/s27.3 s
82% of fastest
cp
384.3 MB/s22.3 s
Fastest measured
Other syq settings
AutomaticData path: Local copy ยท NFS
360.1 MB/s23.9 s
Fastest measured
32 workersData path: Local copy ยท NFS
228.3 MB/s37.6 s
63% of fastest
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq022.2 sโ€”0TrueevictLocal copy ยท NFS
syq118.6 sโ€”0TrueevictLocal copy ยท NFS
syq230.7 sโ€”0TrueevictLocal copy ยท NFS
syq-j32035.3 sโ€”0TrueevictLocal copy ยท NFS
syq-j32135.1 sโ€”0TrueevictLocal copy ยท NFS
syq-j32242.5 sโ€”0TrueevictLocal copy ยท NFS
rsync024.5 sโ€”0Trueevictโ€”
rsync130.1 sโ€”0Trueevictโ€”
rsync227.3 sโ€”0Trueevictโ€”
cp023.1 sโ€”0Trueevictโ€”
cp122.3 sโ€”0Trueevictโ€”
cp221.6 sโ€”0Trueevictโ€”

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.

syqData path: Local copy ยท NFS
685.3 MB/s12.5 s
Fastest measured
rsync
146.9 MB/s58.5 s
21% of fastest
cp
157.3 MB/s54.6 s
23% of fastest
Other syq settings
AutomaticData path: Local copy ยท NFS
685.3 MB/s12.5 s
Comparable
32 workersData path: Local copy ยท NFS
686.2 MB/s12.5 s
Fastest measured
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq014.4 sโ€”0TrueevictLocal copy ยท NFS
syq111.6 sโ€”0TrueevictLocal copy ยท NFS
syq211.5 sโ€”0TrueevictLocal copy ยท NFS
syq-j32012.7 sโ€”0TrueevictLocal copy ยท NFS
syq-j32112.2 sโ€”0TrueevictLocal copy ยท NFS
syq-j32212.6 sโ€”0TrueevictLocal copy ยท NFS
rsync064.9 sโ€”0Trueevictโ€”
rsync152.7 sโ€”0Trueevictโ€”
rsync257.9 sโ€”0Trueevictโ€”
cp053.2 sโ€”0Trueevictโ€”
cp144.8 sโ€”0Trueevictโ€”
cp265.7 sโ€”0Trueevictโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
Local operation{"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false}
syq-j32syq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.2.7 protocol version 31
f029cadc3f0b1c879bf8dfb899f434703c13ee53197d27da5d17bf0faf1f1318
Local operation{"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false}
cpcp (GNU coreutils) 8.32
ff67abc6eb03d81e080343971605e185e64da71d9804dd5a556f9001a10f0586
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
    }
  }
}
14Existing server

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.

Run 1 ยท 2026-09-09Download results โ†“

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.

syqData path: Local copy ยท NFS
19.2 MB/s5.47 s
Fastest measured
rsync
2.4 MB/s43.5 s
13% of fastest
cp
2.9 MB/s36.1 s
15% of fastest
Other syq settings
AutomaticData path: Local copy ยท NFS
19.2 MB/s5.47 s
Fastest measured
32 workersData path: Local copy ยท NFS
19.0 MB/s5.51 s
Comparable
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq05.47 sโ€”0TrueevictLocal copy ยท NFS
syq15.37 sโ€”0TrueevictLocal copy ยท NFS
syq25.57 sโ€”0TrueevictLocal copy ยท NFS
syq-j3205.47 sโ€”0TrueevictLocal copy ยท NFS
syq-j3215.52 sโ€”0TrueevictLocal copy ยท NFS
syq-j3225.52 sโ€”0TrueevictLocal copy ยท NFS
rsync041.7 sโ€”0Trueevictโ€”
rsync144.8 sโ€”0Trueevictโ€”
rsync244.0 sโ€”0Trueevictโ€”
cp035.3 sโ€”0Trueevictโ€”
cp135.6 sโ€”0Trueevictโ€”
cp237.4 sโ€”0Trueevictโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
Local operation{"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false}
syq-j32syq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.2.7 protocol version 31
f029cadc3f0b1c879bf8dfb899f434703c13ee53197d27da5d17bf0faf1f1318
Local operation{"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false}
cpcp (GNU coreutils) 8.32
ff67abc6eb03d81e080343971605e185e64da71d9804dd5a556f9001a10f0586
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
    }
  }
}
15Existing server

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.

Run 1 ยท 2026-09-09Download results โ†“

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.

syqData path: Local copy ยท NFS
884.2 MB/s9.71 s
Fastest measured
rsync
595.1 MB/s14.4 s
67% of fastest
cp
859.2 MB/s10.00 s
Comparable
Other syq settings
AutomaticData path: Local copy ยท NFS
884.2 MB/s9.71 s
Fastest measured
32 workersData path: Local copy ยท NFS
884.1 MB/s9.72 s
Comparable
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq09.68 sโ€”0TrueevictLocal copy ยท NFS
syq19.78 sโ€”0TrueevictLocal copy ยท NFS
syq29.68 sโ€”0TrueevictLocal copy ยท NFS
syq-j3209.73 sโ€”0TrueevictLocal copy ยท NFS
syq-j3219.73 sโ€”0TrueevictLocal copy ยท NFS
syq-j3229.69 sโ€”0TrueevictLocal copy ยท NFS
rsync014.2 sโ€”0Trueevictโ€”
rsync114.8 sโ€”0Trueevictโ€”
rsync214.3 sโ€”0Trueevictโ€”
cp010.1 sโ€”0Trueevictโ€”
cp110.2 sโ€”0Trueevictโ€”
cp29.63 sโ€”0Trueevictโ€”

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.

syqData path: Local copy ยท NFS
1.03 GB/s8.36 s
Fastest measured
rsync
476.1 MB/s18.0 s
46% of fastest
cp
526.8 MB/s16.3 s
51% of fastest
Other syq settings
AutomaticData path: Local copy ยท NFS
1.03 GB/s8.36 s
Fastest measured
32 workersData path: Local copy ยท NFS
1.03 GB/s8.38 s
Comparable
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq08.33 sโ€”0TrueevictLocal copy ยท NFS
syq18.33 sโ€”0TrueevictLocal copy ยท NFS
syq28.43 sโ€”0TrueevictLocal copy ยท NFS
syq-j3208.33 sโ€”0TrueevictLocal copy ยท NFS
syq-j3218.33 sโ€”0TrueevictLocal copy ยท NFS
syq-j3228.48 sโ€”0TrueevictLocal copy ยท NFS
rsync018.1 sโ€”0Trueevictโ€”
rsync118.0 sโ€”0Trueevictโ€”
rsync218.0 sโ€”0Trueevictโ€”
cp016.3 sโ€”0Trueevictโ€”
cp116.2 sโ€”0Trueevictโ€”
cp216.4 sโ€”0Trueevictโ€”

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.

syqData path: Local copy ยท NFS
65.3 MB/s6.42 s
Fastest measured
rsync
10.8 MB/s38.9 s
17% of fastest
cp
6.9 MB/s61.0 s
11% of fastest
Other syq settings
AutomaticData path: Local copy ยท NFS
65.3 MB/s6.42 s
Comparable
32 workersData path: Local copy ยท NFS
66.9 MB/s6.27 s
Fastest measured
See each test run
Every recorded repeat in this run
ToolRepeatTool timePost-copy flushExitChecksumCachesyq data path
syq07.07 sโ€”0TrueevictLocal copy ยท NFS
syq16.62 sโ€”0TrueevictLocal copy ยท NFS
syq25.57 sโ€”0TrueevictLocal copy ยท NFS
syq-j3206.62 sโ€”0TrueevictLocal copy ยท NFS
syq-j3216.62 sโ€”0TrueevictLocal copy ยท NFS
syq-j3225.57 sโ€”0TrueevictLocal copy ยท NFS
rsync040.7 sโ€”0Trueevictโ€”
rsync137.9 sโ€”0Trueevictโ€”
rsync238.0 sโ€”0Trueevictโ€”
cp064.5 sโ€”0Trueevictโ€”
cp161.5 sโ€”0Trueevictโ€”
cp257.1 sโ€”0Trueevictโ€”
Versions, commands & measurement conditions
ToolLocal version / SHA-256Remote identityArguments
syqsyq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
Local operation{"name": "syq", "kind": "syq", "binary": "/path/to/syq", "args": ["rsync", "-a", "--stats", "--no-progress", "--syq-no-bootstrap"], "debug": false}
syq-j32syq 0.5.2
da584b363640f2757f485058103c4be5f906fd8f7fd7e5d582bbcfd98a9ca1ef
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}
rsyncrsync version 3.2.7 protocol version 31
f029cadc3f0b1c879bf8dfb899f434703c13ee53197d27da5d17bf0faf1f1318
Local operation{"name": "rsync", "kind": "rsync", "binary": "/usr/bin/rsync", "args": ["-a"], "debug": false}
cpcp (GNU coreutils) 8.32
ff67abc6eb03d81e080343971605e185e64da71d9804dd5a556f9001a10f0586
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
    }
  }
}