SlideShare a Scribd company logo
Agenda
 Introduction
 What is HipHop VM ?
 History and why it exists
 Architecture and Features
 General Architecture
 Code cache
 JIT
 Garbage Collector
 AdminServer
 FastCGI
 Extensions
 HHVM-friendly PHP code
 Parity
What is HipHop VM ?
 High-Level Stack-Based virtual machine that executes

PHP code
 Created by Facebook in a (successful) attempt to reduce
load on their servers
 New versions are released every 8 weeks on Thursday. 10
days before a release, the branch is cut and heavily tested.
History of HHVM (I)
 Summer 2007: Facebook started developing

HPHPc, an PHP to C++ translator.
 It worked by:
 Building an AST based on the PHP code
 Based on that AST, equivalent C++ code was generated

 The C++ code was compiled to binary using g++
 The binary was uploaded to the webservers where it

was executed

 This resulted in significant performance

improvements, up to 500% in some cases compared
to PHP 5.2
History of HHVM (II)
 The succes of HPHPc was so great, that the engineers decided

to give it a developer-friendly brother: HPHPi
 HPHPi was just like HPHPc but it ran in interpreted mode only
(a.k.a. much slower)
 However, it provided a lot of utilities for developers:
 Debugger (known as HPHPd)
 Setting watches, breakpoints
 Static code analysis
 Performance profiling

 It also didn’t require the compilation step to run the code
 HPHPc ran over 90 % of FB production code by the end of 2009
 HPHPc was open-sourced on February 2010
History of HHVM (III)
 But good performance came at a cost:
 Static compilation was very cumbersome
 The binary had 1 GB which was a problem since production code had
to be pushed to the servers DAILY
 Maintaining compatibility between HPHPc and HPHPi was getting
more and more difficult (they used different formats for their ASTs)
 So, at the beginning of 2010, FB started developing HHVM, which

was a better, longer-term solution
 At first, HHVM replaced only HPHPi, while HPHPc remained in
production
 But now, all FBs production servers are run by HHVM
 FB claims a 3x to 10x speed boost and 0.5x – 5x memory reduction
compared to PHP + APC. This, of course, is on their own
code, most applications will have a more modest improvement
General Architecture (I)
 General architecture is made up of:
 2 webservers
 A translator
 A JIT compiler
 A Garbage Collector
 HHVM doesn’t support any OS:
 It supports most flavours of Linux
 It has some support for Mac OS X (only runs with JIT turned off )
 There is no Windows support
 The OS must have a 64-bit architecture in order for HHVM to
work
General Architecture (II)
 The HHVM will follow the following steps to execute a PHP

script:
 Based on PHP code, build an AST (implementation for this was






reused from HPHPc)
Based on the AST, build Hip Hop Bytecode (HHBC), similar to
Java’s or CLR’s bytecode
Cache the HHBC
At runtime, pass the HHBC through the JIT compliler (if
enabled) which will transform it to machine code
Execute the machine code or, if JIT is disabled, execute the
HHBC in interpreted mode (not as fast, but still faster than Zend
PHP)
Code Cache (I)
 When request comes in, HHVM determines which file to

serve up, then checks if the file’s HHBC is in SQLite-based
cache
 If yes, it’s executed
 If no, HHVM compiles it, optimizes it and stores it in cache

 This is very similar to APC
 There’s a warm-up period when new server is

created, because cache is empty
 However, HHVM’s cache lives on disk, so it survives server
restarts and there will be no more warm-up periods for that
file
Code Cache (II)
 But warm-up period can be bypassed by doing pre-analysis

 Pre-analysis means the cache can be generated before

HHVM starts-up
 Pre-analyser will actually work a little harder and will do a
better job at optimizing code
Code Cache (III)
 There is a mode called RepoAuthoritative mode

 HHVM will check at each request if the PHP file changed in

order to know if cache must be updated
 RepoAuthoritative mode means this check is not
performed anymore.
 But be careful because, if the file is not in cache, you’ll get a
HTTP 404 error, even though the PHP file is right there
 RepoAuthoritative is recommended for production because
it avoides a lot of disk IO and files change rarely anyway
JIT Compiler
 Just-in-Time compilation is done during execution, not

before
 It translates an intermediate form of code (in this case
HHBC) to machine code
 A JIT compiler will constantly check to see which paths of
code are executed more frequently and try to optimize
those as best as possible
 Since a JIT compiler will compile to machine code at
runtime, the resulting machine code will be optimized for
that platform or CPU, which will sometimes make it faster
than even static compilation
JIT Compiler (II)
 HHVM uses so called tracelets as basic unit block of JIT
 A tracelet is usually a loop because most programs spend

most of their time in some “hot loops” and subsequent
iterations of those loops take similar paths
 A tracelet has 3 parts:
 Type guard(s): prevents execution for incompatible types
 Body
 Link to subsequent tracelet(s)

 Each tracelet has great freedom, but it is required to restore

the VM to a consistent state any time execution escapes
 Tracelets have only ONE execution path, which means no
control flow, which they’re easy to optimize
Garbage Collector
 Most modern languages have automatic memory

management
 In the case of VMs, this is called Garbage Collector
 There are 2 major types of GCs:
 Refcounting: for each object, there is a count that constantly

keeps track of how many references point to it
 Tracing: periodically, during execution, the GC scans each
object and determines if it’s reachable. If not, it deletes it

 Tracing is easier to implement and more efficient, but PHP

requires refcounting, so HHVM uses refcounting
 FB engineers want to move to a tracing approach and they
might get it done someday
AdminServer
 HHVM will actually start 2 webservers:
 Regular one on port 80
 AdminServer on the port you specify
 It can be accessed at an URI like

http://localhost:9191/check-health?auth=mypasshaha
 The AdminServer can turn JIT on/off, show statistics about
traffic, queries, memcache, CPU load, number of active
threads and many more
FastCGI
 HHVM supports FastCGI starting with version 2.3.0

(released in December 2013)
 FastCGI is a communication protocol used by webservers to
communicate with other applications
 The support for FastCGI means we don’t have to use
HHVM’s poor webserver, but instead use something like
Apache or nginx and let HHVM do what it does best:
execute PHP code at lightning speed
 Supporting FastCGI will make HHVM enter even more
production systems and increase its popularity
Extensions
 HHVM supports extensions just like PHP does

 They can be written in PHP, C++ or a combination of the 2
 Extensions will be loaded at each request, you don’t have to

keep loading an extension all over your applications
 To use custom extensions, you add it to the extensions and
then recompile HHVM. The resulting binary will contain
your extension and you can then use it
 By default, HHVM already contains the most popular
extensions, like
MySQL, PDO, DOM, cURL, PHAR, SimpleXML, JSON, me
mcache and many others
 Though, it doesn’t include MySQLi at this time
HHVM-friendly Code (I)
 Write code that HHVM can understand without

running, code that contains as much static detail as
possible
 Avoid things like:
 Dynamic function call: $function_name()
 Dynamic variable name: $a = $$x + 1;
 Functions like compact(), get_defined_vars(), extract() etc
 Don't access dynamic properties of an object. If you want to

access it, declare it. Accessing dynamic properties must use
hashtable lookups, which are much slower.

 Where possible, provide:
 Type hinting in function parameters
 Return type of functions should be as obvious as possible:
HHVM-friendly Code (II)
 Code that runs in global scope is never JIT-ed.
 Any code anywhere can mutate the variables in the global scope.

So, since PHP is weak-typed, it makes it impossible for the JIT
compiler to predict a variable’s type
 Example:
 class B {

public function __toString() {

$GLOBALS['a'] = 'Hello, world !';
 }
 }
 $a = 5;
 $b = new B;
 echo $b;

Parity (I)
 All this is great, but can HHVM actually run real-world code ? Well, in

December 2013, it looked like this (taken from HHVM blog):
Parity (II)
 HHVM’s engineers main goal is to be able to run all PHP

frameworks by Q4 2014 or Q1 2015.
Q&A
HipHop Virtual Machine

More Related Content

What's hot

Architecture microservices avec docker
Architecture microservices avec dockerArchitecture microservices avec docker
Architecture microservices avec docker
gcatt
 
Basic java important interview questions and answers to secure a job
Basic java important interview questions and answers to secure a jobBasic java important interview questions and answers to secure a job
Basic java important interview questions and answers to secure a job
Garuda Trainings
 
Middleware in Asp.Net Core
Middleware in Asp.Net CoreMiddleware in Asp.Net Core
Middleware in Asp.Net Core
Shahriar Hossain
 
Microservices avec Spring Cloud
Microservices avec Spring CloudMicroservices avec Spring Cloud
Microservices avec Spring Cloud
Florian Beaufumé
 
Node.js Express
Node.js  ExpressNode.js  Express
Node.js Express
Eyal Vardi
 
Overview of Rest Service and ASP.NET WEB API
Overview of Rest Service and ASP.NET WEB APIOverview of Rest Service and ASP.NET WEB API
Overview of Rest Service and ASP.NET WEB API
Pankaj Bajaj
 
From Generator to Fiber the Road to Coroutine in PHP
From Generator to Fiber the Road to Coroutine in PHPFrom Generator to Fiber the Road to Coroutine in PHP
From Generator to Fiber the Road to Coroutine in PHP
Albert Chen
 
Short notes of oop with java
Short notes of oop with javaShort notes of oop with java
Short notes of oop with java
Mohamed Fathy
 
Introduction to Docker - VIT Campus
Introduction to Docker - VIT CampusIntroduction to Docker - VIT Campus
Introduction to Docker - VIT Campus
Ajeet Singh Raina
 
Introduction to chef
Introduction to chefIntroduction to chef
Introduction to chef
Damith Kothalawala
 
An Introduction to WebAssembly
An Introduction to WebAssemblyAn Introduction to WebAssembly
An Introduction to WebAssembly
Daniel Budden
 
CUST-10 Customizing the Upload File(s) dialog in Alfresco Share
CUST-10 Customizing the Upload File(s) dialog in Alfresco ShareCUST-10 Customizing the Upload File(s) dialog in Alfresco Share
CUST-10 Customizing the Upload File(s) dialog in Alfresco Share
Alfresco Software
 
Hacking Jenkins
Hacking JenkinsHacking Jenkins
Hacking Jenkins
Miro Cupak
 
Building Fast and Scalable Persistence Layers with Spring Data JPA
Building Fast and Scalable Persistence Layers with Spring Data JPABuilding Fast and Scalable Persistence Layers with Spring Data JPA
Building Fast and Scalable Persistence Layers with Spring Data JPA
VMware Tanzu
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
Aaron Schram
 
Async js
Async jsAsync js
Node js overview
Node js overviewNode js overview
Node js overview
Eyal Vardi
 
My Journey to Becoming a Docker Captain
My Journey to Becoming a Docker CaptainMy Journey to Becoming a Docker Captain
My Journey to Becoming a Docker Captain
Ajeet Singh Raina
 
ASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with OverviewASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with Overview
Shahed Chowdhuri
 
Introduction to laravel framework
Introduction to laravel frameworkIntroduction to laravel framework
Introduction to laravel framework
Ahmad Fatoni
 

What's hot (20)

Architecture microservices avec docker
Architecture microservices avec dockerArchitecture microservices avec docker
Architecture microservices avec docker
 
Basic java important interview questions and answers to secure a job
Basic java important interview questions and answers to secure a jobBasic java important interview questions and answers to secure a job
Basic java important interview questions and answers to secure a job
 
Middleware in Asp.Net Core
Middleware in Asp.Net CoreMiddleware in Asp.Net Core
Middleware in Asp.Net Core
 
Microservices avec Spring Cloud
Microservices avec Spring CloudMicroservices avec Spring Cloud
Microservices avec Spring Cloud
 
Node.js Express
Node.js  ExpressNode.js  Express
Node.js Express
 
Overview of Rest Service and ASP.NET WEB API
Overview of Rest Service and ASP.NET WEB APIOverview of Rest Service and ASP.NET WEB API
Overview of Rest Service and ASP.NET WEB API
 
From Generator to Fiber the Road to Coroutine in PHP
From Generator to Fiber the Road to Coroutine in PHPFrom Generator to Fiber the Road to Coroutine in PHP
From Generator to Fiber the Road to Coroutine in PHP
 
Short notes of oop with java
Short notes of oop with javaShort notes of oop with java
Short notes of oop with java
 
Introduction to Docker - VIT Campus
Introduction to Docker - VIT CampusIntroduction to Docker - VIT Campus
Introduction to Docker - VIT Campus
 
Introduction to chef
Introduction to chefIntroduction to chef
Introduction to chef
 
An Introduction to WebAssembly
An Introduction to WebAssemblyAn Introduction to WebAssembly
An Introduction to WebAssembly
 
CUST-10 Customizing the Upload File(s) dialog in Alfresco Share
CUST-10 Customizing the Upload File(s) dialog in Alfresco ShareCUST-10 Customizing the Upload File(s) dialog in Alfresco Share
CUST-10 Customizing the Upload File(s) dialog in Alfresco Share
 
Hacking Jenkins
Hacking JenkinsHacking Jenkins
Hacking Jenkins
 
Building Fast and Scalable Persistence Layers with Spring Data JPA
Building Fast and Scalable Persistence Layers with Spring Data JPABuilding Fast and Scalable Persistence Layers with Spring Data JPA
Building Fast and Scalable Persistence Layers with Spring Data JPA
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Async js
Async jsAsync js
Async js
 
Node js overview
Node js overviewNode js overview
Node js overview
 
My Journey to Becoming a Docker Captain
My Journey to Becoming a Docker CaptainMy Journey to Becoming a Docker Captain
My Journey to Becoming a Docker Captain
 
ASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with OverviewASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with Overview
 
Introduction to laravel framework
Introduction to laravel frameworkIntroduction to laravel framework
Introduction to laravel framework
 

Viewers also liked

Tango argentino
Tango argentinoTango argentino
Tango argentinosarapaol
 
Path To Prosperity Small To Midsize Companies
Path To Prosperity Small To Midsize CompaniesPath To Prosperity Small To Midsize Companies
Path To Prosperity Small To Midsize Companies
stephej2
 
Menkes bp dr ricca fauziyah
Menkes bp dr ricca fauziyahMenkes bp dr ricca fauziyah
Menkes bp dr ricca fauziyah
Sufya Anwar
 
Data Portfolio 06 01 2011 No Contact
Data Portfolio 06 01 2011 No ContactData Portfolio 06 01 2011 No Contact
Data Portfolio 06 01 2011 No Contact
jdmassman
 
Nasco Mosaic Tile Collection
Nasco Mosaic Tile CollectionNasco Mosaic Tile Collection
Nasco Mosaic Tile Collection
ablonski
 
Menejemen Kesehatan Balai Pengbatan dr. Ricca Fauziyah
Menejemen Kesehatan Balai Pengbatan dr. Ricca FauziyahMenejemen Kesehatan Balai Pengbatan dr. Ricca Fauziyah
Menejemen Kesehatan Balai Pengbatan dr. Ricca Fauziyah
Sufya Anwar
 
Collaborative Filtering Survey
Collaborative Filtering SurveyCollaborative Filtering Survey
Collaborative Filtering Survey
mobilizer1000
 
The Competitive Advantage in the Changing Digital Landscape
The Competitive Advantage in the Changing Digital Landscape The Competitive Advantage in the Changing Digital Landscape
The Competitive Advantage in the Changing Digital Landscape
ThinkTank Collective Intelligence Software
 
101202 firmenpräsi druckversion_e_low
101202 firmenpräsi druckversion_e_low101202 firmenpräsi druckversion_e_low
101202 firmenpräsi druckversion_e_low
aevanamerongen
 
Responsabilidad
ResponsabilidadResponsabilidad
Responsabilidad
luisitollacza
 
Weather17th 20th
Weather17th 20thWeather17th 20th
Weather17th 20th
amykay16
 
gooスマホ部について0707
gooスマホ部について0707gooスマホ部について0707
gooスマホ部について0707Tadayoshi Senda
 
Data Portfolio 06 21 2011 Nocontact
Data Portfolio 06 21 2011 NocontactData Portfolio 06 21 2011 Nocontact
Data Portfolio 06 21 2011 Nocontact
jdmassman
 
Zendesk PRO Tips
Zendesk PRO TipsZendesk PRO Tips
Estado da Arte HTML5
Estado da Arte HTML5Estado da Arte HTML5
Estado da Arte HTML5
MCM-IPG
 
Building your Personal Brand
Building your Personal BrandBuilding your Personal Brand
Building your Personal Brand
ThinkTank Collective Intelligence Software
 
Menkes simpus dr. nila
Menkes simpus dr. nilaMenkes simpus dr. nila
Menkes simpus dr. nila
Sufya Anwar
 
Dossier sobre Assamblearisme Infantil
 Dossier sobre Assamblearisme Infantil Dossier sobre Assamblearisme Infantil
Dossier sobre Assamblearisme InfantilEl Senyor Croqueta
 
Offshorent executive overview
Offshorent executive overviewOffshorent executive overview
Offshorent executive overview
Gigi Kizhakkechethipuzha
 

Viewers also liked (20)

Tango argentino
Tango argentinoTango argentino
Tango argentino
 
Path To Prosperity Small To Midsize Companies
Path To Prosperity Small To Midsize CompaniesPath To Prosperity Small To Midsize Companies
Path To Prosperity Small To Midsize Companies
 
Menkes bp dr ricca fauziyah
Menkes bp dr ricca fauziyahMenkes bp dr ricca fauziyah
Menkes bp dr ricca fauziyah
 
Data Portfolio 06 01 2011 No Contact
Data Portfolio 06 01 2011 No ContactData Portfolio 06 01 2011 No Contact
Data Portfolio 06 01 2011 No Contact
 
Stop motion
Stop motionStop motion
Stop motion
 
Nasco Mosaic Tile Collection
Nasco Mosaic Tile CollectionNasco Mosaic Tile Collection
Nasco Mosaic Tile Collection
 
Menejemen Kesehatan Balai Pengbatan dr. Ricca Fauziyah
Menejemen Kesehatan Balai Pengbatan dr. Ricca FauziyahMenejemen Kesehatan Balai Pengbatan dr. Ricca Fauziyah
Menejemen Kesehatan Balai Pengbatan dr. Ricca Fauziyah
 
Collaborative Filtering Survey
Collaborative Filtering SurveyCollaborative Filtering Survey
Collaborative Filtering Survey
 
The Competitive Advantage in the Changing Digital Landscape
The Competitive Advantage in the Changing Digital Landscape The Competitive Advantage in the Changing Digital Landscape
The Competitive Advantage in the Changing Digital Landscape
 
101202 firmenpräsi druckversion_e_low
101202 firmenpräsi druckversion_e_low101202 firmenpräsi druckversion_e_low
101202 firmenpräsi druckversion_e_low
 
Responsabilidad
ResponsabilidadResponsabilidad
Responsabilidad
 
Weather17th 20th
Weather17th 20thWeather17th 20th
Weather17th 20th
 
gooスマホ部について0707
gooスマホ部について0707gooスマホ部について0707
gooスマホ部について0707
 
Data Portfolio 06 21 2011 Nocontact
Data Portfolio 06 21 2011 NocontactData Portfolio 06 21 2011 Nocontact
Data Portfolio 06 21 2011 Nocontact
 
Zendesk PRO Tips
Zendesk PRO TipsZendesk PRO Tips
Zendesk PRO Tips
 
Estado da Arte HTML5
Estado da Arte HTML5Estado da Arte HTML5
Estado da Arte HTML5
 
Building your Personal Brand
Building your Personal BrandBuilding your Personal Brand
Building your Personal Brand
 
Menkes simpus dr. nila
Menkes simpus dr. nilaMenkes simpus dr. nila
Menkes simpus dr. nila
 
Dossier sobre Assamblearisme Infantil
 Dossier sobre Assamblearisme Infantil Dossier sobre Assamblearisme Infantil
Dossier sobre Assamblearisme Infantil
 
Offshorent executive overview
Offshorent executive overviewOffshorent executive overview
Offshorent executive overview
 

Similar to HipHop Virtual Machine

Hack and HHVM
Hack and HHVMHack and HHVM
Hack and HHVM
Ewere Diagboya
 
Php Conference Brazil - Phalcon Giant Killer
Php Conference Brazil - Phalcon Giant KillerPhp Conference Brazil - Phalcon Giant Killer
Php Conference Brazil - Phalcon Giant Killer
Jackson F. de A. Mafra
 
How PHP works
How PHP works How PHP works
Daniel Sloof: Magento on HHVM
Daniel Sloof: Magento on HHVMDaniel Sloof: Magento on HHVM
Daniel Sloof: Magento on HHVM
Meet Magento Poland
 
PHP and FastCGI Performance Optimizations
PHP and FastCGI Performance OptimizationsPHP and FastCGI Performance Optimizations
PHP and FastCGI Performance Optimizations
Alessandro Pilotti
 
Introduction to OpenHFT for Melbourne Java Users Group
Introduction to OpenHFT for Melbourne Java Users GroupIntroduction to OpenHFT for Melbourne Java Users Group
Introduction to OpenHFT for Melbourne Java Users Group
Peter Lawrey
 
Media Content Delivery Systems
Media Content Delivery SystemsMedia Content Delivery Systems
Media Content Delivery Systems
ashbyb
 
Magento on HHVM. Daniel Sloof
Magento on HHVM. Daniel SloofMagento on HHVM. Daniel Sloof
Magento on HHVM. Daniel Sloof
MeetMagentoNY2014
 
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010 Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger
 
Scaleable PHP Applications in Kubernetes
Scaleable PHP Applications in KubernetesScaleable PHP Applications in Kubernetes
Scaleable PHP Applications in Kubernetes
Robert Lemke
 
Load Balancing with HAproxy
Load Balancing with HAproxyLoad Balancing with HAproxy
Load Balancing with HAproxy
Brendan Jennings
 
Rit 2011 ats
Rit 2011 atsRit 2011 ats
Rit 2011 ats
Leif Hedstrom
 
Ch 22: Web Hosting and Internet Servers
Ch 22: Web Hosting and Internet ServersCh 22: Web Hosting and Internet Servers
Ch 22: Web Hosting and Internet Servers
webhostingguy
 
Developing high-performance network servers in Lisp
Developing high-performance network servers in LispDeveloping high-performance network servers in Lisp
Developing high-performance network servers in Lisp
Vladimir Sedach
 
NodeJS
NodeJSNodeJS
NodeJS
LinkMe Srl
 
Apache web server
Apache web serverApache web server
Apache web server
Rishabh Bahukhandi
 
slides (PPT)
slides (PPT)slides (PPT)
slides (PPT)
webhostingguy
 
2016 03 15_biological_databases_part4
2016 03 15_biological_databases_part42016 03 15_biological_databases_part4
2016 03 15_biological_databases_part4
Prof. Wim Van Criekinge
 
Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...
Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...
Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...
Ontico
 
Programming Server side with Sevlet
 Programming Server side with Sevlet  Programming Server side with Sevlet
Programming Server side with Sevlet
backdoor
 

Similar to HipHop Virtual Machine (20)

Hack and HHVM
Hack and HHVMHack and HHVM
Hack and HHVM
 
Php Conference Brazil - Phalcon Giant Killer
Php Conference Brazil - Phalcon Giant KillerPhp Conference Brazil - Phalcon Giant Killer
Php Conference Brazil - Phalcon Giant Killer
 
How PHP works
How PHP works How PHP works
How PHP works
 
Daniel Sloof: Magento on HHVM
Daniel Sloof: Magento on HHVMDaniel Sloof: Magento on HHVM
Daniel Sloof: Magento on HHVM
 
PHP and FastCGI Performance Optimizations
PHP and FastCGI Performance OptimizationsPHP and FastCGI Performance Optimizations
PHP and FastCGI Performance Optimizations
 
Introduction to OpenHFT for Melbourne Java Users Group
Introduction to OpenHFT for Melbourne Java Users GroupIntroduction to OpenHFT for Melbourne Java Users Group
Introduction to OpenHFT for Melbourne Java Users Group
 
Media Content Delivery Systems
Media Content Delivery SystemsMedia Content Delivery Systems
Media Content Delivery Systems
 
Magento on HHVM. Daniel Sloof
Magento on HHVM. Daniel SloofMagento on HHVM. Daniel Sloof
Magento on HHVM. Daniel Sloof
 
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010 Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
 
Scaleable PHP Applications in Kubernetes
Scaleable PHP Applications in KubernetesScaleable PHP Applications in Kubernetes
Scaleable PHP Applications in Kubernetes
 
Load Balancing with HAproxy
Load Balancing with HAproxyLoad Balancing with HAproxy
Load Balancing with HAproxy
 
Rit 2011 ats
Rit 2011 atsRit 2011 ats
Rit 2011 ats
 
Ch 22: Web Hosting and Internet Servers
Ch 22: Web Hosting and Internet ServersCh 22: Web Hosting and Internet Servers
Ch 22: Web Hosting and Internet Servers
 
Developing high-performance network servers in Lisp
Developing high-performance network servers in LispDeveloping high-performance network servers in Lisp
Developing high-performance network servers in Lisp
 
NodeJS
NodeJSNodeJS
NodeJS
 
Apache web server
Apache web serverApache web server
Apache web server
 
slides (PPT)
slides (PPT)slides (PPT)
slides (PPT)
 
2016 03 15_biological_databases_part4
2016 03 15_biological_databases_part42016 03 15_biological_databases_part4
2016 03 15_biological_databases_part4
 
Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...
Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...
Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite speed techno...
 
Programming Server side with Sevlet
 Programming Server side with Sevlet  Programming Server side with Sevlet
Programming Server side with Sevlet
 

More from Radu Murzea

The World of StackOverflow
The World of StackOverflowThe World of StackOverflow
The World of StackOverflow
Radu Murzea
 
SymfonyCon 2015 - A symphony of developers
SymfonyCon 2015 - A symphony of developersSymfonyCon 2015 - A symphony of developers
SymfonyCon 2015 - A symphony of developers
Radu Murzea
 
The World of PHP PSR Standards
The World of PHP PSR StandardsThe World of PHP PSR Standards
The World of PHP PSR Standards
Radu Murzea
 
PHP 7 - A look at the future
PHP 7 - A look at the futurePHP 7 - A look at the future
PHP 7 - A look at the future
Radu Murzea
 
Hack programming language
Hack programming languageHack programming language
Hack programming language
Radu Murzea
 
Hack Programming Language
Hack Programming LanguageHack Programming Language
Hack Programming Language
Radu Murzea
 
Unit Testing in PHP
Unit Testing in PHPUnit Testing in PHP
Unit Testing in PHP
Radu Murzea
 

More from Radu Murzea (7)

The World of StackOverflow
The World of StackOverflowThe World of StackOverflow
The World of StackOverflow
 
SymfonyCon 2015 - A symphony of developers
SymfonyCon 2015 - A symphony of developersSymfonyCon 2015 - A symphony of developers
SymfonyCon 2015 - A symphony of developers
 
The World of PHP PSR Standards
The World of PHP PSR StandardsThe World of PHP PSR Standards
The World of PHP PSR Standards
 
PHP 7 - A look at the future
PHP 7 - A look at the futurePHP 7 - A look at the future
PHP 7 - A look at the future
 
Hack programming language
Hack programming languageHack programming language
Hack programming language
 
Hack Programming Language
Hack Programming LanguageHack Programming Language
Hack Programming Language
 
Unit Testing in PHP
Unit Testing in PHPUnit Testing in PHP
Unit Testing in PHP
 

Recently uploaded

Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
ScyllaDB
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
saastr
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
Tatiana Kojar
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
DianaGray10
 
Mutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented ChatbotsMutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented Chatbots
Pablo Gómez Abajo
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
Fwdays
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their MainframeDigital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Precisely
 
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
Edge AI and Vision Alliance
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
Alex Pruden
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
Ajin Abraham
 
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
saastr
 
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Pitangent Analytics & Technology Solutions Pvt. Ltd
 
Y-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PPY-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PP
c5vrf27qcz
 
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Alpen-Adria-Universität
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 

Recently uploaded (20)

Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
 
Mutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented ChatbotsMutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented Chatbots
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their MainframeDigital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
 
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
 
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
 
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
 
Y-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PPY-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PP
 
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 

HipHop Virtual Machine

  • 1.
  • 2. Agenda  Introduction  What is HipHop VM ?  History and why it exists  Architecture and Features  General Architecture  Code cache  JIT  Garbage Collector  AdminServer  FastCGI  Extensions  HHVM-friendly PHP code  Parity
  • 3. What is HipHop VM ?  High-Level Stack-Based virtual machine that executes PHP code  Created by Facebook in a (successful) attempt to reduce load on their servers  New versions are released every 8 weeks on Thursday. 10 days before a release, the branch is cut and heavily tested.
  • 4. History of HHVM (I)  Summer 2007: Facebook started developing HPHPc, an PHP to C++ translator.  It worked by:  Building an AST based on the PHP code  Based on that AST, equivalent C++ code was generated  The C++ code was compiled to binary using g++  The binary was uploaded to the webservers where it was executed  This resulted in significant performance improvements, up to 500% in some cases compared to PHP 5.2
  • 5. History of HHVM (II)  The succes of HPHPc was so great, that the engineers decided to give it a developer-friendly brother: HPHPi  HPHPi was just like HPHPc but it ran in interpreted mode only (a.k.a. much slower)  However, it provided a lot of utilities for developers:  Debugger (known as HPHPd)  Setting watches, breakpoints  Static code analysis  Performance profiling  It also didn’t require the compilation step to run the code  HPHPc ran over 90 % of FB production code by the end of 2009  HPHPc was open-sourced on February 2010
  • 6. History of HHVM (III)  But good performance came at a cost:  Static compilation was very cumbersome  The binary had 1 GB which was a problem since production code had to be pushed to the servers DAILY  Maintaining compatibility between HPHPc and HPHPi was getting more and more difficult (they used different formats for their ASTs)  So, at the beginning of 2010, FB started developing HHVM, which was a better, longer-term solution  At first, HHVM replaced only HPHPi, while HPHPc remained in production  But now, all FBs production servers are run by HHVM  FB claims a 3x to 10x speed boost and 0.5x – 5x memory reduction compared to PHP + APC. This, of course, is on their own code, most applications will have a more modest improvement
  • 7. General Architecture (I)  General architecture is made up of:  2 webservers  A translator  A JIT compiler  A Garbage Collector  HHVM doesn’t support any OS:  It supports most flavours of Linux  It has some support for Mac OS X (only runs with JIT turned off )  There is no Windows support  The OS must have a 64-bit architecture in order for HHVM to work
  • 8. General Architecture (II)  The HHVM will follow the following steps to execute a PHP script:  Based on PHP code, build an AST (implementation for this was     reused from HPHPc) Based on the AST, build Hip Hop Bytecode (HHBC), similar to Java’s or CLR’s bytecode Cache the HHBC At runtime, pass the HHBC through the JIT compliler (if enabled) which will transform it to machine code Execute the machine code or, if JIT is disabled, execute the HHBC in interpreted mode (not as fast, but still faster than Zend PHP)
  • 9. Code Cache (I)  When request comes in, HHVM determines which file to serve up, then checks if the file’s HHBC is in SQLite-based cache  If yes, it’s executed  If no, HHVM compiles it, optimizes it and stores it in cache  This is very similar to APC  There’s a warm-up period when new server is created, because cache is empty  However, HHVM’s cache lives on disk, so it survives server restarts and there will be no more warm-up periods for that file
  • 10. Code Cache (II)  But warm-up period can be bypassed by doing pre-analysis  Pre-analysis means the cache can be generated before HHVM starts-up  Pre-analyser will actually work a little harder and will do a better job at optimizing code
  • 11. Code Cache (III)  There is a mode called RepoAuthoritative mode  HHVM will check at each request if the PHP file changed in order to know if cache must be updated  RepoAuthoritative mode means this check is not performed anymore.  But be careful because, if the file is not in cache, you’ll get a HTTP 404 error, even though the PHP file is right there  RepoAuthoritative is recommended for production because it avoides a lot of disk IO and files change rarely anyway
  • 12. JIT Compiler  Just-in-Time compilation is done during execution, not before  It translates an intermediate form of code (in this case HHBC) to machine code  A JIT compiler will constantly check to see which paths of code are executed more frequently and try to optimize those as best as possible  Since a JIT compiler will compile to machine code at runtime, the resulting machine code will be optimized for that platform or CPU, which will sometimes make it faster than even static compilation
  • 13. JIT Compiler (II)  HHVM uses so called tracelets as basic unit block of JIT  A tracelet is usually a loop because most programs spend most of their time in some “hot loops” and subsequent iterations of those loops take similar paths  A tracelet has 3 parts:  Type guard(s): prevents execution for incompatible types  Body  Link to subsequent tracelet(s)  Each tracelet has great freedom, but it is required to restore the VM to a consistent state any time execution escapes  Tracelets have only ONE execution path, which means no control flow, which they’re easy to optimize
  • 14. Garbage Collector  Most modern languages have automatic memory management  In the case of VMs, this is called Garbage Collector  There are 2 major types of GCs:  Refcounting: for each object, there is a count that constantly keeps track of how many references point to it  Tracing: periodically, during execution, the GC scans each object and determines if it’s reachable. If not, it deletes it  Tracing is easier to implement and more efficient, but PHP requires refcounting, so HHVM uses refcounting  FB engineers want to move to a tracing approach and they might get it done someday
  • 15. AdminServer  HHVM will actually start 2 webservers:  Regular one on port 80  AdminServer on the port you specify  It can be accessed at an URI like http://localhost:9191/check-health?auth=mypasshaha  The AdminServer can turn JIT on/off, show statistics about traffic, queries, memcache, CPU load, number of active threads and many more
  • 16. FastCGI  HHVM supports FastCGI starting with version 2.3.0 (released in December 2013)  FastCGI is a communication protocol used by webservers to communicate with other applications  The support for FastCGI means we don’t have to use HHVM’s poor webserver, but instead use something like Apache or nginx and let HHVM do what it does best: execute PHP code at lightning speed  Supporting FastCGI will make HHVM enter even more production systems and increase its popularity
  • 17. Extensions  HHVM supports extensions just like PHP does  They can be written in PHP, C++ or a combination of the 2  Extensions will be loaded at each request, you don’t have to keep loading an extension all over your applications  To use custom extensions, you add it to the extensions and then recompile HHVM. The resulting binary will contain your extension and you can then use it  By default, HHVM already contains the most popular extensions, like MySQL, PDO, DOM, cURL, PHAR, SimpleXML, JSON, me mcache and many others  Though, it doesn’t include MySQLi at this time
  • 18. HHVM-friendly Code (I)  Write code that HHVM can understand without running, code that contains as much static detail as possible  Avoid things like:  Dynamic function call: $function_name()  Dynamic variable name: $a = $$x + 1;  Functions like compact(), get_defined_vars(), extract() etc  Don't access dynamic properties of an object. If you want to access it, declare it. Accessing dynamic properties must use hashtable lookups, which are much slower.  Where possible, provide:  Type hinting in function parameters  Return type of functions should be as obvious as possible:
  • 19. HHVM-friendly Code (II)  Code that runs in global scope is never JIT-ed.  Any code anywhere can mutate the variables in the global scope. So, since PHP is weak-typed, it makes it impossible for the JIT compiler to predict a variable’s type  Example:  class B { public function __toString() {  $GLOBALS['a'] = 'Hello, world !';  }  }  $a = 5;  $b = new B;  echo $b; 
  • 20. Parity (I)  All this is great, but can HHVM actually run real-world code ? Well, in December 2013, it looked like this (taken from HHVM blog):
  • 21. Parity (II)  HHVM’s engineers main goal is to be able to run all PHP frameworks by Q4 2014 or Q1 2015.
  • 22. Q&A

Editor's Notes

  1. Alteratives: simpletest, behat
  2. Alteratives: simpletest, behat
  3. Alteratives: simpletest, behat
  4. Alteratives: simpletest, behat
  5. Alteratives: simpletest, behat
  6. Alteratives: simpletest, behat
  7. Alteratives: simpletest, behat