Hi, in my opinion, there is a problem with the -multi option of "openssl speed". While it works fine for small numbers, it does not work as expected for larger numbers: When I specify "-multi 128", the speed program forks 128 child processes which all start working immediately. However, after a number of childs have been forked (let's say 50), there are already #(childs forked)+1 (e.g. 51) processes competing for the CPU. Thus, the father process will not be able to fork all the processes quickly enough, but rather takes a long period. The consequence is, that several encryption processes seem to finish even before the last one was forked (at least for the default interval of 3 seconds). Thus, there are never 128 processes at once, whereas the very first and the very last child processes will deliver the best results. To change this, my patch makes apps/speed.c use the second pipe created at forking the child processes for each child (hence the name). After forking, the child executes a read(), waiting for input on the pipe from the father process. After the father forked all childs, it has to write one byte of data per child process to make the child active, which is rather quick compared to forking. In order to avoid race conditions, I've added a sleep() to the father process which ensures that all childs will be listening on the pipe before sending the starting signal from the father process.
I find this patch useful and I want to make it available to other users. To use it you can apply it with "patch -p0 < twopipe.patch" from the root of the source directory. After this, you must set -DJS_TWOPIPE for gcc to enable the patch. Without this flag nothing is changed. If you are interested in more verbose output, you can also use -DJS_TWOPIPE_VERBOSE, which automatically adds -DJS_TWOPIPE as well. I've tested it with 0.9.7a, 0.9.7d, 0.9.7j, and the current CVS release. If you've any comments please mail me. Regards, Jan ______________________________________________________________________ OpenSSL Project http://www.openssl.org Development Mailing List [email protected] Automated List Manager [EMAIL PROTECTED]
