On Wed, Mar 01, 2000 at 11:57:27AM +0100, Andy Polyakov wrote: > Well, one can also eliminate code which is never referenced (can be > explicitely added with +Oprocelim at +O3 level) and rearrange code > snippets in order to minimize page faults and tlb misses. There is this nice +Oall switch, that will enable several (even aggressive) optimizations (including +Oprocelim). I did apply it and OpenSSL did not break (neither did the compiler :-). [Hint to fix DSA hang problem] After having applied the patch and recompiled the necessary items, I am now proud owner of both a +O3 +Oall and a +O4 +Oall share library set. I have attached the outputs of "openssl speed". I did run it more than once on an unloaded HP9000 Series 700 Model C160 (they really know how to name machines, don't they :-), a 160MHz PA8000 box (256MB RAM, so openssl speed won't be influenced). The results were perfectly reproducable. As you can see, the +O4 advantage is not that large. It makes sense with regard to your comment and the code structuring. It contradicts my experience with "normal" code (e.g. Finite Elements) where +O2 -> +O3 -> +O4 -> (profile based optimization) typically yields around 10-15% per level. This rule of thumb is actually shared by other people running HP-UX. As you will see, +O4 is for some test even slower than +O3. I have never seen that before. And I run HP-UX for roughly a decade and 10.X with this +O4 optimization since 96 :-) > > There is another warning about building shared libraries > > with optimization > +O2 anyway :-) > Which is... Just curious... Ok, I was lazy yesterday evening. And the warning is: .... (tattoo) ucomp : Warning at line 0 : Do not use optimization levels higher than 2 to generate a shared library if a user of that library may redefine a routine within that library (8006) It means, that within the shared library optimizations may take place (like function inlining) such that redefining routines in you program will not affect library internal routines as expected. If you don't do this (and as far as I have seen, OpenSSL based applications typically don't do it), you can ignore this warning. As for the library sizes: The ".a" libraries are of same size, since they are compiled +O3 anyway. The "pic.a" libraries at +O4 are only pre-compiled but not optimized, yet. The .so.1 libraries are the actual shared libraries build with +O4 or +O3, respectively. # ls -al /usr/local/ssl/lib total 21240 drwxr-xr-x 2 root sys 1024 Mar 1 14:49 . drwxr-xr-x 9 root sys 1024 Feb 28 19:30 .. -rw-r--r-- 1 root sys 1782156 Feb 28 20:08 libcrypto.a lrwxr-xr-x 1 root sys 14 Mar 1 14:49 libcrypto.sl -> libcrypto.so.1 -r-xr-xr-x 1 root sys 2823051 Feb 28 18:52 libcrypto.so.1 -r--r--r-- 1 root sys 4490092 Feb 28 17:56 libcrypto_pic.a -rw-r--r-- 1 root sys 310820 Feb 28 20:11 libssl.a lrwxr-xr-x 1 root sys 11 Mar 1 14:49 libssl.sl -> libssl.so.1 -r-xr-xr-x 1 root sys 341310 Feb 28 18:55 libssl.so.1 -r--r--r-- 1 root sys 1055480 Feb 28 17:57 libssl_pic.a # ls -al /usr/local/ssl.O3/lib total 11976 drwxr-xr-x 2 root sys 1024 Mar 1 14:41 . drwxr-xr-x 9 root sys 1024 Mar 1 14:32 .. -rw-r--r-- 1 root sys 1782152 Mar 1 14:32 libcrypto.a lrwxr-xr-x 1 root sys 14 Mar 1 14:41 libcrypto.sl -> libcrypto.so.1 -r-xr-xr-x 1 root sys 1432628 Mar 1 13:38 libcrypto.so.1 -r--r--r-- 1 root sys 1916108 Mar 1 13:35 libcrypto_pic.a -rw-r--r-- 1 root sys 310820 Mar 1 14:32 libssl.a lrwxr-xr-x 1 root sys 11 Mar 1 14:41 libssl.sl -> libssl.so.1 -r-xr-xr-x 1 root sys 283806 Mar 1 13:38 libssl.so.1 -r--r--r-- 1 root sys 341268 Mar 1 13:38 libssl_pic.a Best regards, Lutz -- Lutz Jaenicke [EMAIL PROTECTED] BTU Cottbus http://www.aet.TU-Cottbus.DE/personen/jaenicke/ Lehrstuhl Allgemeine Elektrotechnik Tel. +49 355 69-4129 Universitaetsplatz 3-4, D-03044 Cottbus Fax. +49 355 69-4153
Doing md2 for 3s on 8 size blocks: 53239 md2's in 2.91s Doing md2 for 3s on 64 size blocks: 19020 md2's in 2.90s Doing md2 for 3s on 256 size blocks: 6526 md2's in 2.91s Doing md2 for 3s on 1024 size blocks: 1800 md2's in 2.92s Doing md2 for 3s on 8192 size blocks: 232 md2's in 2.92s Doing mdc2 for 3s on 8 size blocks: 177706 mdc2's in 2.91s Doing mdc2 for 3s on 64 size blocks: 25122 mdc2's in 2.91s Doing mdc2 for 3s on 256 size blocks: 6136 mdc2's in 2.82s Doing mdc2 for 3s on 1024 size blocks: 1488 mdc2's in 2.72s Doing mdc2 for 3s on 8192 size blocks: 195 mdc2's in 2.84s Doing md5 for 3s on 8 size blocks: 506120 md5's in 2.87s Doing md5 for 3s on 64 size blocks: 318591 md5's in 2.91s Doing md5 for 3s on 256 size blocks: 165615 md5's in 2.91s Doing md5 for 3s on 1024 size blocks: 57362 md5's in 2.91s Doing md5 for 3s on 8192 size blocks: 8045 md5's in 2.91s Doing hmac(md5) for 3s on 8 size blocks: 190429 hmac(md5)'s in 2.88s Doing hmac(md5) for 3s on 64 size blocks: 157110 hmac(md5)'s in 2.91s Doing hmac(md5) for 3s on 256 size blocks: 108463 hmac(md5)'s in 2.91s Doing hmac(md5) for 3s on 1024 size blocks: 47828 hmac(md5)'s in 2.88s Doing hmac(md5) for 3s on 8192 size blocks: 7830 hmac(md5)'s in 2.90s Doing sha1 for 3s on 8 size blocks: 442817 sha1's in 2.92s Doing sha1 for 3s on 64 size blocks: 273196 sha1's in 2.87s Doing sha1 for 3s on 256 size blocks: 139108 sha1's in 2.91s Doing sha1 for 3s on 1024 size blocks: 44705 sha1's in 2.79s Doing sha1 for 3s on 8192 size blocks: 6293 sha1's in 2.83s Doing rmd160 for 3s on 8 size blocks: 283057 rmd160's in 2.86s Doing rmd160 for 3s on 64 size blocks: 162013 rmd160's in 2.87s Doing rmd160 for 3s on 256 size blocks: 70321 rmd160's in 2.80s Doing rmd160 for 3s on 1024 size blocks: 21685 rmd160's in 2.78s Doing rmd160 for 3s on 8192 size blocks: 3053 rmd160's in 2.89s Doing rc4 for 3s on 8 size blocks: 3376529 rc4's in 2.93s Doing rc4 for 3s on 64 size blocks: 808272 rc4's in 2.93s Doing rc4 for 3s on 256 size blocks: 223012 rc4's in 2.89s Doing rc4 for 3s on 1024 size blocks: 53751 rc4's in 2.73s Doing rc4 for 3s on 8192 size blocks: 7206 rc4's in 2.89s Doing des cbc for 3s on 8 size blocks: 801212 des cbc's in 2.78s Doing des cbc for 3s on 64 size blocks: 124777 des cbc's in 2.85s Doing des cbc for 3s on 256 size blocks: 32213 des cbc's in 2.88s Doing des cbc for 3s on 1024 size blocks: 8222 des cbc's in 2.92s Doing des cbc for 3s on 8192 size blocks: 1023 des cbc's in 2.90s Doing des ede3 for 3s on 8 size blocks: 356797 des ede3's in 2.92s Doing des ede3 for 3s on 64 size blocks: 48723 des ede3's in 2.91s Doing des ede3 for 3s on 256 size blocks: 12311 des ede3's in 2.91s Doing des ede3 for 3s on 1024 size blocks: 3089 des ede3's in 2.92s Doing des ede3 for 3s on 8192 size blocks: 369 des ede3's in 2.79s Doing idea cbc for 3s on 8 size blocks: 415913 idea cbc's in 2.87s Doing idea cbc for 3s on 64 size blocks: 58369 idea cbc's in 2.82s Doing idea cbc for 3s on 256 size blocks: 14799 idea cbc's in 2.83s Doing idea cbc for 3s on 1024 size blocks: 3224 idea cbc's in 2.45s Doing idea cbc for 3s on 8192 size blocks: 459 idea cbc's in 2.79s Doing rc2 cbc for 3s on 8 size blocks: 769224 rc2 cbc's in 2.91s Doing rc2 cbc for 3s on 64 size blocks: 102450 rc2 cbc's in 2.89s Doing rc2 cbc for 3s on 256 size blocks: 26091 rc2 cbc's in 2.90s Doing rc2 cbc for 3s on 1024 size blocks: 6469 rc2 cbc's in 2.88s Doing rc2 cbc for 3s on 8192 size blocks: 810 rc2 cbc's in 2.88s Doing rc5-32/12 cbc for 3s on 8 size blocks: 1492622 rc5-32/12 cbc's in 2.90s Doing rc5-32/12 cbc for 3s on 64 size blocks: 266804 rc5-32/12 cbc's in 2.77s Doing rc5-32/12 cbc for 3s on 256 size blocks: 73057 rc5-32/12 cbc's in 2.87s Doing rc5-32/12 cbc for 3s on 1024 size blocks: 18867 rc5-32/12 cbc's in 2.92s Doing rc5-32/12 cbc for 3s on 8192 size blocks: 2339 rc5-32/12 cbc's in 2.89s Doing blowfish cbc for 3s on 8 size blocks: 1446705 blowfish cbc's in 2.87s Doing blowfish cbc for 3s on 64 size blocks: 259342 blowfish cbc's in 2.87s Doing blowfish cbc for 3s on 256 size blocks: 67962 blowfish cbc's in 2.86s Doing blowfish cbc for 3s on 1024 size blocks: 17242 blowfish cbc's in 2.86s Doing blowfish cbc for 3s on 8192 size blocks: 2145 blowfish cbc's in 2.84s Doing cast cbc for 3s on 8 size blocks: 1406853 cast cbc's in 2.88s Doing cast cbc for 3s on 64 size blocks: 246379 cast cbc's in 2.87s Doing cast cbc for 3s on 256 size blocks: 65242 cast cbc's in 2.91s Doing cast cbc for 3s on 1024 size blocks: 16546 cast cbc's in 2.91s Doing cast cbc for 3s on 8192 size blocks: 2048 cast cbc's in 2.87s Doing 512 bit private rsa's for 10s: 308 512 bit private RSA's in 9.56s Doing 512 bit public rsa's for 10s: 2718 512 bit public RSA's in 9.52s Doing 1024 bit private rsa's for 10s: 48 1024 bit private RSA's in 9.42s Doing 1024 bit public rsa's for 10s: 815 1024 bit public RSA's in 9.65s Doing 2048 bit private rsa's for 10s: 8 2048 bit private RSA's in 10.68s Doing 2048 bit public rsa's for 10s: 225 2048 bit public RSA's in 9.65s Doing 4096 bit private rsa's for 10s: 2 4096 bit private RSA's in 19.21s Doing 4096 bit public rsa's for 10s: 61 4096 bit public RSA's in 9.75s Doing 512 bit sign dsa's for 10s: 289 512 bit DSA signs in 9.69s Doing 512 bit verify dsa's for 10s: 234 512 bit DSA verify in 9.70s Doing 1024 bit sign dsa's for 10s: 87 1024 bit DSA signs in 9.74s Doing 1024 bit verify dsa's for 10s: 70 1024 bit DSA verify in 9.79s Doing 2048 bit sign dsa's for 10s: 24 2048 bit DSA signs in 9.64s Doing 2048 bit verify dsa's for 10s: 20 2048 bit DSA verify in 9.72s OpenSSL 0.9.5 28 Feb 2000 built on: Wed Mar 1 12:57:51 MET 2000 options:bn(64,32) md2(int) rc4(ptr,int) des(ptr,risc1,16,long) idea(int) blowfish(idx) compiler: cc -DTHREADS +z -D_REENTRANT +Oall +DAportable +w1 -Ae +O3 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY The 'numbers' are in 1000s of bytes per second processed. type 8 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes md2 146.36k 419.75k 574.11k 631.23k 650.87k mdc2 488.54k 552.51k 557.03k 560.19k 562.48k md5 1410.79k 7006.81k 14569.57k 20185.12k 22647.64k hmac(md5) 528.97k 3455.34k 9541.76k 17005.51k 22118.40k sha1 1213.20k 6092.18k 12237.68k 16407.86k 18216.34k rmd160 791.77k 3612.83k 6429.35k 7987.57k 8654.04k rc4 9219.19k 17655.09k 19754.70k 20161.55k 20426.14k des cbc 2305.65k 2802.01k 2863.38k 2883.33k 2889.80k des ede3 977.53k 1071.57k 1083.03k 1083.27k 1083.46k idea cbc 1159.34k 1324.69k 1338.71k 1347.50k 1347.72k rc2 cbc 2114.71k 2268.79k 2303.21k 2300.09k 2304.00k rc5-32/12 cbc 4117.58k 6164.42k 6516.58k 6616.37k 6630.13k blowfish cbc 4032.63k 5783.24k 6083.31k 6173.36k 6187.27k cast cbc 3907.93k 5494.17k 5739.50k 5822.37k 5845.72k sign verify sign/s verify/s rsa 512 bits 0.0310s 0.0035s 32.2 285.5 rsa 1024 bits 0.1962s 0.0118s 5.1 84.5 rsa 2048 bits 1.3350s 0.0429s 0.7 23.3 rsa 4096 bits 9.6050s 0.1598s 0.1 6.3 sign verify sign/s verify/s dsa 512 bits 0.0335s 0.0415s 29.8 24.1 dsa 1024 bits 0.1120s 0.1399s 8.9 7.2 dsa 2048 bits 0.4017s 0.4860s 2.5 2.1
Doing md2 for 3s on 8 size blocks: 53285 md2's in 2.84s Doing md2 for 3s on 64 size blocks: 19236 md2's in 2.92s Doing md2 for 3s on 256 size blocks: 6642 md2's in 2.97s Doing md2 for 3s on 1024 size blocks: 1745 md2's in 2.84s Doing md2 for 3s on 8192 size blocks: 231 md2's in 2.92s Doing mdc2 for 3s on 8 size blocks: 187726 mdc2's in 2.87s Doing mdc2 for 3s on 64 size blocks: 24979 mdc2's in 2.73s Doing mdc2 for 3s on 256 size blocks: 6797 mdc2's in 2.93s Doing mdc2 for 3s on 1024 size blocks: 1686 mdc2's in 2.90s Doing mdc2 for 3s on 8192 size blocks: 199 mdc2's in 2.74s Doing md5 for 3s on 8 size blocks: 551258 md5's in 2.93s Doing md5 for 3s on 64 size blocks: 338412 md5's in 2.93s Doing md5 for 3s on 256 size blocks: 167047 md5's in 2.84s Doing md5 for 3s on 1024 size blocks: 57662 md5's in 2.90s Doing md5 for 3s on 8192 size blocks: 8001 md5's in 2.89s Doing hmac(md5) for 3s on 8 size blocks: 205848 hmac(md5)'s in 2.84s Doing hmac(md5) for 3s on 64 size blocks: 170905 hmac(md5)'s in 2.93s Doing hmac(md5) for 3s on 256 size blocks: 112490 hmac(md5)'s in 2.87s Doing hmac(md5) for 3s on 1024 size blocks: 48748 hmac(md5)'s in 2.87s Doing hmac(md5) for 3s on 8192 size blocks: 7912 hmac(md5)'s in 2.92s Doing sha1 for 3s on 8 size blocks: 442409 sha1's in 2.91s Doing sha1 for 3s on 64 size blocks: 262362 sha1's in 2.76s Doing sha1 for 3s on 256 size blocks: 130985 sha1's in 2.76s Doing sha1 for 3s on 1024 size blocks: 40464 sha1's in 2.55s Doing sha1 for 3s on 8192 size blocks: 6445 sha1's in 2.92s Doing rmd160 for 3s on 8 size blocks: 302819 rmd160's in 2.93s Doing rmd160 for 3s on 64 size blocks: 166802 rmd160's in 2.88s Doing rmd160 for 3s on 256 size blocks: 75309 rmd160's in 2.95s Doing rmd160 for 3s on 1024 size blocks: 23163 rmd160's in 2.94s Doing rmd160 for 3s on 8192 size blocks: 3018 rmd160's in 2.86s Doing rc4 for 3s on 8 size blocks: 3355071 rc4's in 2.92s Doing rc4 for 3s on 64 size blocks: 782777 rc4's in 2.84s Doing rc4 for 3s on 256 size blocks: 155973 rc4's in 2.40s Doing rc4 for 3s on 1024 size blocks: 55248 rc4's in 2.79s Doing rc4 for 3s on 8192 size blocks: 7045 rc4's in 2.83s Doing des cbc for 3s on 8 size blocks: 761735 des cbc's in 2.76s Doing des cbc for 3s on 64 size blocks: 122038 des cbc's in 2.92s Doing des cbc for 3s on 256 size blocks: 31155 des cbc's in 2.90s Doing des cbc for 3s on 1024 size blocks: 7852 des cbc's in 2.91s Doing des cbc for 3s on 8192 size blocks: 985 des cbc's in 2.91s Doing des ede3 for 3s on 8 size blocks: 353273 des ede3's in 2.93s Doing des ede3 for 3s on 64 size blocks: 48957 des ede3's in 2.96s Doing des ede3 for 3s on 256 size blocks: 12197 des ede3's in 2.93s Doing des ede3 for 3s on 1024 size blocks: 3071 des ede3's in 2.94s Doing des ede3 for 3s on 8192 size blocks: 376 des ede3's in 2.88s Doing idea cbc for 3s on 8 size blocks: 383108 idea cbc's in 2.72s Doing idea cbc for 3s on 64 size blocks: 54605 idea cbc's in 2.86s Doing idea cbc for 3s on 256 size blocks: 13410 idea cbc's in 2.79s Doing idea cbc for 3s on 1024 size blocks: 3504 idea cbc's in 2.91s Doing idea cbc for 3s on 8192 size blocks: 434 idea cbc's in 2.88s Doing rc2 cbc for 3s on 8 size blocks: 744034 rc2 cbc's in 2.94s Doing rc2 cbc for 3s on 64 size blocks: 96184 rc2 cbc's in 2.93s Doing rc2 cbc for 3s on 256 size blocks: 24020 rc2 cbc's in 2.93s Doing rc2 cbc for 3s on 1024 size blocks: 6000 rc2 cbc's in 2.93s Doing rc2 cbc for 3s on 8192 size blocks: 756 rc2 cbc's in 2.95s Doing rc5-32/12 cbc for 3s on 8 size blocks: 1437931 rc5-32/12 cbc's in 2.94s Doing rc5-32/12 cbc for 3s on 64 size blocks: 246532 rc5-32/12 cbc's in 2.85s Doing rc5-32/12 cbc for 3s on 256 size blocks: 67511 rc5-32/12 cbc's in 2.96s Doing rc5-32/12 cbc for 3s on 1024 size blocks: 16867 rc5-32/12 cbc's in 2.93s Doing rc5-32/12 cbc for 3s on 8192 size blocks: 2121 rc5-32/12 cbc's in 2.93s Doing blowfish cbc for 3s on 8 size blocks: 1392104 blowfish cbc's in 2.92s Doing blowfish cbc for 3s on 64 size blocks: 242212 blowfish cbc's in 2.95s Doing blowfish cbc for 3s on 256 size blocks: 63279 blowfish cbc's in 2.96s Doing blowfish cbc for 3s on 1024 size blocks: 15709 blowfish cbc's in 2.90s Doing blowfish cbc for 3s on 8192 size blocks: 1965 blowfish cbc's in 2.90s Doing cast cbc for 3s on 8 size blocks: 1328635 cast cbc's in 2.93s Doing cast cbc for 3s on 64 size blocks: 227604 cast cbc's in 2.93s Doing cast cbc for 3s on 256 size blocks: 57142 cast cbc's in 2.82s Doing cast cbc for 3s on 1024 size blocks: 15042 cast cbc's in 2.93s Doing cast cbc for 3s on 8192 size blocks: 1827 cast cbc's in 2.84s Doing 512 bit private rsa's for 10s: 326 512 bit private RSA's in 9.58s Doing 512 bit public rsa's for 10s: 2731 512 bit public RSA's in 9.36s Doing 1024 bit private rsa's for 10s: 48 1024 bit private RSA's in 9.11s Doing 1024 bit public rsa's for 10s: 812 1024 bit public RSA's in 9.54s Doing 2048 bit private rsa's for 10s: 8 2048 bit private RSA's in 10.44s Doing 2048 bit public rsa's for 10s: 221 2048 bit public RSA's in 9.38s Doing 4096 bit private rsa's for 10s: 2 4096 bit private RSA's in 18.86s Doing 4096 bit public rsa's for 10s: 62 4096 bit public RSA's in 9.79s Doing 512 bit sign dsa's for 10s: 301 512 bit DSA signs in 9.80s Doing 512 bit verify dsa's for 10s: 242 512 bit DSA verify in 9.62s Doing 1024 bit sign dsa's for 10s: 88 1024 bit DSA signs in 9.66s Doing 1024 bit verify dsa's for 10s: 73 1024 bit DSA verify in 9.78s Doing 2048 bit sign dsa's for 10s: 24 2048 bit DSA signs in 9.45s Doing 2048 bit verify dsa's for 10s: 20 2048 bit DSA verify in 9.75s OpenSSL 0.9.5 28 Feb 2000 built on: Mon Feb 28 17:48:04 MET 2000 options:bn(64,32) md2(int) rc4(ptr,int) des(ptr,risc1,16,long) idea(int) blowfish(idx) compiler: cc -DTHREADS +z -D_REENTRANT +Oall +DAportable +w1 -Ae +O4 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY The 'numbers' are in 1000s of bytes per second processed. type 8 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes md2 150.10k 421.61k 572.51k 629.18k 648.07k mdc2 523.28k 585.59k 593.87k 595.33k 594.97k md5 1505.14k 7391.93k 15057.76k 20360.65k 22679.65k hmac(md5) 579.85k 3733.08k 10033.95k 17393.01k 22196.95k sha1 1216.24k 6083.76k 12149.33k 16249.07k 18081.32k rmd160 826.81k 3706.71k 6535.29k 8067.66k 8644.57k rc4 9191.98k 17640.05k 19573.08k 20277.40k 20393.16k des cbc 2207.93k 2674.81k 2750.23k 2763.04k 2772.89k des ede3 964.57k 1058.53k 1065.68k 1069.63k 1069.51k idea cbc 1126.79k 1221.93k 1230.45k 1233.02k 1234.49k rc2 cbc 2024.58k 2100.95k 2098.68k 2096.93k 2099.37k rc5-32/12 cbc 3912.74k 5536.16k 5838.79k 5894.82k 5930.11k blowfish cbc 3813.98k 5254.77k 5472.78k 5546.90k 5550.79k cast cbc 3627.67k 4971.55k 5187.36k 5257.00k 5269.99k sign verify sign/s verify/s rsa 512 bits 0.0294s 0.0034s 34.0 291.8 rsa 1024 bits 0.1898s 0.0117s 5.3 85.1 rsa 2048 bits 1.3050s 0.0424s 0.8 23.6 rsa 4096 bits 9.4300s 0.1579s 0.1 6.3 sign verify sign/s verify/s dsa 512 bits 0.0326s 0.0398s 30.7 25.2 dsa 1024 bits 0.1098s 0.1340s 9.1 7.5 dsa 2048 bits 0.3938s 0.4875s 2.5 2.1