Upgrading OpenSSL from v3.5 to v3.6 causes a ~3x slowdown for
`sha256sum` (~2x for `sha1sum`) on machines that support SHA-NI. It
looks like this was caused by a change in why/how
`OPENSSL_cpuid_setup` gets called.

I don't know who's "to blame" or what the proper fix will be, but as a
hacky example here's a patch that fixes the performance regression in
`sha256sum` by calling `OpenSSL_add_all_algorithms` early in `main`:

diff --git a/src/cksum.c b/src/cksum.c
index ac3e3f1..c7c20f0 100644
--- a/src/cksum.c
+++ b/src/cksum.c
@@ -52,6 +52,9 @@
 #if HASH_ALGO_SHA256 || HASH_ALGO_SHA224 || HASH_ALGO_CKSUM
 # include "sha256.h"
 #endif
+#if HASH_ALGO_SHA256 && HAVE_OPENSSL_SHA256
+# include <openssl/evp.h>
+#endif
 #if HASH_ALGO_SHA512 || HASH_ALGO_SHA384 || HASH_ALGO_CKSUM
 # include "sha512.h"
 #endif
@@ -1505,6 +1508,10 @@ main (int argc, char **argv)
      so that processes running in parallel do not intersperse their output.  */
   setvbuf (stdout, nullptr, _IOLBF, 0);

+#if HASH_ALGO_SHA256 && HAVE_OPENSSL_SHA256
+  OpenSSL_add_all_algorithms();
+#endif
+
 #if HASH_ALGO_SUM
   char const *short_opts = "rs";
 #elif HASH_ALGO_CKSUM



Reply via email to