Grep speed delusions

Meet my new PC:
gentoobox ~ # time dd if=/dev/urandom of=prova.rnd bs=1M count=6k
6144+0 records in
6144+0 records out
6442450944 bytes (6.4 GB, 6.0 GiB) copied, 17.8593 s, 361 MB/s

real 0m17.875s
user 0m0.010s
sys 0m16.855s

Now let’s do some generic searches case sensitive, and insensitive.

First try is a dry run, to see if the OS is going to cache this somehow.
gentoobox ~ # time grep provaprovaprova prova.rnd

real 0m1.630s
user 0m1.392s
sys 0m0.238s
gentoobox ~ # time grep provaprovaprova prova.rnd

real 0m1.697s
user 0m1.435s
sys 0m0.297s
gentoobox ~ # time grep -i provaprovaprova prova.rnd

real 0m3.445s
user 0m2.941s
sys 0m0.623s
gentoobox ~ # time fgrep provaprovaprova prova.rnd

real 0m1.623s
user 0m1.259s
sys 0m0.467s
gentoobox ~ # time fgrep -i provaprovaprova prova.rnd

real 0m1.693s
user 0m1.397s
sys 0m0.396s

No caching, and insensitive searches are slower. No advantages using fgrep this time.

But there’s no escape: fgrep is better!!
gentoobox ~ # time grep 192.168.0.1 prova.rnd

real 0m1.835s
user 0m1.316s
sys 0m0.526s
gentoobox ~ # time grep -i 192.168.0.1 prova.rnd

real 0m1.836s
user 0m1.617s
sys 0m0.260s
gentoobox ~ # time grep 192\.168\.0\.1 prova.rnd

real 0m1.835s
user 0m1.436s
sys 0m0.420s
gentoobox ~ # time fgrep 192.168.0.1 prova.rnd

real 0m1.585s
user 0m1.222s
sys 0m0.653s
gentoobox ~ # time grep 192[\.]168[\.]0[\.]1 prova.rnd

real 0m1.587s
user 0m1.016s
sys 0m0.719s

Better always use fgrep if you are searching for an exact match… and escaping dots is not easy at it seems.
Insensitive searches require the same amount of time if you are searching only number and dots.

Trying to increase difficulty for the CPU
gentoobox ~ # time grep 'aaabaa\|bvvvdeed\|cdddeffe' prova.rnd

real 0m3.657s
user 0m3.151s
sys 0m0.527s
gentoobox ~ # time grep -i 'aaabaa\|bvvvdeed\|cdddeffe' prova.rnd

real 0m4.360s
user 0m3.779s
sys 0m0.650s

Not quite enough…

gentoobox ~ # time grep '.*provaprovaprova.*provaprovaprova.*provaprovaprova.*\|.*1234567.*1.*2.*' prova.rnd

real 0m22.467s
user 0m21.917s
sys 0m0.550s
gentoobox ~ # time grep -i '.*provaprovaprova.*provaprovaprova.*provaprovaprova.*\|.*1234567.*1.*2.*' prova.rnd

real 0m22.088s
user 0m21.576s
sys 0m0.542s

Ops! Not sure what happened here…

Leave a Reply

Your email address will not be published. Required fields are marked *