-
-
Notifications
You must be signed in to change notification settings - Fork 659
Performance
The following table shows the typical transfer speeds on various different Client CPUs, using both sync and async FTP clients.
FluentFTP Class | Application | Download speed | Upload speed |
---|---|---|---|
FtpClient |
WinForms | 111 MB/sec | 80 MB/sec |
AsyncFtpClient |
WinForms | 111 MB/sec | 80 MB/sec |
FtpClient |
Console | 111 MB/sec | 80 MB/sec |
AsyncFtpClient |
Console | 60 MB/sec | 80 MB/sec |
FluentFTP Class | Application | Download speed | Upload speed |
---|---|---|---|
FtpClient |
WinForms | ||
AsyncFtpClient |
WinForms | ||
FtpClient |
Console | ||
AsyncFtpClient |
Console |
These are the test conditions that were used to measure the file transfer speed.
- Network transfer rate: 1Gb/s
- Server side CPU is one core of a Core I9-10900K writing to / reading from a 1500MB/s SSD.
- Server is proFTPd on Debian 11.
- Client side, unless otherwise stated is Windows 10, writing to / reading from a 1500MB/s SSD.
- Downloading a 1GB file filled with random bytes.
- Winforms or Console Application using FluentFTP V50+, Release type build, .NET 6
- Using SslStream (Performance of FluentFTP.GnuTLS was equivalent in all cases)
While the influence of network transfer speed is a major factor in the performance of large data transfers, the transfer of very many small files will profit also from overall network latency and round-trip times, as the command-response sequences on the control connection become a bottleneck.
The server must of course be able to supply or ingest data fast enough fully utilize the available network resources.
The client must also not be hampered by a slow or busy CPU whilst the IO performance will seriously slow down transfers.
No, FTP(S) was designed to have virtually no protocol overhead on the data transfer itself. No overhead, that is, other than that imposed by Ethernet, as well as IP and TCP.
Theoretical maximum transfer rate on a 1Gb/s ethernet connection, taking all ethernet frame headers into account would be 118MB/sec (even 123MB/s using jumbo frames = 99% of 1Gb/s).
Now take into account IP / TCP headers, which can be minimised by avoiding fragmentation, using jumbo packets, avoiding resends, delaying ACKs and other measures. This can be estimated at about 2.8% of the available bandwidth, so we arrive at a speed of about 114MB/sec.
- Auto Connection
- Auto Reconnection
- FTP(S) Connection
- FTP(S) Connection using GnuTLS
- FTPS Proxies
- Custom Servers
- Custom Commands
- v40 Migration Guide