PHP7 For Its Best Performance @laruence
SELF INTRODUCTION ‣ Author of Yaf, Yar, Yac, Yaconf, Taint Projects ‣ Maintainer of Opcache, Msgpack, PHP-Lua Projects ‣ PHP Core Developer Since 2011 ‣ Zend Consultant Since 2013 ‣ One of PHP7 Core Developers: Dmitry Stogov, Xinchen Hui, Nikita Popov ‣ Chief Software Architect at Lianjia Since 2015
W3Techs.com 100 ‣ Released in 1994 by Rasmus Lerdorf ‣ 20+ Years Programming Language ‣ Most Popular Web Service Program Language ‣ PHP7 is Released at 3 Dec 2015 ‣ Latest Version is PHP7.0.4 PHP
‣ For Unicodes Supports ‣ Started in 2005, Die in 2010 ‣ Most Features Goes Into PHP-5.3 ‣ ++PHP5 = PHP7 PHP6
‣ Based on PHP-5.5 JIT-Opcache Project ‣ One year long work for better PHP performance PHP7
‣ Memory Optimization - PHP spends 20% time on Memory ‣ Reduce Memory allocations ‣ Reduce Memory Usage ‣ Reduce Memory Indirection ‣ Cache friendly PHPNG zval gc_infoblock_info 0 16 40 56 Zval in PHP5 zval 0 16 Zval in PHP7
‣ Improved Performance: PHP 7 is up to twice as fast as PHP 5.6 ‣ Significantly Reduced Memory Usage ‣ Abstract Syntax Tree ‣ Consistent 64-bit Support ‣ Improved Exception Hierarchy ‣ Many Fatal Errors Converted to Exceptions ‣ The Null Coalescing Operator (??) ‣ Return & Scalar Type Declarations ‣ Anonymous Classes ‣ And More.. PHP7
BENCHMARK
REAL-LIFE APPLICATION BENCH
PHP5.6 VS PHP7
PERFORMANCE COMPARISON BY ULABOX
PERFORMANCE COMPARISON BY ATRAPALO
PERFORMANCE COMPARISON BY WEIBO 15% 20% 25% 30% 35% 40% 45% 12/13/15 12/14/15 12/15/15 12/16/15 12/17/15 12/18/15 12/19/15 12/20/15 12/21/15 12/22/15 12/23/15 12/24/15 12/25/15 12/26/15 12/27/15 12/28/15 12/29/15 12/30/15 12/31/15 01/01/16 01/02/16 01/03/16 01/04/16 01/05/16 01/06/16 01/07/16 01/08/16 01/09/16 01/10/16 01/11/16 01/12/16 01/13/16 01/14/16 01/15/16 01/16/16 01/17/16 01/18/16 01/19/16 01/20/16 01/21/16 01/22/16 01/23/16 01/24/16 01/25/16 01/26/16 01/27/16 01/28/16 01/29/16 01/30/16 01/31/16 02/01/16 02/02/16 02/03/16 02/04/16 02/05/16 CPU	:	User	Time 0 1 2 3 4 5 6 7 8 DateTime 12/14/15	13 12/15/15	9 12/16/15	5 12/17/15	1 12/17/15	21 12/18/15	17 12/19/15	13 12/20/15	9 12/21/15	5 12/22/15	1 12/22/15	21 12/23/15	17 12/24/15	13 12/25/15	9 12/26/15	5 12/27/15	1 12/27/15	21 12/28/15	17 12/29/15	13 12/30/15	9 12/31/15	5 1/1/16	1 1/1/16	21 1/2/16	17 1/3/16	13 1/4/16	9 1/5/16	5 1/6/16	1 1/6/16	21 1/7/16	17 1/8/16	13 1/9/16	9 1/10/16	5 1/11/16	1 1/11/16	21 1/12/16	17 1/13/16	13 1/14/16	9 1/15/16	5 1/16/16	1 1/16/16	21 1/17/16	17 1/18/16	13 1/19/16	9 1/20/16	5 1/21/16	1 1/21/16	21 1/22/16	17 1/23/16	13 1/24/16	9 1/25/16	5 1/26/16	1 1/26/16	21 1/27/16	17 1/28/16	13 1/29/16	9 1/30/16	5 1/31/16	1 1/31/16	21 2/1/16	17 2/2/16	13 2/3/16	9 2/4/16	5 2/5/16	1 Used	Memory
‣ PHP 7 is Up to Twice as Fast as PHP 5.6 ‣ Significantly Reduced Memory Usage ‣ However, It Could Be Faster… MAKE PHP7 FASTER
‣ Unix Domain Socket ‣ FastCGI Params ‣ Use Static PM ‣ Less Configuration is Better ‣ Opt Children Number = Total CPU Resource / CPU Usage Per Request ‣ Of course, 400 children also make sense NGNIX+PHP-FPM
‣ Deploying Document Root in Tmpfs ‣ Use Fixed Size Memory ‣ Data Could Be Lost After Reboot USE TMPFS
USE LATEST COMPILER ‣ More Compiler Optimization ‣ GCC4.8 - Global Registers ‣ %r14 : execute_data ‣ %r15: opline ‣ Up to 10% Performance Improvement
Using PGO is simple in PHP7 USE PGO ‣ Profile Guided Optimization ‣ Optimize for Specific Cases ‣ Optimization According to Data Collected 
 in Runtime ‣ Up to 7% Performance Improvement ‣ Each Coin Has Two Side
‣ Persistent Secondary File-Based Cache for OPCache ‣ Shared Memory is Limited ‣ Cache Can Live Across Processes ‣ opcache.file_cache=/tmp/ ‣ opcache.file_cache_only? OPCACHE FILE CACHE
‣ Hugepages - Reduce TLB Miss ‣ Opcache.huge_code_page - Reduce iTLB miss ‣ Shared Memory ‣ Regular Memory Allocations ‣ Note: SIGBUS on Forking ‣ USE_ZEND_ALLOC_HUGE_PAGES = 1 ‣ PHP7.0.5 USE HUGEPAGES
Always Do Your Own Benchmark
‣ http://w3techs.com/technologies/overview/programming_language/all ‣ http://talks.php.net/confoo16#/perf2014 ‣ https://carlosbuenosvinos.com/first-tests-with-php7-in-production-at-atrapaloeng/ ‣ https://techblog.badoo.com/.../how-badoo-saved-one-million-dollars-switching-to-php7/ Links
Q&A

PHP7 - For Its Best Performance

  • 1.
    PHP7 For Its BestPerformance @laruence
  • 2.
    SELF INTRODUCTION ‣ Authorof Yaf, Yar, Yac, Yaconf, Taint Projects ‣ Maintainer of Opcache, Msgpack, PHP-Lua Projects ‣ PHP Core Developer Since 2011 ‣ Zend Consultant Since 2013 ‣ One of PHP7 Core Developers: Dmitry Stogov, Xinchen Hui, Nikita Popov ‣ Chief Software Architect at Lianjia Since 2015
  • 3.
    W3Techs.com 100 ‣ Releasedin 1994 by Rasmus Lerdorf ‣ 20+ Years Programming Language ‣ Most Popular Web Service Program Language ‣ PHP7 is Released at 3 Dec 2015 ‣ Latest Version is PHP7.0.4 PHP
  • 4.
    ‣ For UnicodesSupports ‣ Started in 2005, Die in 2010 ‣ Most Features Goes Into PHP-5.3 ‣ ++PHP5 = PHP7 PHP6
  • 5.
    ‣ Based onPHP-5.5 JIT-Opcache Project ‣ One year long work for better PHP performance PHP7
  • 6.
    ‣ Memory Optimization- PHP spends 20% time on Memory ‣ Reduce Memory allocations ‣ Reduce Memory Usage ‣ Reduce Memory Indirection ‣ Cache friendly PHPNG zval gc_infoblock_info 0 16 40 56 Zval in PHP5 zval 0 16 Zval in PHP7
  • 7.
    ‣ Improved Performance:PHP 7 is up to twice as fast as PHP 5.6 ‣ Significantly Reduced Memory Usage ‣ Abstract Syntax Tree ‣ Consistent 64-bit Support ‣ Improved Exception Hierarchy ‣ Many Fatal Errors Converted to Exceptions ‣ The Null Coalescing Operator (??) ‣ Return & Scalar Type Declarations ‣ Anonymous Classes ‣ And More.. PHP7
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
    PERFORMANCE COMPARISON BYWEIBO 15% 20% 25% 30% 35% 40% 45% 12/13/15 12/14/15 12/15/15 12/16/15 12/17/15 12/18/15 12/19/15 12/20/15 12/21/15 12/22/15 12/23/15 12/24/15 12/25/15 12/26/15 12/27/15 12/28/15 12/29/15 12/30/15 12/31/15 01/01/16 01/02/16 01/03/16 01/04/16 01/05/16 01/06/16 01/07/16 01/08/16 01/09/16 01/10/16 01/11/16 01/12/16 01/13/16 01/14/16 01/15/16 01/16/16 01/17/16 01/18/16 01/19/16 01/20/16 01/21/16 01/22/16 01/23/16 01/24/16 01/25/16 01/26/16 01/27/16 01/28/16 01/29/16 01/30/16 01/31/16 02/01/16 02/02/16 02/03/16 02/04/16 02/05/16 CPU : User Time 0 1 2 3 4 5 6 7 8 DateTime 12/14/15 13 12/15/15 9 12/16/15 5 12/17/15 1 12/17/15 21 12/18/15 17 12/19/15 13 12/20/15 9 12/21/15 5 12/22/15 1 12/22/15 21 12/23/15 17 12/24/15 13 12/25/15 9 12/26/15 5 12/27/15 1 12/27/15 21 12/28/15 17 12/29/15 13 12/30/15 9 12/31/15 5 1/1/16 1 1/1/16 21 1/2/16 17 1/3/16 13 1/4/16 9 1/5/16 5 1/6/16 1 1/6/16 21 1/7/16 17 1/8/16 13 1/9/16 9 1/10/16 5 1/11/16 1 1/11/16 21 1/12/16 17 1/13/16 13 1/14/16 9 1/15/16 5 1/16/16 1 1/16/16 21 1/17/16 17 1/18/16 13 1/19/16 9 1/20/16 5 1/21/16 1 1/21/16 21 1/22/16 17 1/23/16 13 1/24/16 9 1/25/16 5 1/26/16 1 1/26/16 21 1/27/16 17 1/28/16 13 1/29/16 9 1/30/16 5 1/31/16 1 1/31/16 21 2/1/16 17 2/2/16 13 2/3/16 9 2/4/16 5 2/5/16 1 Used Memory
  • 14.
    ‣ PHP 7is Up to Twice as Fast as PHP 5.6 ‣ Significantly Reduced Memory Usage ‣ However, It Could Be Faster… MAKE PHP7 FASTER
  • 15.
    ‣ Unix DomainSocket ‣ FastCGI Params ‣ Use Static PM ‣ Less Configuration is Better ‣ Opt Children Number = Total CPU Resource / CPU Usage Per Request ‣ Of course, 400 children also make sense NGNIX+PHP-FPM
  • 16.
    ‣ Deploying DocumentRoot in Tmpfs ‣ Use Fixed Size Memory ‣ Data Could Be Lost After Reboot USE TMPFS
  • 17.
    USE LATEST COMPILER ‣More Compiler Optimization ‣ GCC4.8 - Global Registers ‣ %r14 : execute_data ‣ %r15: opline ‣ Up to 10% Performance Improvement
  • 18.
    Using PGO issimple in PHP7 USE PGO ‣ Profile Guided Optimization ‣ Optimize for Specific Cases ‣ Optimization According to Data Collected 
 in Runtime ‣ Up to 7% Performance Improvement ‣ Each Coin Has Two Side
  • 19.
    ‣ Persistent SecondaryFile-Based Cache for OPCache ‣ Shared Memory is Limited ‣ Cache Can Live Across Processes ‣ opcache.file_cache=/tmp/ ‣ opcache.file_cache_only? OPCACHE FILE CACHE
  • 20.
    ‣ Hugepages -Reduce TLB Miss ‣ Opcache.huge_code_page - Reduce iTLB miss ‣ Shared Memory ‣ Regular Memory Allocations ‣ Note: SIGBUS on Forking ‣ USE_ZEND_ALLOC_HUGE_PAGES = 1 ‣ PHP7.0.5 USE HUGEPAGES
  • 21.
    Always Do YourOwn Benchmark
  • 22.
    ‣ http://w3techs.com/technologies/overview/programming_language/all ‣ http://talks.php.net/confoo16#/perf2014 ‣https://carlosbuenosvinos.com/first-tests-with-php7-in-production-at-atrapaloeng/ ‣ https://techblog.badoo.com/.../how-badoo-saved-one-million-dollars-switching-to-php7/ Links
  • 23.