OpenSSL 3.x performance Issue

Tomas Mraz tomas at openssl.org
Wed Jan 10 08:12:01 UTC 2024


Could you please try running openssl speed -evp aes-256-cbc
on your environment (i.e. the Win32 builds) with both 1.1.1 and 3.2
versions? Can you please post the results here?

What do you exactly mean by:
 
> Not that this is 32-bit Windows app so using AESNI is not an option
> for me. Other assembly code is enabled during OpenSSL build.

Do you somehow patch out the AES-NI implementation or anything else?

How do you configure your Win32 build?

Regards,

Tomas Mraz, OpenSSL

On Wed, 2024-01-10 at 12:03 +0530, k. patan wrote:
> Hi Team,
> 
> I'm working on OpenSSL 3 migration for one of the applications where
> every incoming packet is decrypted, and outgoing packet is decrypted.
> 
> This is code for the same -
> int do_crypt(Action act)
> {
>   unsigned char outbuf[1024];
>   /* Bogus key and IV: we'd normally set these from
>    * another source.
>    */
>   unsigned char key[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
>   unsigned char iv[] = { 1,2,3,4,5,6,7,8 };
>   const unsigned char intext[] = "Some Crypto Text";
>   EVP_CIPHER_CTX* pCtx = EVP_CIPHER_CTX_new();
>   auto start = std::chrono::high_resolution_clock::now();
>   EVP_CIPHER_CTX_reset(pCtx);
>   EVP_CipherInit_ex(pCtx, EVP_aes_256_cbc(), NULL, key, iv, (act ==
> Encrypt) ? 1 : 0);
>   
>   if (!EVP_Cipher(pCtx, outbuf, intext, strlen((const char*)intext)))
> {
>     /* Error */
>     return 0;
>   }
>   auto end = std::chrono::high_resolution_clock::now();
>   auto duration =
> std::chrono::duration_cast<std::chrono::microseconds>(end - start);
> 
>   std::cout << "Execution time: " << duration.count() << "
> microseconds" << std::endl;
> 
>   EVP_CIPHER_CTX_free(pCtx);
> 
>   return 1;
> }
> 
> This code is giving me nightmare in terms of performance where we are
> getting 30% less download performance.
> 
> One thing I tried is caching EVP_CIPER_fetch() value instead of
> calling EVP_aes_256_cbc(). 
> Still, it doesn't make much difference in performance.
> I started with OpenSSL 3.x and then upgraded to OpenSSL 3.2. Still
> not much difference.
> 
> OpenSSL team accepted that OpenSSL 3.x series performance is not at
> par with OpenSSL 1.1.1 series.
> This explanation is not going to help us as OpenSSL is core of the
> application and such kind of performance degradation is release
> blocker for my application.
> Any suggestion from the experts to improve the execution time for the
> code within the timer.
> Not that this is 32-bit Windows app so using AESNI is not an option
> for me. Other assembly code is enabled during OpenSSL build.
> 
> Regards
> K. Patan
> 

-- 
Tomáš Mráz, OpenSSL



More information about the openssl-users mailing list