bug-grep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug #29117] extreme slowness: dfa.c should provide a callback-on-match


From: Paolo Bonzini
Subject: [bug #29117] extreme slowness: dfa.c should provide a callback-on-match interface
Date: Mon, 08 Mar 2010 08:51:06 +0000
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.6) Gecko/20100107 Fedora/3.5.6-1.fc12 Firefox/3.5.6

URL:
  <http://savannah.gnu.org/bugs/?29117>

                 Summary: extreme slowness: dfa.c should provide a
callback-on-match interface
                 Project: grep
            Submitted by: bonzini
            Submitted on: Mon 08 Mar 2010 09:51:05 AM CET
                Category: None
                Severity: 4 - Important
              Item Group: None
                  Status: None
                 Privacy: Public
             Assigned to: None
             Open/Closed: Open
         Discussion Lock: Any

    _______________________________________________________

Details:

dfaexec is being called on a full (~32k) buffer every time.  However, dfaexec
performs multibyte->wide char conversion of the entire buffer every time,
which is very expensive and leads to several thousand more mbrtowc calls than
would be necessary.

In this gdb session, consider that mbrtowc is called every time "size"
times:

Breakpoint 1, dfaexec (d=0x628800, 
    begin=0x62b04c ..., size=32678, backref=0x7fffffffdddc) at
../../src/dfa.c:2792
2792    {
(gdb) 
Continuing.

Breakpoint 1, dfaexec (d=0x628800, 
    begin=0x62b0d1 ..., size=32545, backref=0x7fffffffdddc) at
../../src/dfa.c:2792
2792    {
(gdb) 
Continuing.

Breakpoint 1, dfaexec (d=0x628800, 
    begin=0x62b11b ..., size=32471, backref=0x7fffffffdddc) at
../../src/dfa.c:2792
2792    {
(gdb) 
Continuing.

Breakpoint 1, dfaexec (d=0x628800, 
    begin=0x62b16d ..., size=32389, backref=0x7fffffffdddc) at
../../src/dfa.c:2792
2792    {
(gdb) 
Continuing.

Breakpoint 1, dfaexec (d=0x628800, 
    begin=0x62b1ac ..., size=32326, backref=0x7fffffffdddc) at
../../src/dfa.c:2792
2792    {
(gdb) 
Continuing.

Breakpoint 1, dfaexec (d=0x628800, 
    begin=0x62b203 ..., size=32239, backref=0x7fffffffdddc) at
../../src/dfa.c:2792
2792    {
(gdb) 

If a callback interface was provided, this additional cost could be
eliminated.  dfaexec could easily be implemented on top of this new interface.




    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?29117>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/





reply via email to

[Prev in Thread] Current Thread [Next in Thread]