Skip to content

v0.2.2 — Sender pipeline + 4MB socket buffers + sequential-scan

Choose a tag to compare

@ethemdemirkaya ethemdemirkaya released this 29 May 11:50
· 7 commits to main since this release

Performance release aimed squarely at the many-tiny-files case. Single-large-file throughput is unchanged (already saturated on gigabit).

What changed

Sender now pipelines disk-read against socket-write

The per-file loop used to do open → read chunk → socket write strictly in sequence. With 22 000 files the CreateFile syscalls alone burned ~15 seconds before any actual bytes moved.

A dedicated tokio task now owns the socket write side. The reader feeds it through mpsc::channel<WriterCmd>(16). The reader is free to start opening / streaming the next file while the previous file's tail is still draining onto the wire, so disk-read and network-send overlap.

WriterCmd is either Bytes(Vec<u8>) (appended to the BufWriter) or FlushAndAck(oneshot) (force a flush + notify; used right before reading the peer's resume-offset reply so the header has actually hit the wire).

4 MB socket buffers on both sides

Added socket2 dep. Both sender and receiver call set_send_buffer_size / set_recv_buffer_size to 4 MB after connect/accept. That's enough kernel buffering to keep the TCP window open across the short disk-read pauses the pipeline can't fully eliminate.

FILE_FLAG_SEQUENTIAL_SCAN on Windows

Source files now open with NTFS's "sequential access" hint — bigger read-ahead, smaller cache footprint per file. Roughly 2-3× on streamed-through tiny files. Falls back to plain read flag on non-Windows.

Bug fix

  • Trust list: trusted senders no longer make the accept dialog pop up while the transfer auto-runs in parallel. The receiver used to emit incoming://request even on the trusted path "so the UI could show it as in-flight"; the UI saw the event and opened the dialog. Now only the transfer://started event fires for trusted peers, which is enough to surface the live progress row.

Expected impact

On the user's repro (22 069 files / 7.95 GB / Wi-Fi LAN):

  • Before: ~28 MB/s average, ETA ~5 min
  • After: target 60–90 MB/s average

Single big file: unchanged (already at ~110 MB/s on gigabit).

Install (Windows)

Download LanBlaze_0.2.2_x64-setup.exe from the assets below. Per-user install (no UAC). Re-running over an existing install upgrades in place and keeps your settings + trusted devices + history.

Changes since 0.2.1

  • feat: güncellenmiş güvenilir gönderici kabul mantığı (6b6196d) — trust dialog fix + README badges/tech stack
  • perf(sender): pipeline disk read against socket write; +4MB SO_SNDBUF/RCVBUF; FILE_FLAG_SEQUENTIAL_SCAN (caeb7e1)