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

[PATCH v4 15/19] perf: add a performance comparison test of grep -E and -P

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Apr 25, 2017, 21:05 UTC
Message-ID
<20170425210548.24612-16-avarab@gmail.com>
In-Reply-To
<20170425210548.24612-1-avarab@gmail.com>

Add a very basic performance comparison test comparing the POSIX extended & pcre1 engines.

I'm skipping the "basic" POSIX engine because supporting its alternate regex syntax is hard, although it would be interesting to test it, at least under glibc it seems to be an entirely different engine, since it can have very different performance even for patterns that mean the same thing under extended and non-extended POSIX regular expression syntax.

Running this on an i7 3.4GHz Linux 3.16.0-4 Debian testing against a checkout of linux.git & latest upstream PCRE, both PCRE and git compiled with -O3:

    $ GIT_PERF_LARGE_REPO=~/g/linux ./run p7820-grep-engines.sh
    [...]
    Test                                                       this tree
    -----------------------------------------------------------------------------
    7820.1: extended with how.to                               0.28(1.23+0.44)
    7820.2: extended with ^how to                              0.26(1.15+0.38)
    7820.3: extended with \w+our\w*                            6.06(38.44+0.35)
    7820.4: extended with -?-?-?-?-?-?-?-?-?-?-?-----------$   0.37(1.57+0.38)
    7820.5: pcre1 with how.to                                  0.26(1.15+0.37)
    7820.6: pcre1 with ^how to                                 0.46(2.66+0.31)
    7820.7: pcre1 with \w+our\w*                               16.42(99.42+0.48)
    7820.8: pcre1 with -?-?-?-?-?-?-?-?-?-?-?-----------$      81.52(275.37+0.41)
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 t/perf/p7820-grep-engines.sh | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)
 create mode 100755 t/perf/p7820-grep-engines.sh
diff --git a/t/perf/p7820-grep-engines.sh b/t/perf/p7820-grep-engines.sh
new file mode 100755
index 0000000000..5ae42ceccc
--- /dev/null
+++ b/t/perf/p7820-grep-engines.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+test_description="Comparison of git-grep's regex engines"
+
+. ./perf-lib.sh
+
+test_perf_large_repo
+test_checkout_worktree
+
+for engine in extended pcre1
+do
+	# Patterns stolen from http://sljit.sourceforge.net/pcre.html
+	for pattern in \
+		'how.to' \
+		'^how to' \
+		'\w+our\w*' \
+		'-?-?-?-?-?-?-?-?-?-?-?-----------$'
+	do
+		test_perf "$engine with $pattern" "
+			git -c grep.patternType=$engine grep -- '$pattern' || :
+		"
+	done
+done
+
+test_done
-- 
2.11.0
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 19 of 24 in “PCRE v1 improvements & PCRE v2 support”
  1. 00/19 PCRE v1 improvements & PCRE v2 supportÆvar Arnfjörð Bjarmason, Apr 25, 2017
  2. 01/19 grep: amend submodule recursion test in preparation for rx engine testingÆvar Arnfjörð Bjarmason, Apr 25, 2017
  3. 02/19 grep: add tests for grep pattern types being passed to submodulesÆvar Arnfjörð Bjarmason, Apr 25, 2017
  4. 03/19 grep: submodule-related case statements should die if new fields are addedÆvar Arnfjörð Bjarmason, Apr 25, 2017
  5. 04/19 grep: remove redundant regflags assignment under PCREÆvar Arnfjörð Bjarmason, Apr 25, 2017
  6. 05/19 grep: remove redundant `regflags &= ~REG_EXTENDED` assignmentsÆvar Arnfjörð Bjarmason, Apr 25, 2017
  7. Junio C HamanoApr 26, 2017
  8. Junio C HamanoApr 26, 2017
  9. 05/19 grep: remove redundant `regflags &= ~REG_EXTENDED` assignmentsÆvar Arnfjörð Bjarmason, Apr 26, 2017
  10. Junio C HamanoApr 27, 2017
  11. 06/19 Makefile & configure: reword outdated comment about PCREÆvar Arnfjörð Bjarmason, Apr 25, 2017
  12. 07/19 grep: add a test for backreferences in PCRE patternsÆvar Arnfjörð Bjarmason, Apr 25, 2017
  13. 09/19 log: add -P as a synonym for --perl-regexpÆvar Arnfjörð Bjarmason, Apr 25, 2017
  14. 08/19 log: add exhaustive tests for pattern style options & configÆvar Arnfjörð Bjarmason, Apr 25, 2017
  15. 10/19 grep & rev-list doc: stop promising libpcre for --perl-regexpÆvar Arnfjörð Bjarmason, Apr 25, 2017
  16. 12/19 test-lib: rename the LIBPCRE prerequisite to PCREÆvar Arnfjörð Bjarmason, Apr 25, 2017
  17. 13/19 grep: change the internal PCRE macro names to be PCRE1Ævar Arnfjörð Bjarmason, Apr 25, 2017
  18. 14/19 grep: change the internal PCRE code & header names to be PCRE1Ævar Arnfjörð Bjarmason, Apr 25, 2017
  19. 15/19 perf: add a performance comparison test of grep -E and -PÆvar Arnfjörð Bjarmason, Apr 25, 2017
  20. 11/19 grep: make grep.patternType=[pcre|pcre1] a synonym for "perl"Ævar Arnfjörð Bjarmason, Apr 25, 2017
  21. 16/19 grep: add support for the PCRE v1 JIT APIÆvar Arnfjörð Bjarmason, Apr 25, 2017
  22. 17/19 grep: add support for PCRE v2Ævar Arnfjörð Bjarmason, Apr 25, 2017
  23. 18/19 grep: remove support for concurrent use of both PCRE v1 & v2Ævar Arnfjörð Bjarmason, Apr 25, 2017
  24. 19/19 Makefile & configure: make PCRE v2 the default PCRE implementationÆvar Arnfjörð Bjarmason, Apr 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.