Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:117315 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 84905 invoked from network); 12 Mar 2022 16:53:50 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 12 Mar 2022 16:53:50 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 463151804B3 for ; Sat, 12 Mar 2022 10:17:51 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=0.6 required=5.0 tests=BAYES_50,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,HTML_MESSAGE, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS15169 209.85.128.0/17 X-Spam-Virus: Error (Cannot connect to unix socket '/var/run/clamav/clamd.ctl': connect: Connection refused) X-Envelope-From: Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Sat, 12 Mar 2022 10:17:47 -0800 (PST) Received: by mail-ej1-f54.google.com with SMTP id dr20so25390570ejc.6 for ; Sat, 12 Mar 2022 10:17:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:from:date:message-id:subject:to; bh=N3sWcXbXoNmV2ces4rL6+uF4KJsF8hPzLbhdpnwVVlI=; b=kJde0ii4RSxk1Psfc9gvxuPx5jFaKsu7htaP1MrJTLms00t2H8/LdXFubtv+QlTyoI Xnq9dFCVkzUJdWdKmX2W4mqd9ebaxX9VYRp1pXpQGrfFxFfyj2D/sJi0pdDERUWySCux L3WzIekFxSgCNEth6x3HVOpvswBql12OUf5L4H02O565cl4cKb8iWeZdT0RJmiG/zti4 5rym/xz+X1Htpyq2qZAi7FguLB/nGQ4gw3HREibGhZsYvKaAoIsTN8gOxI7m4W4dg/f9 oJ+B7nUpBiElPmXT2G36rasX206toqEAYjQfpJDKI2cGImSZ5ebZKGV9f5bjGP21Ss5+ wGYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=N3sWcXbXoNmV2ces4rL6+uF4KJsF8hPzLbhdpnwVVlI=; b=73Vp9oBpTBPv2DLJgw13ELqOp0KTScb/RarM4yquhXIfbrFAvFaSVxV7xSAPe89Lji 7OQMIDyUSNzhfRWXJjIHMc4qizXMTLPCm3/Qc0q0GU+kqnpKFNapWvyThiOKKt2vfIFv goEg7nK8TdGDBmv5hJSn21vxP88/EBkPLu6PTz07FjUsdQrISfadu0oFxZArMq+oqkyZ wEbGjiQ+m/D41FgWaLQPhHqztQJwI1wVaAQO3Oy0ki/+HG5JdsgkHbh8DCZiAZGdJ+vS KCqcB0fioTk+n+uvoIN/xEUdxP5NsTUaYJcIwvFj/iz/T7HCK5ld1HVMF7qtA/pis0MQ mhkg== X-Gm-Message-State: AOAM531xDkdyWXHiMBqHs1rwfspY068KLaPa0qOopqrEXIXa1D1cDLH+ sR4uTzu051HQmv34e/UlVSPQuEvRVeNH/ZlYEhSqFaPQeqY= X-Google-Smtp-Source: ABdhPJxY+kaAXajScwkg4OqiHFzh+CyXaOvbUTpXQGmdJel0kYl7LJUHHfqpPSRQiLRP5CYmmwYV22q29x62Ua2llVc= X-Received: by 2002:a17:906:1ece:b0:6ce:e14:6d92 with SMTP id m14-20020a1709061ece00b006ce0e146d92mr13279118ejj.408.1647109066302; Sat, 12 Mar 2022 10:17:46 -0800 (PST) MIME-Version: 1.0 Date: Sun, 13 Mar 2022 03:17:35 +0900 Message-ID: To: PHP internals Content-Type: multipart/alternative; boundary="000000000000cdaa4d05da097650" Subject: LTO support From: zeriyoshi@gmail.com (Go Kudo) --000000000000cdaa4d05da097650 Content-Type: text/plain; charset="UTF-8" At present, PHP cannot be built using LTO (Link Time Optimization). LTO is a compiler feature that can improve performance by optimizing at link time. Chromium is also using this feature. https://gcc.gnu.org/onlinedocs/gccint/LTO-Overview.html The reason for the LTO failure appears to be the Zend Engine's use of GCC's global register variables. Conversely, it is otherwise compatible with LTO. (except: opcache). I modified toolchain too to enable and validate LTOs outside of Zend Engine and OPcache: https://github.com/zeriyoshi/php-src/commit/b25c237837fec2f82d268d8dbd45ec886baf474f I tested the following compilation options: ``` gcc: (Debian 10.2.1-6) 10.2.1 20210110 CFLAGS="-fstack-protector-strong -fpic -fpie -O3 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" CXXFLAGS="${CFLAGS}" LDFLAGS="-Wl,-O1 -pie" $ ./sapi/cli/php ./Zend/bench.php simple 0.010 simplecall 0.005 simpleucall 0.010 simpleudcall 0.013 mandel 0.052 mandel2 0.049 ackermann(7) 0.012 ary(50000) 0.003 ary2(50000) 0.002 ary3(2000) 0.020 fibo(30) 0.035 hash1(50000) 0.004 hash2(500) 0.004 heapsort(20000) 0.012 matrix(20) 0.012 nestedloop(12) 0.010 sieve(30) 0.006 strcat(200000) 0.002 ------------------------ Total 0.261 ``` vs ``` gcc: (Debian 10.2.1-6) 10.2.1 20210110 CFLAGS="-fstack-protector-strong -fpic -fpie -O3 -flto -fuse-linker-plugin -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" CXXFLAGS="${CFLAGS}" LDFLAGS="-Wl,-O1 -pie -flto -fuse-linker-plugin" $ ./sapi/cli/php ./Zend/bench.php simple 0.006 simplecall 0.003 simpleucall 0.010 simpleudcall 0.014 mandel 0.050 mandel2 0.049 ackermann(7) 0.012 ary(50000) 0.003 ary2(50000) 0.002 ary3(2000) 0.020 fibo(30) 0.035 hash1(50000) 0.004 hash2(500) 0.004 heapsort(20000) 0.012 matrix(20) 0.011 nestedloop(12) 0.010 sieve(30) 0.007 strcat(200000) 0.002 ------------------------ Total 0.255 ``` In fact, it does not seem to work very well. However, it may be effective when large numbers of extensions are built into PHP. Is anyone interested in supporting this? --000000000000cdaa4d05da097650--