PHPNG kontra HHVM
Leszek Krupiński 4developers 2015
* Pokazanie jak działa php w środku - wszyscy wiedzą o opcache, a szczegóły zna niewielu
* część informacji dostępnych wszędzie (nowości w PHP 5.6)
* część tylko dla internalsów
* podstawa teoretyczna - niezbędne informacje
* wnioski
* bez wgryzania się w szczegóły jak uruchomić
PHP 7
w wyniku głosowania nie będzie nigdy wydanej wersji 6
planowane wydanie: listopad 2015
Slide 9
Slide 9 text
PHP NG
prace rozpoczęte w styczniu 2013 niejawnie przez Zend. Wcześniej 2 lata pracy nad JIT dla PHP5. Merge w wyniku głosowania - sierpień 2014. Cel:
refaktoryzacja kodu, optymalizacja, podstawa do dalszego rozwoju. Autor: Dmitry Stogov, Zend, Sankt Petersburg
Slide 10
Slide 10 text
Głęboka
refaktoryzacja
* szczegóły - Dmitry Stogov na ZendCon 2014, będzie dostępne nagranie; link do prezentacji z tej sesji na końcu wykładu
Slide 11
Slide 11 text
Optymalizacja
struktur
wewnętrznych
* zmniejszony rozmiar struktury zval
* zmniejszona i zoptymalizowana struktura HashTable
* HashTable zmniejszony z 72 do 56 bytes
* Bucket zmniejszony z 72 do 32 bytes
Slide 12
Slide 12 text
Operacje na stosie
bardzo duża zmiana wywołań funkcji - duża optymalizacja drogiego kodu
Slide 13
Slide 13 text
Zarządzanie pamięcią
wcześniej 20% czasu poświęcone na zarządzanie pamięcią
Slide 14
Slide 14 text
Immutable Array
Slide 15
Slide 15 text
Efekty
Slide 16
Slide 16 text
30% lepsze wyniki
w testach
syntetycznych
Każdy pisze benchmarki tak, żeby wyniki wyszły jak najlepiej dla niego
Slide 17
Slide 17 text
20-70% szybsze
działanie prawdziwych
aplikacji
Jeden z wyznaczników: strona tytułowa Wordpressa 60% szybsza
Abstract Syntax Tree
* struktura pomocnicza pomiędzy parsowaniem a kompilacją
* usuwa elementy zbędne do uruchomienia
* dodaje informacje pomocnicze
* zmniejszona liczba haków spinających parser z kompilatorem
* oddzielenie parsera od kompilatora - oddzielenie składni od problemów technicznych
* potencjał do dalszych optymalizacji w przyszłości
Drobne zmiany
w składni
planowane, nie będą poprawiane
Slide 38
Slide 38 text
Ze względu na fakt, że w ramach wywołania funkcji stos nie jest kopiowany, w ramach funkcji zmiany na argumentach wpływają na stan stosu.
Slide 39
Slide 39 text
HHVM
[20MIN]
* facebook
* wyśrubowane potrzeby serwisu
Slide 40
Slide 40 text
HipHop for PHP
2010
Slide 41
Slide 41 text
KOD PHP
KOD C
KOMPILACJA
URUCHOMIENIE
wady: mała kompatybilność, kłopotliwy proces kompilacji
Slide 42
Slide 42 text
HHVM
(max 20 minut)
* 2013
* problemy z dogadaniem się z Zendem/Internals/Community
* sposób pracy nad RFD: dyskusja, głosowanie
Slide 43
Slide 43 text
KOD PHP
BYTECODE
JIT COMPILER
URUCHOMIENIE
* kompilator Just-In-Time wykrywa często używane fragmenty kodu i kompiluje je do kodu maszynowego
Slide 44
Slide 44 text
Hack
Slide 45
Slide 45 text
Return type hinting
Member variable types
Type-safe collections
Generics
Type aliasing
Nullable types
Tuples
Shapes
Slide 46
Slide 46 text
nullable types
Slide 47
Slide 47 text
tuples
Slide 48
Slide 48 text
type aliasing
Slide 49
Slide 49 text
generics
Slide 50
Slide 50 text
return type hinting
statyczne sprawdzanie poprawności kodu
znacznie lepsze niż anotacje
Slide 51
Slide 51 text
XHP
Slide 52
Slide 52 text
Transpiler
konwersja kodu Hack do PHP
mozliwość pisania kodu Hack, a wykonywanie go jako zwykłego PHP
Slide 53
Slide 53 text
Zgodność HHVM z PHP
Slide 54
Slide 54 text
Open Source Tests: 95.15%
25 Frameworks at 100%
http://hhvm.com/frameworks/
Na papierze wygląda to dobrze, ale bywa różnie
Slide 55
Slide 55 text
Uruchamianie
Długo trwa; na linuksach w miarę proste; są gotowe instrukcje
Narzędzia command line, daemon działający cały czas (dlatego możliwe są optymalizacje JIT)
Slide 56
Slide 56 text
HTTP Server PHP FPM Backend
class2.php
class1.php
index.php
Slide 57
Slide 57 text
HTTP Server HHVM Backend
class2.php
class1.php
index.php
1. google.com
2. facebook.com
3. youtube.com
4. yahoo.com
5. baidu.com
6. amazon.com
7. wikipedia.org
8. twitter.com
9. taobao.com
10. qq.com
* system problematyczny
* trudna kompilacja, małe wsparcie, małe rozpowszechnienie
* możliwe niekompatybilności
* wykrzacza się
* do testów, lokalnie - jak najbardziej
* nie każdy ma team programistów gotowych do poprawiania core hacka jak się coś schrzani
* HHVM jest wątkowany - wspólne środowisko (setlocale)
* faktyczne zalety w bardzo niewielkim procencie zastosowań
Slide 61
Slide 61 text
Roadmap 2015
Integracja LLVM
Nowe platformy
Garbage collector
Zarządzanie pamięcią
Wsparcie dla OS X
Integracja z Hack typechecker
Pliki INI
XHP 2.0 w Hack
Poprawki zgodności
Slide 62
Slide 62 text
Fight!
Slide 63
Slide 63 text
PHPNG/PHP7
+ duże community
+ szeroka baza testowa
+ perspektywy (AST)
- brak JIT
- chaotyczny rozwój
Slide 64
Slide 64 text
HHVM
+ wydajność
+ drop-in zamiast FPM
+ hack
- zgodność (…ale będzie lepiej)
- niewielka baza testowa
- duże koszty wdrożenia
Slide 65
Slide 65 text
Przyszłość
Slide 66
Slide 66 text
PHP 7
Slide 67
Slide 67 text
Return type hinting
Gorący temat, powracający, wcześniej nie było dobrej implementacji. Implementacja jest niezbędna do rfc
Slide 68
Slide 68 text
Oprócz tego wiszące od lat tematy, typu named parameters
Slide 69
Slide 69 text
Scalar Type Hints
Model hybrydowy
Slide 70
Slide 70 text
Fatal Exceptions
Slide 71
Slide 71 text
T_SPACESHIP
Because T_PAAMAYIM_NEKUDOTAYIM was not enough.
Slide 72
Slide 72 text
<=>
Slide 73
Slide 73 text
Kolejne interpretery
"HippyVM on average is 7.3x faster than stock PHP and 2x faster than Facebook's HHVM. Please check our benchmarks"
Slide 74
Slide 74 text
Specyfikacja języka
opracowana przez Facebooka
wcześniej brak bo: * brak czasu i zasobów * niespójny język
Slide 75
Slide 75 text
Czy potrzebne jest
wiele interpreterów?
* może lepiej by było skupić się na jednym?
* “problem wielu frameworków”
* konkurencja pobudza i motywuje - standard w wielu językach (Java, Python)
* różne interpretery mogą spełniać różne zadania i oczekiwania
Slide 76
Slide 76 text
Linki
http://bit.ly/phpng-zendcon
http://bit.ly/php-ast
http://bit.ly/php7timeline
https://github.com/php/php-langspec
http://bit.ly/hhvm-phpcon2014
https://wiki.php.net/phpng
https://wiki.php.net/phpng-int
https://wiki.php.net/rfc
http://bit.ly/hhvm-etsy
Slide 77
Slide 77 text
Pytania?
Slide 78
Slide 78 text
Dziękuję
@leafnode http://speakerdeck.com/leafnode/
i zapraszam na mój drugi wykład
“Dobrze posól swoje hasło”, 17:00, Security