PHP 버전별 컴퓨팅 속도 비교

8594 단어 PHPtech

개요


최근에 PHP를 접촉하기 시작했는데 PHP의 계산 처리가 느리다고 들었어요. 아니요. 의외로 속도가 빨라졌어요. 그래서 실제 상황을 다른 버전으로 나누어 대충 기준을 비교하고 싶어요.
이번에 참고할 페이지는 여기 있습니다.
https://qiita.com/hanaata/items/c91788bcac2a40f1bb05
상기 사이트는 php를 비교하지 않았지만 실제 비교를 바탕으로 다른 언어와 비교할 수 있기 때문에 같은 lipnits 서열을 계산하는 시간을 측정했다.(물론 기계의 출력 차이가 있기 때문에 좋은 비교는 아니지만,)
LeibnizFormula.php
<?php

function leibniz_formula()
{
  $s = 0;
  for ($i = 0; $i < 10**8; $i++)
  {
    $s += ((-1)**$i)/(2*$i + 1);
  }
  return $s;
}

leibniz_formula()
기타 실제 소스 코드는 이쪽에 있습니다.Docker와 Makefile로 빠르게 구축할 수 있으니 가능하면 놀아보세요.
https://github.com/Kai180621/php-benchmark

측량하다


그럼 실제로 측정해 보세요.
이번에 사용한 php 버전은 다음과 같다.
  • php 5.6.40
  • php 7.0.33
  • php 7.4.16
  • php 8.0.3
  • ※ 그나저나 실제로는 한 번 한 번 측정한 결과 기본적으로 고정되어 있습니다.

    php 5.6


    우선 php5.6부터 시작합니다.
    $ /usr/bin/time -f "\nreal:%e[sec]\nuser:%U[sec]\nsys:%S[sec]\nMemory:%M[KB]" php LeibnizFormula.php
    
    real:15.38[sec]
    user:15.34[sec]
    sys:0.01[sec]
    Memory:20560[KB]
    
    어때요...?웃다 웃다
    참고 기사를 대충 본 느낌은 C언어(3.68s)와 자바(8.18s)에 밀렸지만 파이톤(49.65s)을 보면 나쁘지 않은 것 같아 웃었다.

    php 7.0


    그럼 다음은 php7입니다.0.
    $ /usr/bin/time -f "\nreal:%e[sec]\nuser:%U[sec]\nsys:%S[sec]\nMemory:%M[KB]" php LeibnizFormula.php
    
    real:12.97[sec]
    user:12.94[sec]
    sys:0.00[sec]
    Memory:23184[KB]
    
    아, 아직 이르다.약 85퍼센트의 시간.다만, 대가인지 메모리 소비도 늘었다.

    php 7.4


    그럼 다음은 7.4입니다.같은 7이라서 기대가 안 돼요.나는
    $ /usr/bin/time -f "\nreal:%e[sec]\nuser:%U[sec]\nsys:%S[sec]\nMemory:%M[KB]" php LeibnizFormula.php
    
    real:10.17[sec]
    user:10.16[sec]
    sys:0.01[sec]
    Memory:21752[KB]
    
    짧아졌어!!아까보다 많이 개선됐네.깜짝 놀랐어요.

    php 8.0


    그럼 마지막으로 php8입니다.이것에 대한 기대가 크다.
    $ /usr/bin/time -f "\nreal:%e[sec]\nuser:%U[sec]\nsys:%S[sec]\nMemory:%M[KB]" php LeibnizFormula.php
    
    real:10.26[sec]
    user:10.20[sec]
    sys:0.01[sec]
    Memory:21928[KB]
    
    어??전혀 변하지 않았다.빨라졌다면서요?그래서 조사해 보니 이 보도가 발견되었다.
    https://solidseed.co.jp/column/php8-jit/
    요컨대 JIT라는 기술을 도입해 속도가 빠른 것은 사실이지만 기본적으로 OFF 상태이기 때문에 설정해야 한다.

    php 8.0 with JIT


    php.ini에 다음 설정이 추가되었습니다.
    php.in
    zend_extension = opcache
    [opcache]
    opcache.enable_cli=1             
    opcache.enable = 1
    opcache.jit = on
    opache.optimization_level=0x7FFFBFFF
    opcache.jit_buffer_size = 128M
    
    그리고 실행 결과는 여기에 있다.
    /usr/bin/time -f "\nreal:%e[sec]\nuser:%U[sec]\nsys:%S[sec]\nMemory:%M[KB]" php LeibnizFormula.php
    
    real:10.01[sec]
    user:9.87[sec]
    sys:0.07[sec]
    Memory:25424[KB]
    
    응, 거의 변한 것 같지 않아.JIT는 현금 구조인지 몇 번 뛰었더니 0.5s 정도가 빨라졌다.
    캐시 부분 메모리 사용량이 늘었기 때문에 JIT 자체가 작용할 수 있지 않을까요.?
    사실 이쪽 프로그램을 뛰게 해 봤어요. 자기보다 속도가 훨씬 빨라서 JIT가 효과를 발휘하는 데도 조건이 있는 것 같아요.
    https://qiita.com/rana_kualu/items/73c346b3feadfa3a5b21
    JIT는 사전에 소스 코드를 로컬 코드로 변환해야 하는데 리버니즈 포뮬라는 비교적 원시적인 계산에 그쳐 큰 효과를 발휘하지 못한 것으로 예측됐다.이 부분은 앞으로 검증이 필요한 부분이 있으면 보충해 적겠습니다.
    그럼, 자유 연구처럼 변했지만 읽어주셔서 감사합니다!웃다 웃다

    인증표(사은품)


    이것은 나중에 다시 여러 번 검증한 표다.
    5.6
    7.0
    7.4
    8.0
    8.0 JIT
    18.85s
    16.23s
    11.05s
    12.31s
    10.13s
    18.74s
    13.91s
    10.44s
    10.49s
    9.67s
    17.84s
    15.02s
    11.09s
    11.15s
    9.83s

    좋은 웹페이지 즐겨찾기