|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2016-10-07 11:58 UTC] spam2 at rhsoft dot net
Description: ------------ we have two different inhouse cms-systems, while one is 46% faster with PHP7 the other one sucks terrible - are there things known by developers which are internally slower now while most other become afster and should be avoided? my first guess was mbstring but it's not, i have setup a cli environment with both php-versions + modules and a shell wrapper "php5" and "php7" and until now i am not able to find any isolted peice of code with a PHP7 slowdown it looks like others see similar results https://laracasts.com/discuss/channels/general-discussion/is-it-just-me-or-is-php-7-slow unluckily the cms developed by me is the faster one and now both have a difference of factor 30-36 Requests per second: 107.24 [#/sec] (mean) Time per request: 279.741 [ms] (mean) Time per request: 9.325 [ms] (mean, across all concurrent requests) Transfer rate: 1531.03 [Kbytes/sec] received Requests per second: 56.30 [#/sec] (mean) Time per request: 532.864 [ms] (mean) Time per request: 17.762 [ms] (mean, across all concurrent requests) Transfer rate: 803.75 [Kbytes/sec] received Test script: --------------- impossible to provide :-( Expected result: ---------------- have at least the same performance but not half Actual result: -------------- massive slowdown PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 02:00:01 2025 UTC |
and that this simple shellscript running as systemd service with 7.1.0 and 7.0.14 consumes 102 MB is also not normal [root@testserver:~]$ cat /usr/local/bin/check-dbmail-service.php #!/usr/bin/php <?php /** make sure we are running as shell-script */ if(PHP_SAPI != 'cli') { exit('FORBIDDEN'); } /** verify that port and binary-name are given */ if(empty($_SERVER['argv'][1]) || empty($_SERVER['argv'][2])) { exit('USAGE: check-dbmail-service <port> <process-name>' . "\n"); } /** delay monitoring for 30 seconds */ sleep(30); /** service loop */ while(1 == 1) { if(!check_service()) { sleep(5); if(!check_service()) { passthru('/usr/bin/killall -s SIGTERM ' . escapeshellarg($_SERVER['argv'][2])); usleep(750000); passthru('/usr/bin/killall -s SIGKILL ' . escapeshellarg($_SERVER['argv'][2])); } } sleep(30); } /** * check if service is available and responds * * @access public * @return boolean */ function check_service() { $errno = 0; $errstr = ''; $fp = @fsockopen('tcp://127.0.0.1', $_SERVER['argv'][1], $errno, $errstr, /**$timeout*/5); if($fp) { $response = @fgets($fp, 128); @fclose($fp); if(!empty($response)) { return true; } else { return false; } } else { return false; } } ?>You can use USE_ZEND_ALLOC=0 valgrind --tool=massif php script.php to profile the memory usage of PHP, and then run ms_print massif.out.NNNNNN to convert it into a more readable output. Maybe this will provide some insight into the problem.no it won't - the binary is already compiled with --disable-huge-code-pages and keep in mind that this script is CLI, that setting affects opcode and as you can see in my previous comments for CLI opcache is even not loaded at all since the webservers have their own "php.ini" with PHPIniDir in the httpd.conf you have the whole script in my comment from [2016-12-15 00:24 UTC] and there is no sane reason to allocate 100 MB memory for that with some luck the php.spec makes it to that comment _________________ %global dist .fc%fedora.%(echo $(/usr/bin/date +%Y%m%d.%H%M)).rh %global phpver 7 %global runselftest 1 %global pgo_build 1 %global lto_build 0 %global break_build 0 %global debug_build 0 %global extension_dir %{_libdir}/%{name}/modules # macro 'php_debug_build' is global and re-used for pecl-builds linked against # system updated with a php debug-build while 'debug_build' is local and # allows to be combined with 'break_build' to generate temporary debug builds # without installing them - both implicit disable 'pgo_build' and 'lto_build' %if %php_debug_build %global _include_minidebuginfo 1 %global RH_GCC_DEBUG_OPTION "-g3" %global RH_CONFIGURE_DEBUG_OPTION "enable-debug" %global RH_STRIP_BINARY 0 %global pgo_build 0 %global lto_build 0 %else %if %debug_build %global _include_minidebuginfo 1 %global RH_GCC_DEBUG_OPTION "-g3" %global RH_CONFIGURE_DEBUG_OPTION "enable-debug" %global RH_STRIP_BINARY 0 %global pgo_build 0 %global lto_build 0 %else %global _include_minidebuginfo 0 %global RH_GCC_DEBUG_OPTION "-g0" %global RH_CONFIGURE_DEBUG_OPTION "disable-debug" %global RH_STRIP_BINARY 1 %endif %endif # link-time-optimization needs '--disable-gcc-global-regs' for configure %if %lto_build %global RH_LTO_CONFIGURE_OPTION "disable-gcc-global-regs" %else %global RH_LTO_CONFIGURE_OPTION "enable-gcc-global-regs" %endif Summary: PHP Scripting Language Name: php Version: 7.0.14 Release: 1%{?dist} License: PHP/Zend/BSD Group: Development/Languages URL: http://www.php.net/ Source0: http://www.php.net/distributions/php-%{version}.tar.xz Source1: opcache-zendoptimizer.php Source2: php-httpd-dummy.conf Source3: php-disabled-autotests.txt Source4: php-test-dirs.txt Source5: php-debug.ini Patch1: %{name}-dlopen.patch Patch2: %{name}-realpath-cache-openbasedir.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: binutils BuildRequires: bison BuildRequires: bzip2-devel BuildRequires: curl-devel BuildRequires: cyrus-sasl-devel BuildRequires: freetype-devel BuildRequires: gcc-c++ BuildRequires: gd-devel BuildRequires: gettext-devel BuildRequires: httpd-devel BuildRequires: krb5-devel BuildRequires: libc-client-devel BuildRequires: libedit-devel BuildRequires: libjpeg-turbo-devel BuildRequires: libpng-devel BuildRequires: libstdc++-devel BuildRequires: libtidy-devel BuildRequires: libtool-ltdl-devel BuildRequires: libxml2-devel BuildRequires: libzip-devel BuildRequires: openssl-devel BuildRequires: pam-devel BuildRequires: pcre-devel BuildRequires: perl BuildRequires: postfix BuildRequires: re2c BuildRequires: zlib-devel Provides: mod_%{name} Requires: %{name}-common %description PHP Scripting Language %package common Summary: common files %package cli Summary: command-line interface for php Requires: %{name}-common Provides: %{name}-cgi, %{name}-readline %package devel Summary: files needed for building extensions Requires: autoconf, automake, pcre-devel, re2c, %{name}-cli %package bcmath Summary: bcmath %package calendar Summary: calendar %package ctype Summary: ctype %package curl Summary: curl %package dom Summary: dom %package exif Summary: exif %package fileinfo Summary: fileinfo %package gd Summary: gd %package gettext Summary: gettext %package hash Summary: hash %package iconv Summary: iconv %package imap Summary: imap %package json Summary: json %package mbstring Summary: mbstring %package mysqli Summary: mysqli %package opcache Summary: opcache %package openssl Summary: openssl %package pcntl Summary: pcntl %package pdo Summary: pdo %package phar Summary: phar %package posix Summary: posix %package session Summary: session %package simplexml Summary: simplexml %package soap Summary: soap %package sockets Summary: socket %package tidy Summary: tidy %package tokenizer Summary: tokenizer %package xmlreader Summary: xmlreader %package xmlwriter Summary: xmlwriter %package zip Summary: zip # https://bugzilla.redhat.com/show_bug.cgi?id=1371549 %description bcmath %description calendar %description cli %description common %description ctype %description curl %description devel %description dom %description exif %description fileinfo %description gd %description gettext %description hash %description iconv %description imap %description json %description mbstring %description mysqli %description opcache %description openssl %description pcntl %description pdo %description phar %description posix %description session %description simplexml %description soap %description sockets %description tidy %description tokenizer %description xmlreader %description xmlwriter %description zip %prep %setup -q -n php-%{version} %patch1 -p1 %patch2 -p1 # drop windows specific headers and fix bogus permissions rm -f TSRM/tsrm_win32.h TSRM/tsrm_config.w32.h Zend/zend_config.w32.h ext/mysqlnd/config-win.h ext/standard/winver.h main/win32_internal_function_disabled.h main/win95nt.h find . -name \*.[ch] -exec chmod 644 {} \; # delete known failing or skipped tests %if %runselftest xargs rm -f < %{SOURCE3} %else xargs rm -rf < %{SOURCE4} %endif %build # force use of system libtool and regenerate configure scripts libtoolize --force --copy --quiet cat `aclocal --print-ac-dir`/{libtool,ltoptions,ltsugar,ltversion,lt~obsolete}.m4 > build/libtool.m4 touch configure.in ./buildconf --force # compiler and linker flags %if %lto_build RH_LTO_FLAGS="-flto -fno-fat-lto-objects -fuse-ld=gold -fuse-linker-plugin" %else RH_LTO_FLAGS="-fno-lto -fuse-ld=gold -fuse-linker-plugin" %endif export LOCAL_CFLAGS="-O3 %{RH_GCC_DEBUG_OPTION} -fstack-protector-strong --param=ssp-buffer-size=8 -fipa-pta -fira-loop-pressure -fivopts -fmerge-all-constants -fsemantic-interposition -ftree-loop-distribution -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-ivcanon -fvect-cost-model=unlimited -fwrapv -minline-all-stringops -fno-align-labels -fno-exceptions -fno-gcse -fno-math-errno -fno-strict-aliasing -Wno-pointer-sign -Wno-stack-protector $RH_LTO_FLAGS -Wa,--noexecstack" export CFLAGS="%{optflags} $LOCAL_CFLAGS" export CC="gcc $CFLAGS" export CXXFLAGS="$CFLAGS" export SH_LDFLAGS="-Wl,--as-needed -Wl,-z,now -Wl,-z,relro -Wl,-z,noexecstack -Wl,-z,nodump $CFLAGS" export LDFLAGS="$SH_LDFLAGS -pie -fPIE" # define extension directory export EXTENSION_DIR=%{extension_dir} # configure build process ./configure --quiet \ --host=x86_64-redhat-linux \ --build=x86_64-redhat-linux \ --target=x86_64-redhat-linux \ --prefix=%{_prefix} \ --program-prefix= \ --libdir=%{_libdir}/%{name} \ --disable-all \ --enable-bcmath=shared \ --enable-calendar=shared \ --enable-cli \ --enable-ctype=shared \ --enable-dom=shared \ --enable-exif=shared \ --enable-fileinfo=shared \ --enable-filter \ --enable-gd-native-ttf \ --enable-hash=shared \ --enable-inline-optimization \ --enable-json=shared \ --enable-libxml \ --enable-mbregex \ --enable-mbstring=shared \ --enable-mysqlnd \ --enable-opcache=shared \ --enable-pcntl=shared \ --enable-pdo=shared \ --enable-phar=shared \ --enable-posix=shared \ --enable-re2c-cgoto \ --enable-session=shared \ --enable-shared \ --enable-simplexml=shared \ --enable-soap=shared \ --enable-sockets=shared \ --enable-tokenizer=shared \ --enable-xml \ --enable-xmlreader=shared \ --enable-xmlwriter=shared \ --enable-zip=shared \ --with-apxs2=%{_bindir}/apxs \ --with-bz2=%{_prefix} \ --with-config-file-path=%{_sysconfdir} \ --with-config-file-scan-dir=%{_sysconfdir}/%{name}.lounge.d \ --with-curl=shared,%{_prefix} \ --with-freetype-dir=%{_prefix} \ --with-gd=shared,%{_prefix} \ --with-gettext=shared,%{_prefix} \ --with-iconv=shared \ --with-imap-ssl=%{_prefix} \ --with-imap=shared,%{_prefix} \ --with-kerberos=%{_prefix} \ --with-layout=GNU \ --with-libdir=%{_lib} \ --with-libedit=%{_prefix} \ --with-libxml-dir=%{_prefix} \ --with-libzip=%{_prefix} \ --with-mysql-sock=%{_sharedstatedir}/mysql/mysql.sock \ --with-mysqli=shared,mysqlnd \ --with-openssl=shared,%{_prefix} \ --with-pcre-regex=%{_prefix} \ --with-pcre-jit \ --with-pdo-mysql=shared,mysqlnd \ --with-pic \ --with-system-ciphers \ --with-tidy=shared,%{_prefix} \ --with-zlib \ --with-zlib-dir=%{_prefix} \ --disable-cgi \ --disable-dmalloc \ --disable-dtrace \ --disable-gcov \ --disable-gd-jis-conv \ --disable-huge-code-pages \ --disable-ipv6 \ --disable-opcache-file \ --disable-phpdbg \ --disable-rpath \ --disable-short-tags \ --disable-static \ --%{RH_LTO_CONFIGURE_OPTION} \ --%{RH_CONFIGURE_DEBUG_OPTION} if test $? != 0; then tail -500 config.log : configure failed exit 1 fi # build php with 'profile-guided-optimization' when enabled %if %pgo_build make %{?_smp_mflags} prof-gen /usr/bin/bash /rpmbuild/PHP-PGO/profile.sh --php_build $PWD make prof-clean make %{?_smp_mflags} prof-use %else make %{?_smp_mflags} %endif # stop rpmbuild and output infos for usage of the temporary binaries %if %break_build cp %{SOURCE5} "$PWD/php-debug.ini" > /dev/null EXTENSION_DIR="$PWD/modules" sed -i "s@__EXTENSION_DIR__@$EXTENSION_DIR@" "$PWD/php-debug.ini" echo -e "\n\n\e[1;31mBREAK-BUILD ENABLED\e[0m\n\n\e[1;32mPLEASE RUN:\e[0m export PHP_INI_SCAN_DIR=$PWD\n\e[1;32mCLI-BINARY:\e[0m $PWD/sapi/cli/php\n\e[1;32mAPACHE-MODULE:\e[0m $PWD/libs/libphp7.so\n\e[1;32mWEBSERVER: \e[0m http://localhost:9000\n" /usr/bin/bash /rpmbuild/PHP-PGO/profile.sh --php_build $PWD --webserveronly 1 exit 1 %endif # run test-suite when enabled %if %runselftest ulimit -s 32712 unset TZ LANG LC_ALL export LANG="C" TEST_PHP_EXECUTABLE="$PWD/sapi/cli/php" EXTENSION_DIR="$PWD/modules" PHP_INI_SCAN_DIR="$PWD/modules" NO_INTERACTION=1 MALLOC_CHECK_=2 MYSQL_TEST_HOST="localhost" MYSQL_TEST_SOCKET="/var/lib/mysql/mysql.sock" MYSQL_TEST_PORT="3306" MYSQL_TEST_USER="php_autotest" MYSQL_TEST_PASSWD="php_autotest" MYSQL_TEST_DB="php_autotest" PDO_MYSQL_TEST_DSN="mysql:host=localhost;dbname=php_autotest" PDO_MYSQL_TEST_SOCKET="/var/lib/mysql/mysql.sock" PDO_MYSQL_TEST_USER="php_autotest" PDO_MYSQL_TEST_PASS="php_autotest" PDO_MYSQL_TEST_ENGINE="MyISAM" cp %{SOURCE5} "$PWD/tmp-php.ini" > /dev/null sed -i "s@__EXTENSION_DIR__@$EXTENSION_DIR@" "$PWD/tmp-php.ini" $TEST_PHP_EXECUTABLE -n -c $PWD/tmp-php.ini $PWD/run-tests.php -n -c $PWD/tmp-php.ini find /var/www/sessiondata -user builduser -delete %endif %install install -m 0755 -d %{buildroot}%{_sysconfdir} %{buildroot}%{_sysconfdir}/httpd/conf %{buildroot}%{_libdir}/httpd/modules %{buildroot}%{_datadir}/%{name} install -m 0644 %{SOURCE1} %{buildroot}%{_datarootdir}/%{name}/zendoptimizer.php install -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/httpd/conf/httpd.conf INSTALL_ROOT=%{buildroot} make install # remove unpackaged files rm -rf %{buildroot}%{extension_dir}/*.a %{buildroot}%{_bindir}/{phptar} %{buildroot}%{_datadir}/pear %{buildroot}%{_libdir}/libphp%{phpver}.la %{buildroot}%{_mandir} %{buildroot}%{_sysconfdir}/httpd %{buildroot}%{_bindir}/phar %{buildroot}%{_bindir}/phar.phar # strip binaries for non-debug builds %if %RH_STRIP_BINARY strip -s --strip-unneeded %{buildroot}%{_libdir}/httpd/modules/libphp%{phpver}.so %{buildroot}%{extension_dir}/*.so %{buildroot}%{_bindir}/php %endif %files %attr(755,root,root) %{_libdir}/httpd/modules/libphp%{phpver}.so %files common %dir %{_datadir}/%{name} %dir %{_libdir}/%{name} %dir %{extension_dir} %files bcmath %{extension_dir}/bcmath.so %files calendar %{extension_dir}/calendar.so %files cli %{_bindir}/php %files ctype %{extension_dir}/ctype.so %files curl %{extension_dir}/curl.so %files devel %{_bindir}/php-config %{_bindir}/phpize %{_includedir}/php %{_libdir}/%{name}/build %files dom %{extension_dir}/dom.so %files exif %{extension_dir}/exif.so %files fileinfo %{extension_dir}/fileinfo.so %files gd %{extension_dir}/gd.so %files gettext %{extension_dir}/gettext.so %files hash %{extension_dir}/hash.so %files iconv %{extension_dir}/iconv.so %files imap %{extension_dir}/imap.so %files json %{extension_dir}/json.so %files mbstring %{extension_dir}/mbstring.so %files mysqli %{extension_dir}/mysqli.so %files opcache %{extension_dir}/opcache.so %{_datarootdir}/%{name}/zendoptimizer.php %files openssl %{extension_dir}/openssl.so %files pcntl %{extension_dir}/pcntl.so %files pdo %{extension_dir}/pdo.so %{extension_dir}/pdo_mysql.so %files phar %{extension_dir}/phar.so %files posix %{extension_dir}/posix.so %files session %{extension_dir}/session.so %files simplexml %{extension_dir}/simplexml.so %files soap %{extension_dir}/soap.so %files sockets %{extension_dir}/sockets.so %files tidy %{extension_dir}/tidy.so %files tokenizer %{extension_dir}/tokenizer.so %files xmlreader %{extension_dir}/xmlreader.so %files xmlwriter %{extension_dir}/xmlwriter.so %files zip %{extension_dir}/zip.so %changelog * Thu Dec 8 2016 Reindl Harald <h.reindl@thelounge.net> - update to PHP 7.0.14 - add 'with-pcre-jit' for upcoming 7.1 to configure * Sat Nov 26 2016 Reindl Harald <h.reindl@thelounge.net> - make sure that 'selftest' is using the intermediate-binaries in every case which became obvious on a machine running 7.1.0RC6 and building 7.0.14RC1 resulting in warnings about non-loadable extensions * Thu Nov 10 2016 Reindl Harald <h.reindl@thelounge.net> - update to PHP 7.0.13 * Sat Nov 5 2016 Reindl Harald <h.reindl@thelounge.net> - added patch to enable 'realpath_cache' with enabled 'open_basedir' we disable 'symlink' and 'link' for years and so CVE-2006-5178 has no point http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-5178 * Sat Oct 15 2016 Reindl Harald <h.reindl@thelounge.net> - macro 'lto_build' enables link-time-optimization which increases build memory-usage combined with profile-guided-optimization dramatically but may improve performance for production builds - adds '--disable-gcc-global-regs' to configure-flags - adds '-flto -fno-fat-lto-objects -fuse-ld=gold -fuse-linker-plugin' to compiler and linker flags * Tue Oct 4 2016 Reindl Harald <h.reindl@thelounge.net> - add '--disable-huge-code-pages' to configure - performance seems to be unpredictable and in doubt faster without * Sat Oct 1 2016 Reindl Harald <h.reindl@thelounge.net> - macro 'break_build' starts a webserver on port 9000 with the temporary mod_php - script '/rpmbuild/PHP-PGO/profile.sh' supports as second param 'onlywebserver' instead profiling and kill it afterwards so we can use it's generate-logic for 'httpd.conf' and 'php.ini' with current locations in the working directory - remove '-funroll-loops' from compiler-flags - enabled for pgo-builds by '-fprofile-use' - add '-fno-exceptions -fvect-cost-model=unlimited -fipa-pta -fsemantic-interposition' to compiler flags - add '-fwrapv' to compiler flags to avoid https://bugs.php.net/bug.php?id=71201 - compiler-flags for documentation purpose: '-m64 -O3 -g0 -fopenmp -mfpmath=sse -pipe -fomit-frame-pointer -finline-functions -fstack-protector-strong --param=ssp-buffer-size=8 -D_FORTIFY_SOURCE=2 -fipa-pta -fira-loop-pressure -fivopts -fmerge-all-constants -fsemantic-interposition -ftree-loop-distribution -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-ivcanon -fvect-cost-model=unlimited -fwrapv -minline-all-stringops -fno-align-labels -fno-exceptions -fno-gcse -fno-math-errno -fno-strict-aliasing -Wformat -Werror=format-security -Wno-pointer-sign -Wno-stack-protector' * Thu Sep 29 2016 Reindl Harald <h.reindl@thelounge.net> - change PGO sequence to use "make prof-gen; profile.sh; make prof-clean; make prof-use" - remove "-Wno-coverage-mismatch" from compiler flags - https://bugs.php.net/bug.php?id=73111 * Sun Sep 25 2016 Reindl Harald <h.reindl@thelounge.net> - add '-fmerge-all-constants' to compiler flags * Sat Sep 24 2016 Reindl Harald <h.reindl@thelounge.net> - add '-fno-strict-aliasing -fno-align-labels -fno-gcse' to compiler flags https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html Note: When compiling a program using computed gotos, a GCC extension, you may get better run-time performance if you disable the global common subexpression elimination pass by adding -fno-gcse to the command line * Fri Sep 23 2016 Reindl Harald <h.reindl@thelounge.net> - remove 'ftp', 'xmlrpc' and 'xslt' from build - rework call of test-suite to use default-settings instead cloned /etc/php.ini - removed useless options from configure now that we build with system-gd instead bundeled * Wed Sep 21 2016 Reindl Harald <h.reindl@thelounge.net> - define 'break_build' and local 'debug_build' macros to stop before tests and packaging - ship a 'debug-ini.php' with extensions and 'extension_dir' in the working directory - now we can use the built binaries without installing them on the system - usecase: temporary debug-builds or tests without running the whole build-process - output tells the needed env-export and how to call the binary export PHP_INI_SCAN_DIR=/home/builduser/rpmbuild/BUILD/php-7.0.11 CLI-BINARY: /home/builduser/rpmbuild/BUILD/php-7.0.11/sapi/cli/php * Sun Sep 18 2016 Reindl Harald <h.reindl@thelounge.net> - use 'profile-guided-optimization' instead of 'link-time-optimization' for memory/optimize-balance - define 'pgo_build' macro to disable 'profile-guided-optimization' temporary - we run scripted requests from a temporary webserver between make-stages to profile our application - benchmark our cms-system shows 7 percent higher performance for php7 - see: https://software.intel.com/en-us/blogs/2015/10/09/pgo-let-it-go-php - link with 'nodump' for enhanced security - remove 'mcrypt' from build (if-you-are-typing-the-word-mcrypt-into-your-code-you-are-doing-it-wrong) * Sat Sep 17 2016 Reindl Harald <h.reindl@thelounge.net> - move all extensions to sub-packages for minimzed dependencies * Tue Sep 6 2016 Reindl Harald <h.reindl@thelounge.net> - add '-fivopts -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-ivcanon' to compiler flags - explicit export of 'CC' environment variable with CFLAGS for optimized builds - cleanup ./configure params - use system-gd and disable some autotests (now supported without patches) - use system-libzip (now supported without patches) - remove skipped and failing autotests to keep focus on new regressions * Mon Aug 29 2016 Reindl Harald <h.reindl@thelounge.net> - cleanup spec-file to build more or less 'vanilla' php with only own optimizations - add 'php-httpd-dummy.conf' as temporary 'httpd.conf' at build-time for 'apxs' without hacks * Sun Aug 28 2016 Reindl Harald <h.reindl@thelounge.net> - add 're2c' to build-requires and '--enable-re2c-cgoto' to configure * Sat Aug 27 2016 Reindl Harald <h.reindl@thelounge.net> - build all extensions loadable to share them between httpd and cli * Fri Aug 19 2016 Reindl Harald <h.reindl@thelounge.net> - cleanup configure options - start with '--disable-all' and enable used features - build without unused modules - improves time for build and selftest - add '--disable-opcache-file' for smaller builds since we use only the shm-cache - add '-fno-math-errno -fira-loop-pressure -ftree-loop-distribution' to compiler flags> From a quick test, performance of loading browscap.ini > did not significantly change between 5.6 and 7.0. > When you compared to PHP 5.6, were you also loading > this browscap.ini? *yes* - i synced the "php.spec" for 5.6 and 7.0 days before the upgrade so that it's drop in and only the loadmodule line in httpd needs to be changed what we did was * restart webserver * benchmark cms 1 * restart webserver * benchmark cms 2 * note numbers "dnf -y upgrade" * restart webserver * benchmark cms 1 * restart webserver * benchmark cms 2 * note numbers drop from 100 to 50 requests per second, well, that application is *using* get_browser() within a if(function_exists('get_browser')) - hence i was able to add it to 'disabled_functions' - so it's not only about loading browscap and a likely regression in 7.0.14 but also about get_browser() with the same "browscap.ini" became noticeable slower PHP 5.6.26: Requests per second: 107.24 [#/sec] (mean) Time per request: 279.741 [ms] (mean) Time per request: 9.325 [ms] (mean, across all concurrent requests) Transfer rate: 1531.03 [Kbytes/sec] received PHP 7.0.11 PGO: Requests per second: 56.30 [#/sec] (mean) Time per request: 532.864 [ms] (mean) Time per request: 17.762 [ms] (mean, across all concurrent requests) Transfer rate: 803.75 [Kbytes/sec] received PHP 7.0.14 NON-BROWSCAP: Requests per second: 327.45 [#/sec] (mean) Time per request: 61.077 [ms] (mean) Time per request: 3.054 [ms] (mean, across all concurrent requests) Transfer rate: 4754.80 [Kbytes/sec] receivedso - now it is proven that get_browser() with PHP7 is magnitudes slower than with PHP5, i have stored the binaries and extensions of the two versions running before and after the upgrade and gave them identical configurations PHP 5.6.26 (cli) (built: Oct 3 2016 12:45:59) PHP 7.0.11 (cli) (built: Oct 5 2016 22:28:49) ______________________________ 10 x get_browser('Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0'); [harry@srv-rhsoft:/data/scripts/php5-versus-7]$ ./test.sh PHP5 real 0m5.876s user 0m5.799s sys 0m0.034s PHP7 real 0m14.396s user 0m14.216s sys 0m0.085s ______________________________ 100 x get_browser('Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0'); [harry@srv-rhsoft:/data/scripts/php5-versus-7]$ ./test.sh PHP5 real 0m57.583s user 0m57.180s sys 0m0.052s PHP7 real 2m23.615s user 2m22.030s sys 0m0.691s ______________________________ that's factor 2.4 and so in fact the asnwer to my initial question below is "get_browser()" which was used until yesterday on every inital request with no active session which is always true for "ab"-benchmarks so one thing is the dramatical memory usage with 7.0.14 but in general the function got extremely slow with the same "browscap.ini" _________________________ we have two different inhouse cms-systems, while one is 46% faster with PHP7 the other one sucks terrible - are there things known by developers which are internally slower now while most other become faster and should be avoided?indeed PHP 7.1 build with "--without-pcre-jit" is faster, while fast is relative given that the test did only 10 calls - what is the purpose of the JIT then and can this not be a runtime option for the cases where it brings a benefit? <?php $loops = 10; for($count=1; $count<=$loops; $count++) { $x = get_browser('Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0'); } ?> [harry@srv-rhsoft:/scripts/php5-versus-7]$ ./test.sh PHP 5.6 real 0m5.922s user 0m5.861s sys 0m0.027s PHP 7.0 real 0m14.894s user 0m14.716s sys 0m0.079s PHP 7.1 real 0m3.335s user 0m3.285s sys 0m0.031s