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

pcre performance, was Re: git log filtering

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Mar 7, 2007, 17:37 UTC
Message-ID
<Pine.LNX.4.63.0703071807250.22628@wbgn013.biozentrum.uni-wuerzburg.de>
In-Reply-To
<20070208061654.GA8813@coredump.intra.peff.net>
Hi,
On Thu, 8 Feb 2007, Jeff King wrote:
> In every case there, pcre has either comparable performance, or simply 
> blows away glibc.

So I tested this against external grep. For completeness' sake, I tested these against each other: GNU regex-0.12, Git _without_ external grep (relies on glibc's regex), Git _with_ external grep ("original"), pcre, and for good measure, pcre with NO_MMAP=1 (to test if disk access is the problem).

Here are the numbers:
grep-gnu-regex:

21.41user 1.08system 0:22.52elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7210minor)pagefaults 0swaps 21.40user 1.06system 0:22.47elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7209minor)pagefaults 0swaps 21.61user 1.06system 0:22.68elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7209minor)pagefaults 0swaps 21.30user 1.10system 0:22.48elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7210minor)pagefaults 0swaps 21.30user 1.08system 0:22.43elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7209minor)pagefaults 0swaps

grep-no-external-grep:

6.98user 1.17system 0:08.16elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7120minor)pagefaults 0swaps 7.07user 1.16system 0:08.27elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7121minor)pagefaults 0swaps 6.98user 1.12system 0:08.11elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7121minor)pagefaults 0swaps 7.00user 1.18system 0:08.20elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7121minor)pagefaults 0swaps

grep-original:

0.82user 1.15system 0:01.97elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7090minor)pagefaults 0swaps 0.94user 1.03system 0:01.97elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7099minor)pagefaults 0swaps 0.89user 1.07system 0:01.96elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7092minor)pagefaults 0swaps 0.81user 1.15system 0:01.97elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7092minor)pagefaults 0swaps

grep-pcre:

4.04user 1.18system 0:05.24elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7205minor)pagefaults 0swaps 4.16user 1.08system 0:05.25elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7206minor)pagefaults 0swaps 4.24user 0.98system 0:05.23elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7206minor)pagefaults 0swaps 4.08user 1.14system 0:05.23elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7206minor)pagefaults 0swaps

grep-pcre-no-mmap:

4.15user 1.07system 0:05.22elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7210minor)pagefaults 0swaps 4.01user 1.14system 0:05.17elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7209minor)pagefaults 0swaps 3.94user 1.18system 0:05.14elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7210minor)pagefaults 0swaps 4.11user 1.06system 0:05.18elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7210minor)pagefaults 0swaps

BTW this was "git grep Lin.*valds" on linux-2.6, just updated.

The first test was run 5 times instead of 4 to make sure it is hot cache. This is on a dual 1.2GHz 2GB machine.

I cannot really say anything about the pagefaults, so I'll leave that to the wizards.

Result: external grep wins hands-down. GNU regex loses hands-down. pcre 
seems to be better than glibc's regex engine, and gains ever so slightly 
when using NO_MMAP.

I ran the same test on a 1GHz 256MB machine which is overloaded, and in that case, GNU regex is still worst (~55 sec), while glibc and pcre are equal (glibc slightly slower with ~35 sec, pcre ~34 sec), and external grep wins (~29 sec). Of course, this is io-bound, but it shows that pcre uses more memory than glibc.

Ciao, Dscho

Previous: Johannes SchindelinNext: Paolo Bonzini
Message 32 of 34 in “git log filtering”
  1. Don ZickusFeb 7, 2007
  2. Jakub NarebskiFeb 7, 2007
  3. Uwe Kleine-KönigFeb 7, 2007
  4. Johannes SchindelinFeb 7, 2007
  5. Linus TorvaldsFeb 7, 2007
  6. Johannes SchindelinFeb 7, 2007
  7. Linus TorvaldsFeb 7, 2007
  8. Fix "git log -z" behaviourLinus Torvalds, Feb 7, 2007
  9. Junio C HamanoFeb 7, 2007
  10. Don ZickusFeb 7, 2007
  11. Linus TorvaldsFeb 7, 2007
  12. Junio C HamanoFeb 8, 2007
  13. Junio C HamanoFeb 10, 2007
  14. Junio C HamanoFeb 10, 2007
  15. Linus TorvaldsFeb 10, 2007
  16. Don ZickusFeb 7, 2007
  17. Linus TorvaldsFeb 7, 2007
  18. Linus TorvaldsFeb 7, 2007
  19. Junio C HamanoFeb 7, 2007
  20. Linus TorvaldsFeb 7, 2007
  21. Jeff KingFeb 8, 2007
  22. Johannes SchindelinFeb 8, 2007
  23. Jeff KingFeb 8, 2007
  24. Johannes SchindelinFeb 9, 2007
  25. Shawn O. PearceFeb 9, 2007
  26. Johannes SchindelinFeb 9, 2007
  27. Sergey VlasovFeb 9, 2007
  28. Jeff KingFeb 9, 2007
  29. Johannes SchindelinFeb 9, 2007
  30. Jeff KingFeb 9, 2007
  31. Johannes SchindelinFeb 9, 2007
  32. pcre performance, was Re: git log filteringJohannes Schindelin, Mar 7, 2007
  33. Paolo BonziniMar 7, 2007
  34. Horst H. von BrandFeb 8, 2007

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.