Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPNG kontra HHVM (z notatkami)

PHPNG kontra HHVM (z notatkami)

Leszek Krupiński

April 20, 2015
Tweet

More Decks by Leszek Krupiński

Other Decks in Programming

Transcript

  1. 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ć
  2. LEAFNODE * Konsulting - architektura, wydajność, bezpieczeństwo * PHPers, WebClusters

    - prezentacje workflow, architektura, wydajność, narzędzia * Facebook: PHPers, PHPers:Jobs
  3. 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
  4. 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
  5. 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
  6. 30% lepsze wyniki w testach syntetycznych Każdy pisze benchmarki tak,

    żeby wyniki wyszły jak najlepiej dla niego
  7. 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
  8. $y = 5; $y = 5 array[309, ‘$y’, 1] =

    array[305, 5, 1] 309 - T_VARIABLE 305 - T_LNUMBER Lexer
  9. A = B + C = 1 ; D var

    var var var value value value * 2 value products products products sums sums assign assign stmt stmt statements
  10. 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.
  11. HHVM (max 20 minut) * 2013 * problemy z dogadaniem

    się z Zendem/Internals/Community * sposób pracy nad RFD: dyskusja, głosowanie
  12. KOD PHP BYTECODE JIT COMPILER URUCHOMIENIE * kompilator Just-In-Time wykrywa

    często używane fragmenty kodu i kompiluje je do kodu maszynowego
  13. XHP

  14. 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)
  15. 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
  16. 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ń
  17. 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
  18. HHVM + wydajność + drop-in zamiast FPM + hack -

    zgodność (…ale będzie lepiej) - niewielka baza testowa - duże koszty wdrożenia
  19. Return type hinting Gorący temat, powracający, wcześniej nie było dobrej

    implementacji. Implementacja jest niezbędna do rfc
  20. <=>

  21. Kolejne interpretery "HippyVM on average is 7.3x faster than stock

    PHP and 2x faster than Facebook's HHVM. Please check our benchmarks"
  22. 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