Subject: bin/8461: grep mmap()'s too often
To: None <gnats-bugs@gnats.netbsd.org>
From: Andreas Johansson <ajo@ymer.campus.luth.se>
List: netbsd-bugs
Date: 09/21/1999 02:50:50
>Number:         8461
>Category:       bin
>Synopsis:       grep mmap()'s too often
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    bin-bug-people (Utility Bug People)
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Sep 21 02:50:01 1999
>Last-Modified:
>Originator:     Andreas Johansson
>Organization:
>Release:        current tarball, 1999-08-03
>Environment:
AlphaPC 164SX, NetBSD current

System: NetBSD ymer 1.4I NetBSD 1.4I (YMER) #16: Fri Aug 13 00:16:51 CEST 1999 ajo@ymer:/usr/src/sys/arch/alpha/compile/YMER alpha


>Description:
The implementation of grep is very inefficient on my alpha. I've looked at
the code, and it seems that it reads the file data by using mmap() on a
block basis instead of mmap():ing the entire file. mmap is used sort of like
a replacement for read. It seems that (atleast) the mmap implementation on
alpha is very system time consuming and therefore grep takes a lot of system
cpu time. Also, read performance is very poor.

By simply adding #undef HAVE_MMAP to grep.c I've forced grep to use read()
instead of mmap() to read it's data. This increases read performance by about
4 times while still taking much less system cpu time.

>How-To-Repeat:
time grep something somefile
>Fix:
Simple fix, force grep to use read() instead.
Better fix, mmap() the whole file instead of many small blocks.

>Audit-Trail:
>Unformatted: