xref: /openbsd/lib/libssl/test/times (revision 0a5d6ede)
15b37fcf3Sryker
25b37fcf3SrykerMore number for the questions about SSL overheads....
35b37fcf3Sryker
4*0a5d6edeSdjmThe following numbers were generated on a Pentium pro 200, running Linux.
55b37fcf3SrykerThey give an indication of the SSL protocol and encryption overheads.
65b37fcf3Sryker
75b37fcf3SrykerThe program that generated them is an unreleased version of ssl/ssltest.c
85b37fcf3Srykerwhich is the SSLeay ssl protocol testing program.  It is a single process that
95b37fcf3Srykertalks both sides of the SSL protocol via a non-blocking memory buffer
105b37fcf3Srykerinterface.
115b37fcf3Sryker
125b37fcf3SrykerHow do I read this?  The protocol and cipher are reasonable obvious.
135b37fcf3SrykerThe next number is the number of connections being made.  The next is the
14*0a5d6edeSdjmnumber of bytes exchanged between the client and server side of the protocol.
155b37fcf3SrykerThis is the number of bytes that the client sends to the server, and then
165b37fcf3Srykerthe server sends back.  Because this is all happening in one process,
175b37fcf3Srykerthe data is being encrypted, decrypted, encrypted and then decrypted again.
185b37fcf3SrykerIt is a round trip of that many bytes.  Because the one process performs
195b37fcf3Srykerboth the client and server sides of the protocol and it sends this many bytes
205b37fcf3Srykereach direction, multiply this number by 4 to generate the number
215b37fcf3Srykerof bytes encrypted/decrypted/MACed.  The first time value is how many seconds
225b37fcf3Srykerelapsed doing a full SSL handshake, the second is the cost of one
235b37fcf3Srykerfull handshake and the rest being session-id reuse.
245b37fcf3Sryker
255b37fcf3SrykerSSLv2 RC4-MD5      1000 x      1   12.83s   0.70s
265b37fcf3SrykerSSLv3 NULL-MD5     1000 x      1   14.35s   1.47s
275b37fcf3SrykerSSLv3 RC4-MD5      1000 x      1   14.46s   1.56s
285b37fcf3SrykerSSLv3 RC4-MD5      1000 x      1   51.93s   1.62s 1024bit RSA
295b37fcf3SrykerSSLv3 RC4-SHA      1000 x      1   14.61s   1.83s
305b37fcf3SrykerSSLv3 DES-CBC-SHA  1000 x      1   14.70s   1.89s
315b37fcf3SrykerSSLv3 DES-CBC3-SHA 1000 x      1   15.16s   2.16s
325b37fcf3Sryker
335b37fcf3SrykerSSLv2 RC4-MD5      1000 x   1024   13.72s   1.27s
345b37fcf3SrykerSSLv3 NULL-MD5     1000 x   1024   14.79s   1.92s
355b37fcf3SrykerSSLv3 RC4-MD5      1000 x   1024   52.58s   2.29s 1024bit RSA
365b37fcf3SrykerSSLv3 RC4-SHA      1000 x   1024   15.39s   2.67s
375b37fcf3SrykerSSLv3 DES-CBC-SHA  1000 x   1024   16.45s   3.55s
385b37fcf3SrykerSSLv3 DES-CBC3-SHA 1000 x   1024   18.21s   5.38s
395b37fcf3Sryker
405b37fcf3SrykerSSLv2 RC4-MD5      1000 x  10240   18.97s   6.52s
415b37fcf3SrykerSSLv3 NULL-MD5     1000 x  10240   17.79s   5.11s
425b37fcf3SrykerSSLv3 RC4-MD5      1000 x  10240   20.25s   7.90s
435b37fcf3SrykerSSLv3 RC4-MD5      1000 x  10240   58.26s   8.08s 1024bit RSA
445b37fcf3SrykerSSLv3 RC4-SHA      1000 x  10240   22.96s  11.44s
455b37fcf3SrykerSSLv3 DES-CBC-SHA  1000 x  10240   30.65s  18.41s
465b37fcf3SrykerSSLv3 DES-CBC3-SHA 1000 x  10240   47.04s  34.53s
475b37fcf3Sryker
485b37fcf3SrykerSSLv2 RC4-MD5      1000 x 102400   70.22s  57.74s
495b37fcf3SrykerSSLv3 NULL-MD5     1000 x 102400   43.73s  31.03s
505b37fcf3SrykerSSLv3 RC4-MD5      1000 x 102400   71.32s  58.83s
515b37fcf3SrykerSSLv3 RC4-MD5      1000 x 102400  109.66s  59.20s 1024bit RSA
525b37fcf3SrykerSSLv3 RC4-SHA      1000 x 102400   95.88s  82.21s
535b37fcf3SrykerSSLv3 DES-CBC-SHA  1000 x 102400  173.22s 160.55s
545b37fcf3SrykerSSLv3 DES-CBC3-SHA 1000 x 102400  336.61s 323.82s
555b37fcf3Sryker
565b37fcf3SrykerWhat does this all mean?  Well for a server, with no session-id reuse, with
575b37fcf3Srykera transfer size of 10240 bytes, using RC4-MD5 and a 512bit server key,
58*0a5d6edeSdjma Pentium pro 200 running Linux can handle the SSLv3 protocol overheads of
595b37fcf3Srykerabout 49 connections a second.  Reality will be quite different :-).
605b37fcf3Sryker
61*0a5d6edeSdjmRemember the first number is 1000 full ssl handshakes, the second is
625b37fcf3Sryker1 full and 999 with session-id reuse.  The RSA overheads for each exchange
635b37fcf3Srykerwould be one public and one private operation, but the protocol/MAC/cipher
645b37fcf3Srykercost would be quite similar in both the client and server.
655b37fcf3Sryker
665b37fcf3Srykereric (adding numbers to speculation)
675b37fcf3Sryker
685b37fcf3Sryker--- Appendix ---
695b37fcf3Sryker- The time measured is user time but these number a very rough.
705b37fcf3Sryker- Remember this is the cost of both client and server sides of the protocol.
71ec3c43edSjmc- The TCP/kernel overhead of connection establishment is normally the
725b37fcf3Sryker  killer in SSL.  Often delays in the TCP protocol will make session-id
735b37fcf3Sryker  reuse look slower that new sessions, but this would not be the case on
745b37fcf3Sryker  a loaded server.
75*0a5d6edeSdjm- The TCP round trip latencies, while slowing individual connections,
765b37fcf3Sryker  would have minimal impact on throughput.
775b37fcf3Sryker- Instead of sending one 102400 byte buffer, one 8k buffer is sent until
785b37fcf3Sryker- the required number of bytes are processed.
79*0a5d6edeSdjm- The SSLv3 connections were actually SSLv2 compatible SSLv3 headers.
805b37fcf3Sryker- A 512bit server key was being used except where noted.
815b37fcf3Sryker- No server key verification was being performed on the client side of the
825b37fcf3Sryker  protocol.  This would slow things down very little.
835b37fcf3Sryker- The library being used is SSLeay 0.8.x.
84*0a5d6edeSdjm- The normal measuring system was commands of the form
855b37fcf3Sryker  time ./ssltest -num 1000 -bytes 102400 -cipher DES-CBC-SHA -reuse
865b37fcf3Sryker  This modified version of ssltest should be in the next public release of
875b37fcf3Sryker  SSLeay.
885b37fcf3Sryker
89*0a5d6edeSdjmThe general cipher performance number for this platform are
905b37fcf3Sryker
915b37fcf3SrykerSSLeay 0.8.2a 04-Sep-1997
925b37fcf3Srykerbuilt on Fri Sep  5 17:37:05 EST 1997
935b37fcf3Srykeroptions:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) idea(int) blowfish(ptr2)
945b37fcf3SrykerC flags:gcc -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall -Wuninitialized
955b37fcf3SrykerThe 'numbers' are in 1000s of bytes per second processed.
965b37fcf3Srykertype              8 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
975b37fcf3Srykermd2               131.02k      368.41k      500.57k      549.21k      566.09k
985b37fcf3Srykermdc2              535.60k      589.10k      595.88k      595.97k      594.54k
995b37fcf3Srykermd5              1801.53k     9674.77k    17484.03k    21849.43k    23592.96k
1005b37fcf3Srykersha              1261.63k     5533.25k     9285.63k    11187.88k    11913.90k
1015b37fcf3Srykersha1             1103.13k     4782.53k     7933.78k     9472.34k    10070.70k
1025b37fcf3Srykerrc4             10722.53k    14443.93k    15215.79k    15299.24k    15219.59k
1035b37fcf3Srykerdes cbc          3286.57k     3827.73k     3913.39k     3931.82k     3926.70k
1045b37fcf3Srykerdes ede3         1443.50k     1549.08k     1561.17k     1566.38k     1564.67k
1055b37fcf3Srykeridea cbc         2203.64k     2508.16k     2538.33k     2543.62k     2547.71k
1065b37fcf3Srykerrc2 cbc          1430.94k     1511.59k     1524.82k     1527.13k     1523.33k
1075b37fcf3Srykerblowfish cbc     4716.07k     5965.82k     6190.17k     6243.67k     6234.11k
1085b37fcf3Sryker                  sign    verify
1095b37fcf3Srykerrsa  512 bits   0.0100s   0.0011s
1105b37fcf3Srykerrsa 1024 bits   0.0451s   0.0012s
1115b37fcf3Srykerrsa 2048 bits   0.2605s   0.0086s
1125b37fcf3Srykerrsa 4096 bits   1.6883s   0.0302s
1135b37fcf3Sryker
114