Edit report at https://bugs.php.net/bug.php?id=73412&edit=1
ID: 73412
Updated by: nikic@php.net
Reported by: spam2 at rhsoft dot net
Summary: url-wrappers in PHP7 terrible slow
Status: Not a bug
Type: Bug
Package: Performance problem
Operating System: Linux
PHP Version: 7.0.12
Block user comment: N
Private report: N
New Comment:
Okay, so the trace includes a bunch of 3 second timeouts like
18606 09:07:06.754991 poll([{fd=3, events=POLLIN}], 1, 3000) = 0 (Timeout) <3.003119>
That is clearly the reason for the immense slowdown. Now need to figure out what the cause is :)
Previous Comments:
------------------------------------------------------------------------
[2016-10-31 08:10:19] spam2 at rhsoft dot net
i have no expierience with perf tools but if you would instruct me,,,
in the meantime two straces:
strace -Ff -tt -T -o out.txt php -r "get_headers('http://corecms/static.htm');"
http://access.thelounge.net/harry/get_headers_strace_small.txt
strace -Ff -tt -T -o out.txt php /www/corecms.rhsoft.net/response-times.php
http://access.thelounge.net/harry/get_headers_strace.txt
------------------------------------------------------------------------
[2016-10-31 08:03:27] rasmus@php.net
I think a perf report would be more useful, but if you do an strace, use these flags: strace -Ff -tt
-T -o out.txt php -r "get_headers('http://corecms/static.htm');"
------------------------------------------------------------------------
[2016-10-31 07:44:34] nikic@php.net
Could you please provide an strace trace for what happens in the get_headers() case?
------------------------------------------------------------------------
[2016-10-31 07:35:44] spam2 at rhsoft dot net
same behavior with your code (replaced the URL and changed 1000 to 20 because otherwise i would need
to wait until next week)
[harry@srv-rhsoft:/downloads]$ php test.php
0.081186056137085
3.1035280227661
the same when it's running within the webserver
interesting that the profiling script used between "make prof-gen" and "make
prof-use" is also doing a ton of file_get_contents on a temporary started webserver on
127.0.0.1:9000 does not suffer from this problem (not within the build-process and also not with the
fallback using the installed binaries) while i have serveral scripts using file_get_contents() or
get_headers() which got magnitudes slower
one of them lists all files recursive and does blind requests to any possible URL to find includes
which are not proper protected against direct calls and that one would take months to finish while
with curl it's pretty fast
------------------------------------------------------------------------
[2016-10-31 06:33:07] rasmus@php.net
I ran the test on mod_php which is using libphp7.so which is compiled with PIC. PIC is the shared
library equivalent of PIE.
But yes, as a matter of fact my cli php is position-independent as well:
11:28pm thinkpad:~/php-src> sapi/cli/php -v
PHP 7.0.14-dev (cli) (built: Oct 27 2016 21:27:10) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.13-dev, Copyright (c) 1999-2016, by Zend Technologies
11:28pm thinkpad:~/php-src> hardening-check sapi/cli/php
sapi/cli/php:
Position Independent Executable: yes
Stack protected: yes
Stack protected: yes
Fortify Source functions: yes
Read-only relocations: yes
Immediate binding: yes
11:29pm thinkpad:~/php-src> sapi/cli/php /var/www/html/rr.php
4.9895119667053
5.8754270076752
And as you can see, from the cli the difference is still small. Did you actually run my script?
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=73412
--
Edit this bug report at https://bugs.php.net/bug.php?id=73412&edit=1