php8 , JIT(Just-In-Time) 성능 측정
* opcache와 jit 차이
OpCache (php5.5): 인터프리터가 생성한 OPCode를 메모리에 저장하여 실행
- 저장한 OPCode를 실행할때도 VM을 거처서 CPU에서 실행됨
JIT (php8.0) : JIT(Just-In-Time) 컴파일러가 생성한 기계어를 메모리 저장하여 실행
- 저장한 기계어 코드는 CPU에서 바로 실행됨
https://php.watch/versions/8.0/JIT
//-------------------------------------
php.ini 파일 설정
opcache.enable=1
opcache.enable_cli=1
opcache.jit_buffer_size=256M
opcache.jit=tracing
//-------------------------------------
opcode.jit 옵션
disable : 완전 불가
off : 불가, 런타임에서 동작시키기 가능
on : tracing과 동일
tracing : 1254 (CRTO)
function : 1205 (CRTO)
4자리숫자 : CRTO
C: CPU-specific Optimization Flags
0: Disable CPU-specific optimization.
1: Enable use of AVX, if the CPU supports it.
R: Register Allocation
0: Don't perform register allocation.
1: Perform block-local register allocation.
2: Perform global register allocation.
T: Trigger
0: Compile all functions on script load.
1: Compile all functions on first execution.
2: Profile first request and compile the hottest functions afterwards.
3: Profile on the fly and compile hot functions.
4: Currently unused.
5: Use tracing JIT. Profile on the fly and compile traces for hot code segments.
O: Optimization Level
0: No JIT.
1: Minimal JIT (call standard VM handlers).
2: Inline VM handlers.
3: Use type inference.
4: Use call graph.
5: Optimize whole script.
//-------------------------------------
opcache.jit 옵션 값에 따른 성능 측정 결과
- tracing은 20-30%, function은 10-15% 성능 향상
- 초당 실행수
코드1
코드2
코드3
opcache_get_status()['jit']
결과값 kind, opt_level, opt_flags
disable
2439
2030
343
000
off
2439
2040
351
000
on
2962
2631
462
546
tracing(1254)
2857
2285
441
546
1254
2985
2631
466
546
function(1205)
2666
2352
401
056
1205
2941
2597
458
056
1255
2962
2614
475
556
//-----------------------------------------------------------------------------
The Definitive PHP 7.2, 7.3, 7.4, 8.0, and 8.1 Benchmarks (2022)
https://kinsta.com/blog/php-benchmarks/
PHP 8.1 Performance Is Continuing To Improve With Early Benchmarks
https://www.phoronix.com/scan.php?page=news_item&px=PHP-8.1-Benchmarks-Perf-Early
PHP 8: JIT performance in real-life web applications
https://stitcher.io/blog/jit-in-real-life-web-applications
Just-In-Time (JIT) Compilation in PHP 8.0
https://lindevs.com/just-in-time-jit-compilation-in-php-8-0/
//-------------------------------------
https://www.php.net/releases/8.0/en.php
//-------------------------------------
벤치마크 소스
https://github.com/php/php-src/blob/master/Zend/bench.php
https://stitcher.io/blog/preloading-in-php-74
https://www.cloudpanel.io/docs/v1/guides/php/opcache-preload