Parallel rsync-like pull sync over SSH with resume
Find a file
Gerred Dillon 8b90abebe2
feat: add RDMA fast path over rdma-core rsockets (#13)
* Add RDMA fast path over rdma-core rsockets

* Harden RDMA fast path fallback behavior

* Compile RDMA only on Linux
2026-07-10 07:46:24 +04:30
.github/workflows ci: prevent duplicate push/pull request jobs (#9) 2026-03-17 13:03:45 +04:30
assets chore: add demo 2026-03-05 23:06:25 +04:30
scripts feat: add RDMA fast path over rdma-core rsockets (#13) 2026-07-10 07:46:24 +04:30
src feat: add RDMA fast path over rdma-core rsockets (#13) 2026-07-10 07:46:24 +04:30
tests feat: add RDMA fast path over rdma-core rsockets (#13) 2026-07-10 07:46:24 +04:30
.gitignore chore: add demo 2026-03-05 23:06:25 +04:30
Cargo.lock chore: rename project to parsync 2026-03-06 03:38:25 +04:30
Cargo.toml [ci skip] fix: add repo/homepage/documentation to Cargo.toml 2026-03-06 04:32:56 +04:30
LICENSE chore: add license 2026-03-05 13:43:54 +04:30
Makefile chore: add delta mode and rolling checksumming 2026-03-05 13:41:49 +04:30
README.md feat: add RDMA fast path over rdma-core rsockets (#13) 2026-07-10 07:46:24 +04:30

parsync

parsync is a high-throughput, resumable sync tool for SSH remotes and local-to-local transfers, with parallel file transfers, optional block-delta sync, and a Linux RDMA fast path when both hosts support it.

demo

Installation

Linux and macOS:

curl -fsSL https://alpindale.net/install.sh | bash

Windows:

powershell -ExecutionPolicy Bypass -c "irm https://alpindale.net/install.ps1 | iex"

You can also install with cargo:

cargo install parsync

You may also download the binary for your platform from the releases page, or install from source:

make build
make install

Platform support

  • Linux: x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu
  • macOS: aarch64-apple-darwin, x86_64-apple-darwin
  • Windows: x86_64-pc-windows-msvc (best-effort metadata support)

Usage

parsync -vrPlu user@example.com:/remote/path /local/destination

With non-default SSH port:

parsync -vrPlu user@example.com:2222:/remote/path /local/destination

SSH config host aliases are supported.

RDMA fast path

On Linux, SSH transfers can use a direct RDMA fast path for large whole-file copies when RDMA devices and rdma-core librdmacm rsockets are available on both hosts. parsync opens a local RDMA receiver, starts parsync --internal-rdma-send on the source host over SSH, and falls back to the normal SFTP/chunk transfer if RDMA is not available. RDMA support, including its CLI controls and internal helper, is not built on Windows or other non-Linux platforms.

The fast path can be tested without RDMA hardware by using the Linux RXE software RDMA driver (rdma_rxe) with rdma-core installed. An ignored integration test wraps the VM validation:

cargo test --test rdma_rxe_vm -- --ignored

RDMA is enabled in auto mode by default for SSH sources and only applies to files at least 64 MiB. Useful controls:

parsync --rdma=require user@example.com:/remote/path /local/destination
parsync --rdma=off user@example.com:/remote/path /local/destination
parsync --rdma-bind 10.10.0.12 user@example.com:/remote/path /local/destination
parsync --rdma-min-size 1048576 user@example.com:/remote/path /local/destination

Use --rdma-bind when the RDMA fabric uses a different local IPv4 address than the route selected for SSH. The same settings are available through PARSYNC_RDMA, PARSYNC_RDMA_BIND, PARSYNC_RDMA_MIN_SIZE, and PARSYNC_RDMA_HELPER, or the config file keys rdma_mode, rdma_bind, rdma_min_size, and rdma_helper.