1 / 33

HipHop : High-Performance PHP Ali-Reza Adl-Tabatabai HipHop Team Facebook

HipHop : High-Performance PHP Ali-Reza Adl-Tabatabai HipHop Team Facebook. Facebook: Move fast & build things. PHP. General-purpose scripting language tailored for web development Interactive Weakly typed & dynamic. <?php var_dump(6 + 7); var_dump('6' + '7');

mabyn
Download Presentation

HipHop : High-Performance PHP Ali-Reza Adl-Tabatabai HipHop Team Facebook

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. HipHop: High-Performance PHPAli-Reza Adl-TabatabaiHipHop TeamFacebook

  2. Facebook: Move fast & build things

  3. PHP • General-purpose scripting language tailored for web development • Interactive • Weakly typed & dynamic <?php var_dump(6 + 7); var_dump('6' + '7'); var_dump('six' + 'seven'); var_dump((1<<63) + 0); var_dump((1<<63) + (1<<63)); • int(13) • int(13) • int(0) • int(-9223372036854775808) • float(-1.844674407371E+19)

  4. PHP • General-purpose scripting language tailored for web development • Interactive • Weakly typed & dynamic • function foo($x) { • echo “foo: “. $x. ”\n”;} • foo(“hello”); // prints “foo: hello” • foo(10); // prints “foo: 10”

  5. PHP • General-purpose scripting language tailored for web development • Interactive • Weakly typed & dynamic • if (...) { • class B { ... } • } else { • class B { ... } • } • class C extends B { ... }

  6. PHP • General-purpose scripting language tailored for web development • Interactive • Weakly typed & dynamic • $a = ‘f’; • $b = ‘c’; • $c = ‘oo’; • $func = $a . $ $b; • $func();

  7. PHP • General-purpose scripting language tailored for web development • Interactive • Weakly typed & dynamic • class C { • public $declProp = 1;} • $obj = new C; • $obj->dynProp = 2; // This is OK! • echo $obj->declProp . “\n”; // prints “1” • echo $obj->dynProp . “\n” // prints “2”

  8. PHP • General-purpose scripting language tailored for web development • Interactive • Weakly typed & dynamic • if (function_exists(‘foo’)) { • ... • } • if (class_exists($c)) { • ... • }

  9. Memory management • PHP is reference counted • Precise destruction semantics • class C { • function __destruct() { echo “bye!”; }} • $x = new C; • $x = 1; // prints “bye!”

  10. Concurrency • Single-threaded programming model • Multiple requests run in parallel • No shared memory, synchronization, or direct communication

  11. Performance...  Source: http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=all

  12. Implications for Facebook INTERNET • Bad performance can limit user features • Poor efficiency requires lots of re$ource$ . . . webservers . . . storage

  13. What have we done? Facebook (PHP) Facebook (binary) PHP/Zend Apache

  14. HipHopcompilation flow hphpc Facebook (PHP) Facebook (C++) Gcc PHP Runtime Webserver Facebook (binary)

  15. HipHopcompiler (hphpc) PHP AST C++ Parser C++ Code Generator Optimize, Infer Types

  16. Representing PHP data type data KindOfString & “Loremipsum.” KindOfInt 13

  17. Type inference: fewer tags! type data & “Loremipsum.” 13

  18. Basic operations $a + $b

  19. Basic operations: type dispatch switch (a->m_type) { case KindOfInt: switch (b->m_type) { … } case KindOfArray: switch (b->m_type) { … } … } …} $a + $b $a + $b

  20. Type inference: avoiding dispatch add %rcx, %rdx $a + $b given$a :: Int,$b :: Int

  21. HipHop compiler: performance Disclaimer: estimated based on running Facebook

  22. HipHop compiler: pros & cons • Good for production servers • Inadequatefor development • Solution: the HipHop interpreter (hphpi) • Leverages HipHop runtime & webserver • Open problem: Can we get the best of both worlds? hphpi hphpc ≠

  23. HipHop Virtual Machine(hhvm) • Ambitious goal: replace both the HipHopInterpreter and Compiler HHVM Interpreter PHP AST HHBC Parser Bytecode Generator HHVM JIT Optimize, Infer Types

  24. HipHopbytecode (hhbc) 96: Loc 0 101: Loc 1 106: IssetM <H E> 113: JmpZ 32 118: String “Hit! “ 123: Loc 0 128: Loc 1 133: CGetM <H E> 140: Concat 141: Print 142: PopC 143: True 144: RetC 145: String “Miss!” 150: Print 151: PopC 152: False 153: RetC • In-house design • Stack-base VM • Closer to PHP than machine code function lookup($cache, $key) { if (isset($cache[$key])) { echo “Hit! “ . $cache[$key]; return true; } else { echo “Miss!”; return false; } }

  25. Hhvm JIT • Beyond static type inference: dynamic type specialization • Observe types • Generate specialized code • Guards to check types ;; Typecheck: int($n)? cmpl $4, -4(%rbp) jne __retranslate ;; Type-spec xlation mov$3, %r12d mov-16(%rbp), %r13 mov%r13, %r14 imul%r14, %r12 add $1, %r12 mov%r12, %r13 mov$0x40000000, %r8 mov%r8, -8(%rbp) mov%r13, -16(%rbp) 224: Loc 0 229: Int 3 238: Loc 0 243: CGetH 244: Mul 245: Int 1 254: Add 255: SetH 256: PopC $n = 3 * $n + 1;

  26. Translation cache: Reuse & specialization $n = 1.5; ... $n = 3 * $n + 1; Translator . . . __retranslate: . . . Translation Cache T2: T1: ;; Typecheck: INT($n)? cmpl $4, -4(%rbp) jne __retranslate ;; Typecheck: DOUBLE($n)? cmpl $8, -4(%rbp) jne __retranslate T2 ;; Type-spec INT ;; translation . . . ;; Type-spec DOUBLE ;; translation . . .

  27. Current state • hhpc • Runs www.facebook.com • Paper to appear in SPLASH ‘12 • hhvm • www.facebook.com works • Developers using it • ~27% slower than hphpc • Download from github: https://github.com/facebook/hiphop-php/

  28. Perfprogress 6/11-7/14

  29. Ongoing & future work • Performance • Profile-guided, SSA-based 2nd gear JIT • Type prediction • Tuning for the HW • Array shapes: turn hash tables into structs • Tracing garbage collection • Copy-on-write arrays • Precise destruction semantics • Language extensions

  30. Summary • PHP enables us to move fast • Performance suffers because of interpreter • Hiphop compiler • Compiles PHP to C++ offline • Significantly improves user experience & data center efficiency • HipHop virtual machine • A new language VM tailored to PHP • Brings dynamic JIT compilation & optimization to PHP • Both open sourced on github

  31. Thanks! Questions?

More Related