git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] mingw: use OpenSSL's SHA-1 routines

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Feb 9, 2017, 22:27 UTC
Message-ID
<6a29f8c60d315a24292c1fa9f5e84df4dfdbf813.1486679254.git.johannes.schindelin@gmx.de>
From: Jeff Hostetler <jeffhost@microsoft.com>

Use OpenSSL's SHA-1 routines rather than builtin block-sha1 routines. This improves performance on SHA1 operations on Intel processors.

OpenSSL 1.0.2 has made considerable performance improvements and support the Intel hardware acceleration features. See: https://software.intel.com/en-us/articles/improving-openssl-performance https://software.intel.com/en-us/articles/intel-sha-extensions

To test this I added/staged a single file in a gigantic repository having a 450MB index file. The code in read-cache.c verifies the header SHA as it reads the index and computes a new header SHA as it writes out the new index. Therefore, in this test the SHA code must process 900MB of data. Testing was done on an Intel I7-4770 CPU @ 3.40GHz (Intel64, Family 6, Model 60) CPU.

The block-sha1 version averaged 5.27 seconds. The OpenSSL version averaged 4.50 seconds.

================================================================

$ echo xxx >> project.mk $ time /e/blk_sha/bin/git.exe add project.mk

real 0m5.207s user 0m0.000s sys 0m0.250s

$ echo xxx >> project.mk $ time /e/blk_sha/bin/git.exe add project.mk

real 0m5.362s user 0m0.015s sys 0m0.234s

$ echo xxx >> project.mk $ time /e/blk_sha/bin/git.exe add project.mk

real 0m5.300s user 0m0.016s sys 0m0.250s

$ echo xxx >> project.mk $ time /e/blk_sha/bin/git.exe add project.mk

real 0m5.216s user 0m0.000s sys 0m0.250s

================================================================ $ echo xxx >> project.mk $ time /e/openssl/bin/git.exe add project.mk

real 0m4.431s user 0m0.000s sys 0m0.250s

$ echo xxx >> project.mk $ time /e/openssl/bin/git.exe add project.mk

real 0m4.478s user 0m0.000s sys 0m0.265s

$ echo xxx >> project.mk $ time /e/openssl/bin/git.exe add project.mk

real 0m4.690s user 0m0.000s sys 0m0.250s

$ echo xxx >> project.mk $ time /e/openssl/bin/git.exe add project.mk

real 0m4.420s user 0m0.000s sys 0m0.234s

================================================================
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
Published-As: https://github.com/dscho/git/releases/tag/mingw-openssl-sha1-v1
Fetch-It-Via: git fetch https://github.com/dscho/git mingw-openssl-sha1-v1
 config.mak.uname | 1 -
 1 file changed, 1 deletion(-)
diff --git a/config.mak.uname b/config.mak.uname
index 447f36ac2e..a07936da8b 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -515,7 +515,6 @@ ifneq (,$(findstring MINGW,$(uname_S)))
 	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
 	NO_REGEX = YesPlease
 	NO_PYTHON = YesPlease
-	BLK_SHA1 = YesPlease
 	ETAGS_TARGET = ETAGS
 	NO_INET_PTON = YesPlease
 	NO_INET_NTOP = YesPlease

base-commit: 6e3a7b3398559305c7a239a42e447c21a8f39ff8
-- 
2.11.1.windows.1
Next: Junio C Hamano
Message 1 of 18 in “mingw: use OpenSSL's SHA-1 routines”
  1. mingw: use OpenSSL's SHA-1 routinesJohannes Schindelin, Feb 9, 2017
  2. Junio C HamanoFeb 9, 2017
  3. Johannes SixtFeb 11, 2017
  4. Junio C HamanoFeb 11, 2017
  5. Johannes SchindelinFeb 13, 2017
  6. Johannes SixtFeb 16, 2017
  7. Jeff KingFeb 10, 2017
  8. Johannes SchindelinFeb 10, 2017
  9. Jeff KingFeb 10, 2017
  10. Johannes SixtFeb 13, 2017
  11. Junio C HamanoFeb 13, 2017
  12. Johannes SixtFeb 13, 2017
  13. Johannes SchindelinFeb 13, 2017
  14. Johannes SixtFeb 14, 2017
  15. Junio C HamanoFeb 24, 2017
  16. Johannes SixtMar 2, 2017
  17. Junio C HamanoMar 2, 2017
  18. Linus TorvaldsFeb 25, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.