Test Rig

Baseline hardware used for the published numbers. Update this with your own lab specs for transparency.

Hardware

  • CPU: i5-12600K
  • Memory: 32 GB DDR4
  • Disk: PCIe 4.0 NVMe SSD
  • NIC: 1 Gbps LAN
  • OS: Windows 11 Pro 23H2

Software

  • SLightSFTP v1.1.0 Desktop mode
  • Clients: WinSCP 6.3.3, FileZilla 3.66
  • Antivirus: Windows Defender (default)
  • Idle timeout: 5 minutes (default)
  • Network: 1 Gbps full-duplex switched LAN

Sample Results

Scenario Throughput Notes
Single SFTP upload (1 GB) 410 Mbps Disk-bound; CPU ~18%
4x parallel SFTP uploads (1 GB each) 720 Mbps agg. CPU ~42%, stable RAM
FTP download burst (1000 x 1 MB) 560 Mbps Control channel stable
Authentication throughput 800 logins/min Logging enabled
Latency: single file stat ~12 ms p50 Local LAN; idle cache

Replace these numbers with your own tests to reflect your environment.

Methodology

Parameters

  • No compression; SFTP using AES-256
  • Default idle timeout kept
  • Passive FTP ports predefined at firewall
  • Logs retained; CSV exported post-run
  • Stats captured with Windows Resource Monitor

Steps

  1. Warm disk cache with a pilot transfer
  2. Run scripted uploads/downloads
  3. Capture CPU, RAM, disk, network stats
  4. Export activity logs for audit
  5. Repeat with AV exclusion to compare

Tuning Checklist

Server

  • Exclude data directory from real-time AV
  • Use SSD/NVMe for virtual path storage
  • Keep ports static; avoid conflicts
  • Monitor idle timeout effectiveness
  • Pin process priority to Normal (default)

Network

  • Prefer wired over Wi-Fi
  • Set passive FTP range and open in firewall
  • Co-locate clients and server on same switch for tests
  • Avoid VPNs for baseline measurements

Clients

  • Use latest WinSCP/FileZilla versions
  • Parallelize uploads for better throughput
  • Use key-based auth to cut login overhead
  • Disable client-side speed limits

Command Examples

  • psftp user@host -b script.txt for scripted SFTP tests
  • curl ftp://user:pass@host:21/file -o NUL for FTP download check
  • Measure-Command { ./transfer.ps1 } to time runs