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 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php