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

[PATCH 1/3] sha1_name: Create perf test for find_unique_abbrev()

From
Derrick Stolee <dstolee@microsoft.com>
Date
Sep 15, 2017, 16:57 UTC
Message-ID
<20170915165750.198201-2-dstolee@microsoft.com>
In-Reply-To
<20170915165750.198201-1-dstolee@microsoft.com>

Create helper program test-abbrev to compute the minimum length of a disambiguating short-sha for 100,000 object ids. The ids are created by iterating an unsigned int hash_base by a constant hash_delta and copying hash_base five times across the sha1. Iterating by hash_delta does not create a duplicate value for over 10,000,000 iterations.

test-abberv demonstrates the performance improvements that will be shown by later improvements to the find_unique_abberv(). The value of 100,000 is large enough to show the significance of the later improvements while only taking a few seconds on large repos.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
---
 Makefile               |  1 +
 t/helper/.gitignore    |  1 +
 t/helper/test-abbrev.c | 23 +++++++++++++++++++++++
 t/perf/p0008-abbrev.sh | 12 ++++++++++++
 4 files changed, 37 insertions(+)
 create mode 100644 t/helper/test-abbrev.c
 create mode 100755 t/perf/p0008-abbrev.sh
diff --git a/Makefile b/Makefile
index f2bb7f2f6..081ca05e8 100644
--- a/Makefile
+++ b/Makefile
@@ -633,6 +633,7 @@ X =
 
 PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS))
 
+TEST_PROGRAMS_NEED_X += test-abbrev
 TEST_PROGRAMS_NEED_X += test-chmtime
 TEST_PROGRAMS_NEED_X += test-ctype
 TEST_PROGRAMS_NEED_X += test-config
diff --git a/t/helper/.gitignore b/t/helper/.gitignore
index 721650256..80ce7d836 100644
--- a/t/helper/.gitignore
+++ b/t/helper/.gitignore
@@ -1,3 +1,4 @@
+/test-abbrev
 /test-chmtime
 /test-ctype
 /test-config
diff --git a/t/helper/test-abbrev.c b/t/helper/test-abbrev.c
new file mode 100644
index 000000000..cb3551df9
--- /dev/null
+++ b/t/helper/test-abbrev.c
@@ -0,0 +1,23 @@
+#include "cache.h"
+
+int cmd_main(int ac, const char **av)
+{
+	setup_git_directory();
+
+	unsigned int hash_delt = 0x13579BDF;
+	unsigned int hash_base = 0x01020304;
+	struct object_id oid;
+
+	int i, count = 0;
+	int n = sizeof(struct object_id) / sizeof(int);
+	while (count++ < 100000) {
+		for (i = 0; i < n; i++)
+			((unsigned int*)oid.hash)[i] = hash_base;
+
+		find_unique_abbrev(oid.hash, MINIMUM_ABBREV);
+
+		hash_base += hash_delt;
+	}
+
+	exit(0);
+}
diff --git a/t/perf/p0008-abbrev.sh b/t/perf/p0008-abbrev.sh
new file mode 100755
index 000000000..7c3fad807
--- /dev/null
+++ b/t/perf/p0008-abbrev.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+test_description='Test object disambiguation through abbreviations'
+. ./perf-lib.sh
+
+test_perf_large_repo
+
+test_perf 'find_unique_abbrev()' '
+	test-abbrev
+'
+
+test_done
-- 
2.14.1.538.g56ec8fc98.dirty
Previous: Derrick StoleeNext: Junio C Hamano
Message 3 of 8 in “Improve abbreviation disambiguation”
  1. 0/3 Improve abbreviation disambiguationDerrick Stolee, Sep 15, 2017
  2. 2/3 sha1_name: Unroll len loop in find_unique_abbrev_rDerrick Stolee, Sep 15, 2017
  3. 1/3 sha1_name: Create perf test for find_unique_abbrev()Derrick Stolee, Sep 15, 2017
  4. Junio C HamanoSep 18, 2017
  5. Derrick StoleeSep 18, 2017
  6. Junio C HamanoSep 19, 2017
  7. 3/3 sha1_name: Parse less while finding common prefixDerrick Stolee, Sep 15, 2017
  8. Jonathan NiederSep 15, 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.