Slide 1

Slide 1 text

HHVM HACK PHP + + Mariusz Gil

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

BE FAST AT SCALE

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

IS SLOW

Slide 14

Slide 14 text

ISN’T FAST

Slide 15

Slide 15 text

CODE INTERPRET TO OPCODE OPCODE EXECUTION OPCODE CACHE

Slide 16

Slide 16 text

SOLUTION NEEDED

Slide 17

Slide 17 text

2008

Slide 18

Slide 18 text

2010

Slide 19

Slide 19 text

2010

Slide 20

Slide 20 text

SUCCESS 50% CPU USAGE REDUCTION

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

FAILURE?

Slide 23

Slide 23 text

2010

Slide 24

Slide 24 text

2013

Slide 25

Slide 25 text

HHVM OPEN SOURCE VIRTUAL MACHINE FOR PHP

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

cat ./phpversion.php

Slide 29

Slide 29 text

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;

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

JIT OPTIMIZATIONS

Slide 32

Slide 32 text

EXTENSIONS API

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

HACK LANGUAGE FOR HHVM THAT INTEROPERATE SEAMLESSLY WITH PHP

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

{ 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; } }

Slide 37

Slide 37 text

cat ./test.hh { 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

Slide 38

Slide 38 text

PHP NG

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

HIPPYVM IS PHP IMPLEMENTATION USING PYPY

Slide 42

Slide 42 text

DEMO

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

SILVER BULLET

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

ARCHITECTURE AND CAREFULL PROGRAMMING!

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

NO CODE IS FASTER THAN NO CODE

Slide 49

Slide 49 text

VARNISH

Slide 50

Slide 50 text

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