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

HHVM for PHP and Hack

Mariusz Gil
September 27, 2014

HHVM for PHP and Hack

Mariusz Gil

September 27, 2014
Tweet

More Decks by Mariusz Gil

Other Decks in Programming

Transcript

  1. HHVM HACK
    PHP
    + +
    Mariusz Gil

    View Slide

  2. View Slide

  3. View Slide

  4. BE FAST
    AT
    SCALE

    View Slide

  5. View Slide

  6. View Slide

  7. View Slide

  8. View Slide

  9. View Slide

  10. View Slide

  11. View Slide

  12. View Slide

  13. IS SLOW

    View Slide

  14. ISN’T FAST

    View Slide

  15. CODE
    INTERPRET
    TO
    OPCODE
    OPCODE
    EXECUTION
    OPCODE CACHE

    View Slide

  16. SOLUTION NEEDED

    View Slide

  17. 2008

    View Slide

  18. 2010

    View Slide

  19. 2010

    View Slide

  20. SUCCESS
    50% CPU USAGE REDUCTION

    View Slide

  21. CODE
    TRANSFORM
    CODE
    TO C++
    COMPILE
    WITH
    G++
    EXECUTE
    NATIVE
    CODE

    View Slide

  22. FAILURE?

    View Slide

  23. 2010

    View Slide

  24. 2013

    View Slide

  25. HHVM
    OPEN SOURCE VIRTUAL MACHINE FOR PHP

    View Slide

  26. HHVM
    OPEN SOURCE VIRTUAL MACHINE FOR PHP
    PHP5 SUPPORT*
    HACK SUPPORT
    JIT COMPILATION
    HHVM NATIVE INTERFACE
    FAST CGI SUPPORT
    CLI SUPPORT
    HPHPD

    View Slide

  27. CODE
    TRANSFORM
    CODE
    HHBC
    OPTIMIZE
    TRANSLATE
    HHBC TO
    X86-64 CODE
    EXECUTE
    NATIVE
    CODE

    View Slide

  28. cat ./phpversion.php
    !
    var_dump(phpversion());
    !
    !
    php -f ./phpversion.php
    string(16) "5.5.9-1ubuntu4.4"
    !
    !
    hhvm -f ./phpversion.php
    string(11) "5.6.99-hhvm"

    View Slide

  29. cd/var/www/webapp;
    !
    hhvm --mode server
    -vServer.Type=fastcgi
    -vServer.FileSocket=/var/run/hhvm/hhvm.sock
    -vAdminServer.Port=9001
    !
    !
    root /var/www/webapp;
    fastcgi_pass unix:/var/run/hhvm/hhvm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;

    View Slide

  30. alias composer="hhvm -v ResourceLimit.SocketDefaultTimeout=30
    -v Http.SlowQueryThreshold=30000
    /usr/local/bin/composer”

    View Slide

  31. JIT OPTIMIZATIONS

    View Slide

  32. EXTENSIONS API

    View Slide

  33. View Slide

  34. HACK
    LANGUAGE FOR HHVM THAT
    INTEROPERATE SEAMLESSLY WITH PHP

    View Slide

  35. HACK
    LANGUAGE FOR HHVM THAT
    INTEROPERATE SEAMLESSLY WITH PHP
    TYPE ANNOTATIONS
    TYPE ALIASING
    GENERICS
    NULLABLE TYPES
    COLLECTIONS
    CONTINUATIONS
    LAMBDAS
    ASYNC PROGRAMMING
    SHAPES
    TUPLES

    View Slide

  36. !
    class Mailbox {
    private ?T $data;
    !
    public function __construct() {
    $this->data = null;
    }
    !
    public function put(T $mail): void {
    $this->data = $mail;
    }
    !
    public function check(): ?T {
    if ($this->data !== null) {
    return $this->data;
    }
    return null;
    }
    }

    View Slide

  37. cat ./test.hh
    !
    function f(): Vector {
    return 'not an Vector';
    }
    !
    !
    hh_client
    /home/vagrant/test.hh:3:22,22: You probably forgot
    to bind this type parameter right?
    Add somewhere (after the function name definition,
    or after the class name)
    Examples: function foo or class A
    /home/vagrant/test.hh:4:10,27: Invalid return type
    /home/vagrant/test.hh:3:15,20: This is an object of type Vector
    /home/vagrant/test.hh:4:10,27: It is incompatible with a string

    View Slide

  38. PHP NG

    View Slide

  39. sapi/cli/php -v
    PHP 7.0.0-dev (cli) (built: Sep 25 2014 22:05:10)
    Copyright (c) 1997-2014 The PHP Group
    Zend Engine v2.8.0-dev, Copyright (c) 1998-2014 Zend Technologies

    View Slide

  40. CODE
    TRANSLATE
    ZEND BYTECODE
    TO LLVM
    COMPILE
    TO
    MACHINE
    CODE
    EXECUTE
    MACHINE
    CODE

    View Slide

  41. HIPPYVM IS PHP IMPLEMENTATION USING PYPY

    View Slide

  42. DEMO

    View Slide

  43. 0
    0,4
    0,8
    1,2
    1,6
    bench heapsort binary trees
    php 5.5.9 php-ng hhvm

    View Slide

  44. SILVER BULLET

    View Slide

  45. NOPE!
    CODE IS NOT YOUR BOTTLENECK, DATABASE AND STORAGES ARE

    View Slide

  46. ARCHITECTURE
    AND CAREFULL PROGRAMMING!

    View Slide

  47. View Slide

  48. NO CODE
    IS FASTER
    THAN NO CODE

    View Slide

  49. VARNISH

    View Slide

  50. @mariuszgil
    THANKS!
    joind.in/talk/view/11837

    View Slide