Page MenuHomeFreeBSD

Fix for grep -i slowness (patch to libregex)
Needs ReviewPublic

Authored by titus_edc.ro on Nov 28 2025, 3:43 PM.
Tags
None
Referenced Files
Unknown Object (File)
Wed, Jan 28, 7:25 PM
Unknown Object (File)
Dec 29 2025, 9:11 AM
Unknown Object (File)
Dec 27 2025, 10:07 AM
Unknown Object (File)
Dec 26 2025, 5:42 PM
Unknown Object (File)
Dec 17 2025, 2:22 PM
Unknown Object (File)
Dec 15 2025, 6:10 PM
Unknown Object (File)
Dec 13 2025, 9:43 PM
Unknown Object (File)
Nov 30 2025, 4:20 PM

Details

Reviewers
None
Group Reviewers
Src Committers
Summary

grep -i is extremely slow for moderate and longer patterns
the reason is the current code expands any case insensitive string like "findme" to [Ff][iI][nN][dD][Mm][eE]
this prevents the creation of a "must" pattern on which to run Boyer-Moore

the patch tries to fix it

[titus@utmbox ~/builds]$ find /usr/src/sys/ -name \*.c -type f|xargs cat >/tmp/bigfile.txt
[titus@utmbox ~/builds]$ time grep -c FreeBSD /tmp/bigfile.txt
4044

real 0m0.243s
user 0m0.227s
sys 0m0.016s
[titus@utmbox ~/builds]$ time grep -ic FreeBSD /tmp/bigfile.txt
7835

real 0m8.652s
user 0m8.621s
sys 0m0.032s

#so the case insensitive run si 30-40 times slower. its worse for longer patterns

#load patched library
[titus@utmbox ~/builds]$ export LD_LIBRARY_PATH=/usr/obj/home/titus/builds/usr/src/arm64.aarch64/lib/libregex/
[titus@utmbox ~/builds]$ time grep -ic FreeBSD /tmp/bigfile.txt
7835

real 0m0.263s
user 0m0.231s
sys 0m0.032s

Test Plan

i ran NetBSDs libregex test suite against it and it passes

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped