0.45 GPL (GNU General Public License)    
2.6/5 18
dkftpbench is an FTP benchmark program inspired by SPECweb99.




dkftpbench application is an FTP benchmark program inspired by SPECweb99. The result of the benchmark is a number-of-simultaneous-users rating; after running the benchmark properly, you have a good idea how many simultaneous dialup clients a server can support. The target bandwidth per client is set at 28.8 kilobits/second to model dialup users; this is important for servers on the real Internet, which often serve thousands of clients on only 10 MBits/sec of bandwidth.

The final result of the benchmark is "the number of simultaneous 28.8 kilobits/second dialup users". To estimate this number, the benchmark starts up a new simulated user as soon as the last one has finished connecting. It stops increasing the number of users when one fails to connect, fails to maintain the desired bandwidth, or the limit specified by the -n option is reached. It runs the simulated users until the amount of time specified by the -t option has elapsed since the last simulated user birth or death; the final score is the number of users still alive at the end.

Here are some key features of "dkftpbench":

Compiles and runs on Linux, FreeBSD, and Solaris (or did, last I tried)
fetches many files in parallel
waits for each connect to finish (and then a bit) before starting next one; slows down to < 1 connect/second when it reaches 75% of desired number of users. This spreads out user activity more evenly.
checks bandwidth continuously during each file fetch, stops adding users if any fetch too slow
throttles each fetch to use only the specified bandwidth
search for the max number of supported users
Displays verbose error message when any user fails
Aborts if it detects the client system running out of resources
Aborts if connecting to the server takes > 5 seconds
Aborts if it takes longer than 5 seconds to get first packet of a file
Uses new Poller class for scalability; you can specify which Poller to use on the commandline
Supports slow datarates (before, it only handles rates above 80kbits/sec on some systems)
Lets you set how picky it is about datarates (before, its 'must be faster than' threshold was fixed at 3/4 the target bandwidth)
Supports alternative readiness notification methods like O_ASYNC and O_ONESIGFD
Provided both as a standalone executable, and as a Corba object. (Thanks to for the Corba autoconf macros.
Switches to BINARY mode after login. (The client API lets you choose; edit to skip the START_TYPE state if you want to use ASCII.)


After unpacking the sources, configure them for your system with the command


This will generate Makefile from

To make sure the sources arrived intact and work properly on your system, type

make check

It will build all unit tests, and fail if any unit test fails. You must be connected to the Internet, as this will try to download a file from

To build the system tuning tool dklimits, type

make dklimits

Run it on both the client and the server machine; make sure that the number of files it can open is about three times the desired number of users, and that the number of ports it can bind is higher than the desired number of users. You should not be running X Windows or any other programs on the client and server machines when running the benchmark.

To build the benchmark, type


This produces the executable 'dkftpbench', the tuning program 'dklimits', and a bunch of unit tests (executables with names ending in _test) that you can ignore for now.

Here's a simple use of dkftpbench:

./dkftpbench -n1 -t15 -v

This tells bench to simulate one user fetching the default file from repeatedly, and stop after fifteen seconds. The program produces this output:

Option values: host name of ftp server
-P21 port number of ftp server
-n1 number of users
-t15 length of run (in seconds)
-b3600 desired bandwidth (in bytes per second)
-uanonymous user name
-probouser@ user password
-fusenet/rec.juggling/juggling.FAQ.Z file to fetch
-m1500 bytes per 'packet'
-v1 verbosity
1 users
User0: fetching 22708 bytes took 6.530000 seconds, 3477 bytes per second
User0: fetching 22708 bytes took 6.530000 seconds, 3477 bytes per second
Test over. 1 users left standing.
Last updated on June 26th, 2007

0 User reviews so far.