Benchmarks

Benchmarks using pyftpd's benchmark script and procedures.

Results

ftpd 0.17.0

(starting with 14.9M of memory being used)
STOR (client -> server)                              120.75 MB/sec  14.9M
RETR (server -> client)                              741.77 MB/sec  22.7M
200 concurrent clients (connect, login)                0.20 secs    19.2M
STOR (1 file with 200 idle clients)                  144.77 MB/sec  19.2M
RETR (1 file with 200 idle clients)                  542.86 MB/sec  27.1M
200 concurrent clients (RETR 10.0M file)               6.38 secs    32.1M
200 concurrent clients (STOR 10.0M file)               2.76 secs    21.7M
200 concurrent clients (QUIT)                          0.03 secs

pyftpd 1.4.0

(starting with 4.2M of memory being used)
STOR (client -> server)                              127.62 MB/sec  4.2M
RETR (server -> client)                             1170.82 MB/sec  4.3M
200 concurrent clients (connect, login)                2.53 secs    4.8M
STOR (1 file with 200 idle clients)                  113.38 MB/sec  4.9M
RETR (1 file with 200 idle clients)                 1139.89 MB/sec  4.9M
200 concurrent clients (RETR 10.0M file)               2.55 secs    5.6M
200 concurrent clients (STOR 10.0M file)               2.03 secs    5.7M
200 concurrent clients (QUIT)                          0.02 secs

proftpd 1.3.5rc4

(starting with 1.4M of memory being used)
STOR (client -> server)                              117.59 MB/sec  3.2M
RETR (server -> client)                             1318.32 MB/sec  3.2M
200 concurrent clients (connect, login)               12.20 secs    366.4M
STOR (1 file with 200 idle clients)                  123.82 MB/sec  368.3M
RETR (1 file with 200 idle clients)                 1302.86 MB/sec  368.3M
200 concurrent clients (RETR 10.0M file)               2.33 secs    366.4M
200 concurrent clients (STOR 10.0M file)               2.76 secs    366.4M
200 concurrent clients (QUIT)                          0.00 secs

Notes

  • Ftpd's fast time on the login test, compared to proftpd and pyftpdlib, is probably a result of it not doing PAM authentication whereas the other ftpd servers are. It is not an apples-to-apples comparison.

  • The only benchmark for which ftpd beats the competition is the single-client STOR.

Setup

Machine

  • Intel(R) Core(TM) i5-2500 CPU @ 3.30GHz (4 cores)
  • Python 3.4.1rc1
  • pyftpd 1.4.0
  • ruby 2.1.1p76 (2014-02-24 revision 45161) [i686-linux]
  • Linux 3.0.0-1-686-pae #1 SMP Sat Aug 27 16:41:03 UTC 2011 i686 GNU/Linux

Benchmark command

bench.py needs psutil. Under Debian, install python-psutil.

pyftpdlib-1.0.1/test$ python3 bench.py  -u <USER> -p <PASS> -H localhost -P <PORT> -b all -n 200 -k <PID>

Proftpd

/etc/proftpd/proftpd.conf:

MaxInstances        2000

Ftpd

$ bundle exec examples/example.rb -p 2222 -U bench -P bench

Pyftpd

pyftpdlib-1.4.0/demo$ sudo python ./unix_daemon.py 2>/dev/null