Re: [PHP-DEV] Flex never-interactive mode

[email protected] (Rasmus Lerdorf)
Newsgroups php.dev
Message-ID <[email protected]>
On Wed, 26 Feb 2003, Andi Gutmans wrote:

> At 12:48 PM 2/26/2003 -0800, Rasmus Lerdorf wrote:
> >I think we can add "%option never-interactive" to the ini-scanner lexer to
> >speed it up a tiny little bit.  Speeding up the ini scanner might be
> >important for the folks running the cgi version.  More importantly, to me
> >anyway, when we know we are not interactive, should we not
> >programmatically set is_interactive to false for the language scanner as
> >well?  I did this here and the ioctl syscalls that come from the isatty()
> >calls in the lexer dropped away speeding things up nicely.
> 
> Do you have any figures? (req/s wise)
> I think we can set it to false when we know we're not interactive. It 
> shouldn't be a problem.

Not really.  I've hacked and slashed a bunch of things and this is just
one of them.  I could pull out just this change and try to time it, I
guess.  But it can't help but be faster just by looking at the syscall
profiles before and after the change.  On a simple Hello World script
before the change you have this: (PHP 4.2 with realpath turned off)

 83757 apache  0.000010 CALL  __getcwd(0x9fbfe674,0xfff)
 83757 apache  0.000010 RET   __getcwd 0
 83757 apache  0.000010 CALL  chdir(0x9fbfe614)
 83757 apache  0.000030 RET   chdir 0
 83757 apache  0.000023 CALL  open(0x167588,0,0x1b6)
 83757 apache  0.000031 RET   open 5
 83757 apache  0.000009 CALL  __getcwd(0x9fbfdc14,0x400)
 83757 apache  0.000032 RET   __getcwd 0
 83757 apache  0.000031 CALL  ioctl(0x5,TIOCGETA,0x9fbfe4e4)
 83757 apache  0.000010 RET   ioctl -1 errno 25 Inappropriate ioctl for device
 83757 apache  0.000034 CALL  fstat(0x5,0x9fbfd42c)
 83757 apache  0.000010 RET   fstat 0
 83757 apache  0.000008 CALL  read(0x5,0x148000,0x2000)
 83757 apache  0.000023 RET   read 42/0x2a
 83757 apache  0.000008 CALL  read(0x5,0x148000,0x2000)
 83757 apache  0.000013 RET   read 0
 83757 apache  0.000046 CALL  ioctl(0x5,TIOCGETA,0x9fbfd4c0)
 83757 apache  0.000009 RET   ioctl -1 errno 25 Inappropriate ioctl for device
 83757 apache  0.000020 CALL  close(0x5)
 83757 apache  0.000010 RET   close 0
 83757 apache  0.000053 CALL  setitimer(0,0x9fbfe29c,0x9fbfe28c)
 83757 apache  0.000014 RET   setitimer 0
 83757 apache  0.000059 CALL  setitimer(0,0x9fbfe29c,0x9fbfe28c)
 83757 apache  0.000009 RET   setitimer 0
 83757 apache  0.000026 CALL  chdir(0x9fbfe674)
 83757 apache  0.000030 RET   chdir 0

The 3rd column there is the time it took for the call.  A failed ioctl is
one of the heavier syscalls and both of the ioctls disappear for this
request when you turn off is_interactive.  The ioctls are the same in 4.3.  
Here is what I am currently down to in 4.3.  I still need to get rid of 
that one lseek and am hoping to nuke the fstat as well.  I also need to 
figure out why setitimer is being called more in 4.3 than it was in 4.2.

 88046 apache  0.000009 CALL  __getcwd(0x9fbfe654,0xfff)
 88046 apache  0.000013 RET   __getcwd 0
 88046 apache  0.000009 CALL  chdir(0x9fbfe5f4)
 88046 apache  0.000032 RET   chdir 0
 88046 apache  0.000010 CALL  setitimer(0x2,0x9fbfe63c,0)
 88046 apache  0.000008 RET   setitimer 0
 88046 apache  0.000008 CALL  setitimer(0x2,0x9fbfe61c,0)
 88046 apache  0.000006 RET   setitimer 0
 88046 apache  0.000028 CALL  sigaction(0x1b,0x9fbfe5b4,0x9fbfe59c)
 88046 apache  0.000008 RET   sigaction 0
 88046 apache  0.000007 CALL  sigprocmask(0x2,0x9fbfe60c,0)
 88046 apache  0.000006 RET   sigprocmask 0
 88046 apache  0.000030 CALL  open(0x12ce0c,0,0x1b6)
 88046 apache  0.000033 RET   open 5
 88046 apache  0.000021 CALL  lseek(0x5,0,0,0,0)
 88046 apache  0.000008 RET   lseek 0
 88046 apache  0.000043 CALL  fstat(0x5,0x9fbfd40c)
 88046 apache  0.000013 RET   fstat 0
 88046 apache  0.000009 CALL  read(0x5,0x13f000,0x2000)
 88046 apache  0.000022 RET   read 42/0x2a
 88046 apache  0.000006 CALL  read(0x5,0x13f000,0x2000)
 88046 apache  0.000015 RET   read 0
 88046 apache  0.000066 CALL  close(0x5)
 88046 apache  0.000015 RET   close 0
 88046 apache  0.000047 CALL  setitimer(0,0x9fbfdf7c,0x9fbfdf6c)
 88046 apache  0.000012 RET   setitimer 0
 88046 apache  0.000043 CALL  setitimer(0,0x9fbfdf7c,0x9fbfdf6c)
 88046 apache  0.000009 RET   setitimer 0
 88046 apache  0.000021 CALL  chdir(0x9fbfe654)
 88046 apache  0.000031 RET   chdir 0

-Rasmus
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.