SlideShare a Scribd company logo
1 of 53
Download to read offline
HHVM on AArch64
Max Wang
Software Engineer HHVM
Agenda
Four questions:
Will the demo work?
1
4
3
Where do we go from here?
How did we get running on AArch64?2
What is HHVM?
Agenda
Four questions:
Will the demo work?
1
4
3
Where do we go from here?
How did we get running on AArch64?2
What is HHVM?
Agenda
Four questions:
Will the demo work?
1
4
3
Where do we go from here?
How did we get running on AArch64?2
What is HHVM?
Agenda
Four questions:
Will the demo work?
1
4
3
Where do we go from here?
How did we get running on AArch64?2
What is HHVM?
Agenda
Four questions:
Will the demo work?
1
4
3
Where do we go from here?
How did we get running on AArch64?2
What is HHVM?
Will the demo work?
1
4
3
Where do we go from here?
How did we get running on AArch64?2
What is HHVM?
Agenda
i.e., Why should you care?
• Just-in-time compiler for PHP and Hack
What is HHVM?
In a nutshell
"1" + "2" == 3
"1" + "2wo" == 3
"15" + "0xf" == 15
("15" == "0xf") == true
$str = "foo";
list($a, $b) = $str;
var_dump($a); // "f"
list($a, $b) = "foo";
var_dump($a); // NULL
• Just-in-time compiler for PHP and Hack
What is HHVM?
In a nutshell
<?hh
class Foo<T> {
public async function getBar(
dict<string,T> $ts
): Awaitable<Bar> {
return await fetch_bar($this->priv, $ts);
}
}
• Serves production web traffic for Facebook
• HHVM is fast!
• Orders of magnitude improvement
• Not just for FB!
What is HHVM?
In a nutshell
• Open source (https://github.com/facebook/hhvm)
• Used by 3 of the Alexa Top 5
• Facebook, Baidu, Wikipedia
• Also: Box, Slack, Etsy,
Wordpress, ...
What is HHVM?
In a nutshell
{
• Fast!
• Open source!
• Just-in-time compiler for PHP and Hack
What is HHVM?
In a nutshell
• Major performance improvement over PHP5
• But:
• slow ahead-of-time compilation
• massive binary size
• static type inference on a dynamic language
Compilation pipeline
HipHop for PHP (HPHPc)
PHP
hphpc
binaryC++
g++
ahead of time
Compilation pipeline
High-level PHP bytecode
PHP x64HHBC
just in time
Compilation pipeline
High-level PHP bytecode
PHP x64HHBC
just in time
$elem = ...;
if ($elem > 0) {
...
}
63 SetL L:4
65 PopC
66 Int 0
75 CGetL2 L:4
77 Gt
78 JmpZ 13 (91)
Compilation pipeline
HHVM intermediate representation
x64HHIR
just in time
PHP HHBC
63 SetL L:4
65 PopC
66 Int 0
75 CGetL2 L:4
77 Gt
78 JmpZ 13 (91)
63: SetL L:4
(12) t3:Int = LdStk<Int,IRSPOff 0> t1:StkPtr
(14) StLoc<4> t0:FramePtr, t3:Int
66: Int 0
(21) StStk<IRSPOff 0> t1:StkPtr, 0
75: CGetL2 L:4
(24) StStk<IRSPOff 0> t1:StkPtr, t3:Int
(25) StStk<IRSPOff -1> t1:StkPtr, 0
Compilation pipeline
Bytecode-to-bytecode transformation
x64HHIR
just in time
PHP HHBC
optionally ahead of time
63 SetL L:4
65 PopC
66 Int 0
75 CGetL2 L:4
77 Gt
78 JmpZ 13 (91)
63: SetL L:4
(12) t3:Int = LdStk<Int,IRSPOff 0> t1:StkPtr
(14) StLoc<4> t0:FramePtr, t3:Int
66: Int 0
(21) StStk<IRSPOff 0> t1:StkPtr, 0
75: CGetL2 L:4
(24) StStk<IRSPOff 0> t1:StkPtr, t3:Int
(25) StStk<IRSPOff -1> t1:StkPtr, 0
• This is where the magic happens
Compilation pipeline
x64HHIR
just in time
PHP HHBC
optionally ahead of time
83 CGetL L:4
85 CGetL2 L:2
87 Add
88 SetL L:2
90 PopC
$sum:Dbl ; $elem:Int
83 CGetL L:4
85 CGetL2 L:2
87 Add
88 SetL L:2
90 PopC
$sum:Dbl ; $elem:Dbl
83 CGetL L:4
85 CGetL2 L:2
87 Add
88 SetL L:2
90 PopC
$sum:Int ; $elem:Dbl
Dynamic type specialization
JIT optimizations
43 CGetL L:1
45 CGetL2 L:3
47 Lt
48 JmpZ 57 (105)
$n:Int ; $i:Int
91 IncDecL L:3 PostInc
94 PopC
95 CGetL L:1
97 CGetL2 L:3
99 Lt
100 JmpNZ -47 (53)
$n:Int; $i:Int
83 CGetL L:4
85 CGetL2 L:2
87 Add
88 SetL L:2
90 PopC
$sum:Int ; $elem:Int
53 BaseL L:0 Warn
57 QueryM 0 CGet EL:3
$arr:Arr ; $i:Int
63 SetL L:4
65 PopC
66 Int 0
75 CGetL2 L:4
77 Gt
78 JmpZ 13 (91)
$elem:Unc ; Stk{0}:Dbl
63 SetL L:4
65 PopC
66 Int 0
75 CGetL2 L:4
77 Gt
78 JmpZ 13 (91)
$elem:Unc ; Stk{0}:Int
function addPositive($arr, $n) {
$sum = 0;
for ($i = 0; $i < $n; $i++) {
$elem = $arr[$i];
if ($elem > 0) {
$sum = $sum + $elem;
}
}
return $sum;
}
83 CGetL L:4
85 CGetL2 L:2
87 Add
88 SetL L:2
90 PopC
$sum:Dbl ; $elem:Int
83 CGetL L:4
85 CGetL2 L:2
87 Add
88 SetL L:2
90 PopC
$sum:Dbl ; $elem:Dbl
83 CGetL L:4
85 CGetL2 L:2
87 Add
88 SetL L:2
90 PopC
$sum:Int ; $elem:Dbl
Profile-guided optimization
JIT optimizations
43 CGetL L:1
45 CGetL2 L:3
47 Lt
48 JmpZ 57 (105)
$n:Int ; $i:Int
91 IncDecL L:3 PostInc
94 PopC
95 CGetL L:1
97 CGetL2 L:3
99 Lt
100 JmpNZ -47 (53)
$n:Int; $i:Int
83 CGetL L:4
85 CGetL2 L:2
87 Add
88 SetL L:2
90 PopC
$sum:Int ; $elem:Int
53 BaseL L:0 Warn
57 QueryM 0 CGet EL:3
$arr:Arr ; $i:Int
63 SetL L:4
65 PopC
66 Int 0
75 CGetL2 L:4
77 Gt
78 JmpZ 13 (91)
$elem:Unc ; Stk{0}:Dbl
63 SetL L:4
65 PopC
66 Int 0
75 CGetL2 L:4
77 Gt
78 JmpZ 13 (91)
$elem:Unc ; Stk{0}:Int
function addPositive($arr, $n) {
$sum = 0;
for ($i = 0; $i < $n; $i++) {
$elem = $arr[$i];
if ($elem > 0) {
$sum = $sum + $elem;
}
}
return $sum;
}
83 CGetL L:4
85 CGetL2 L:2
87 Add
88 SetL L:2
90 PopC
$sum:Dbl ; $elem:Dbl
Profile-guided optimization
JIT optimizations 43 CGetL L:1
45 CGetL2 L:3
47 Lt
48 JmpZ 57 (105)
$n:Int ; $i:Int
53 BaseL L:0 Warn
57 QueryM 0 CGet EL:3
$arr:Arr ; $i:Int
63 SetL L:4
65 PopC
66 Int 0
75 CGetL2 L:4
77 Gt
78 JmpZ 13 (91)
$elem:Unc ; Stk{0}:Dblfunction addPositive($arr, $n) {
$sum = 0;
for ($i = 0; $i < $n; $i++) {
$elem = $arr[$i];
if ($elem > 0) {
$sum = $sum + $elem;
}
}
return $sum;
}
91 IncDecL L:3 PostInc
94 PopC
95 CGetL L:1
97 CGetL2 L:3
99 Lt
100 JmpNZ -47 (53)
HHIR optimization passes
JIT optimizations
69: CGetL L:1
(12) t3:Str = LdLoc<Str,1> t0:FramePtr
(13) IncRef t3:Str
71: CGetL2 L:0
(16) t4:Str = LdLoc<Str,0> t0:FramePtr
(17) IncRef t4:Str
73: Concat
(22) t5:Str = ConcatStrStr t4:Str, t3:Str
(24) DecRef<-> t3:Str
74: SetL L:2
(27) StLoc<2> t0:FramePtr, t5:Str
(28) IncRef t5:Str
76: PopC
(31) DecRef<-> t5:Str
77: CGetL L:2
(33) IncRef t5:Str
79: FCallBuiltin 1 1 "strlen"
(35) t7:Int = LdStrLen t5:Str
(36) DecRef<-> t5:Str
69: CGetL L:1
(12) t3:Str = LdLoc<Str,1> t0:FramePtr
(13) IncRef t3:Str
71: CGetL2 L:0
(16) t4:Str = LdLoc<Str,0> t0:FramePtr
(17) IncRef t4:Str
73: Concat
(22) t5:Str = ConcatStrStr t4:Str, t3:Str
(24) DecRef<-> t3:Str
74: SetL L:2
(27) StLoc<2> t0:FramePtr, t5:Str
(28) IncRef t5:Str
76: PopC
(31) DecRef<-> t5:Str
$c = $a . $b;
$len = strlen($c);
HHIR optimization passes
JIT optimizations
69: CGetL L:1
(12) t3:Str = LdLoc<Str,1> t0:FramePtr
(13) IncRef t3:Str
71: CGetL2 L:0
(16) t4:Str = LdLoc<Str,0> t0:FramePtr
(17) IncRef t4:Str
73: Concat
(22) t5:Str = ConcatStrStr t4:Str, t3:Str
(24) DecRef<-> t3:Str
74: SetL L:2
(27) StLoc<2> t0:FramePtr, t5:Str
(28) IncRef t5:Str
76: PopC
(31) DecRef<-> t5:Str
77: CGetL L:2
(33) IncRef t5:Str
79: FCallBuiltin 1 1 "strlen"
(35) t7:Int = LdStrLen t5:Str
(36) DecRef<-> t5:Str
$c = $a . $b;
$len = strlen($c);
HHIR optimization passes
JIT optimizations
69: CGetL L:1
(12) t3:Str = LdLoc<Str,1> t0:FramePtr
(13) Nop
71: CGetL2 L:0
(16) t4:Str = LdLoc<Str,0> t0:FramePtr
(17) IncRef t4:Str
73: Concat
(22) t5:Str = ConcatStrStr t4:Str, t3:Str
(24) Nop
74: SetL L:2
(27) StLoc<2> t0:FramePtr, t5:Str
(28) Nop
76: PopC
(31) Nop
77: CGetL L:2
(33) Nop
79: FCallBuiltin 1 1 "strlen"
(35) t7:Int = LdStrLen t5:Str
(36) Nop
$c = $a . $b;
$len = strlen($c);
HHIR optimization passes
JIT optimizations
69: CGetL L:1
(12) t3:Str = LdLoc<Str,1> t0:FramePtr
71: CGetL2 L:0
(16) t4:Str = LdLoc<Str,0> t0:FramePtr
(17) IncRef t4:Str
73: Concat
(22) t5:Str = ConcatStrStr t4:Str, t3:Str
74: SetL L:2
(27) StLoc<2> t0:FramePtr, t5:Str
79: FCallBuiltin 1 1 "strlen"
(35) t7:Int = LdStrLen t5:Str
$c = $a . $b;
$len = strlen($c);
/* ... */
HHIR optimization passes
JIT optimizations
Will the demo work?
1
4
3
Where do we go from here?
How did we get running on AArch64?2
What is HHVM?
Agenda
i.e., Who did all the hard work?
Compilation pipeline
x64HHIR
just in time
PHP HHBC
optionally ahead of time
Compilation pipeline
ARM simulator
x64
HHIR
just in time
PHP HHBC
optionally ahead of time
vixl
• Maintenance nightmare
• > 600 HHIR ops:
• We aren't ARM experts
Compilation pipeline
ARM simulator
x64
HHIR
just in time
PHP HHBC
optionally ahead of time
vixl
Compilation pipeline
x64HHIR
just in time
PHP HHBC
optionally ahead of time
63 SetL L:4
65 PopC
66 Int 0
75 CGetL2 L:4
77 Gt
78 JmpZ 13 (91)
63: SetL L:4
(12) t3:Int = LdStk<Int,IRSPOff 0> t1:StkPtr
(14) StLoc<4> t0:FramePtr, t3:Int
66: Int 0
(21) StStk<IRSPOff 0> t1:StkPtr, 0
75: CGetL2 L:4
(24) StStk<IRSPOff 0> t1:StkPtr, t3:Int
(25) StStk<IRSPOff -1> t1:StkPtr, 0
just in time
Compilation pipeline
Virtual assembly
PHP x64HHIRHHBC vasm
optionally ahead of time
63: SetL L:4
(12) t3:Int = LdStk<Int,IRSPOff 0> t1:StkPtr
(14) StLoc<4> t0:FramePtr, t3:Int
66: Int 0
(21) StStk<IRSPOff 0> t1:StkPtr, 0
75: CGetL2 L:4
(24) StStk<IRSPOff 0> t1:StkPtr, t3:Int
(25) StStk<IRSPOff -1> t1:StkPtr, 0
load [%128] => %129
storeb %136(17b), [%rbp - 0x48]
store %129, [%rbp - 0x50]
storeb %136(17b), [%128 + 0x8]
store %129, [%128]
just in time
• Uncanny resemblance to x64
• Spiritual sibling of WebKit's Bare Bones Backend
Compilation pipeline
Virtual assembly
PHP x64HHIRHHBC vasm
optionally ahead of time
just in time
• "Why don't you just use LLVM?" 🤔
• We tried it:
• No noticeable performance gains
• LLVM's MCJIT is too heavyweight
Compilation pipeline
LLVM? Have you heard of it?
PHP LLIR?HHIRHHBC vasm
optionally ahead of time
• Experimental LLVM backend stress-tested vasm
• Calling conventions
• Register widths
• ...
Compilation pipeline
LLVM? Have you heard of it?
PHP LLIR?HHIRHHBC vasm
optionally ahead of time just in time
Compilation pipeline
ARM backend
PHP HHIR
just in time
HHBC vasm
optionally ahead of time
x64
arm
Compilation pipeline
Backends for everyone!
PHP HHIR
just in time
HHBC vasm
optionally ahead of time
x64
ppc64
arm
• Lakshmi Pathy — @lpathy
• Dave Estes — @dave-estes
• Jim Saxman — @jim-saxman
• Christoph Müllner — @cmuellner
• Steve Walk — @swalk-cavium
• Andrew Pinski — @apinski-cavium
• ...
Contributors
The most important slide in this talk
• Final vasm-to-AArch64 lowering pass
• Code smashing
• Boundary-crossing b/w C++ and jitted code
• Bonus: Continuous integration testing!
ARM backend
Baseline functionality
• Strength reduction on flag-setting instructions
• 64-bit immediate lifting
• Branch offset optimizations
• ...
ARM backend
Optimizations
Will the demo work?
1
4
3
Where do we go from here?
How did we get running on AArch64?2
What is HHVM?
Agenda
Hold onto your backends
Will the demo work?
1
4
3
Where do we go from here?
How did we get running on AArch64?2
What is HHVM?
Agenda
i.e., How can you get involved?
• Cache is king!
• Instruction sequences generally larger on AArch64
• HHVM is sensitive to code layout
• Huge pages
• Indirect branch rewriting
• Locality tuning
• ...
Future work
Code size and layout
• Profile OSS workloads on ARM using perf
• https://github.com/hhvm/oss-performance
• Make some measurements
Future work
More ARM-specific optimizations
• Website: http://hhvm.com/
• GitHub: https://github.com/facebook/hhvm
• IRC: #hphp-dev on Freenode
• Mailing list: https://groups.google.com/d/forum/hhvm-arm
• My email: mwang@fb.com
Resources
Feel free to contribute!
Quick recap
HHVM on AArch64
Quick recap
HHVM on AArch64
1 HHVM
Quick recap
HHVM on AArch64
1
It runs on AArch64 (thanks to the community)2
HHVM
Quick recap
HHVM on AArch64
Seriously, the demo worked and everything
1
3
It runs on AArch64 (thanks to the community)2
HHVM
Any questions?
Any questions?
Seriously, the demo worked and everything
1
4
3
Any questions?
It runs on AArch64 (thanks to the community)2
HHVM
HHVM on AArch64 - BUD17-400K1

More Related Content

What's hot

Computer Networks Lab File
Computer Networks Lab FileComputer Networks Lab File
Computer Networks Lab FileKandarp Tiwari
 
Python Performance 101
Python Performance 101Python Performance 101
Python Performance 101Ankur Gupta
 
Flink Forward Berlin 2017: Max Kiessling, Martin Junghanns - Cypher-based Gra...
Flink Forward Berlin 2017: Max Kiessling, Martin Junghanns - Cypher-based Gra...Flink Forward Berlin 2017: Max Kiessling, Martin Junghanns - Cypher-based Gra...
Flink Forward Berlin 2017: Max Kiessling, Martin Junghanns - Cypher-based Gra...Flink Forward
 
Проблемы использования TCP в мобильных приложениях. Владимир Кириллов
Проблемы использования TCP в мобильных приложениях.  Владимир КирилловПроблемы использования TCP в мобильных приложениях.  Владимир Кириллов
Проблемы использования TCP в мобильных приложениях. Владимир КирилловAnthony Marchenko
 
Go Native : Squeeze the juice out of your 64-bit processor using C++
Go Native : Squeeze the juice out of your 64-bit processor using C++Go Native : Squeeze the juice out of your 64-bit processor using C++
Go Native : Squeeze the juice out of your 64-bit processor using C++Fernando Moreira
 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)Angel Boy
 
Euro python2011 High Performance Python
Euro python2011 High Performance PythonEuro python2011 High Performance Python
Euro python2011 High Performance PythonIan Ozsvald
 
Erlang Introduction Bcberlin3
Erlang Introduction Bcberlin3Erlang Introduction Bcberlin3
Erlang Introduction Bcberlin3guesta3202
 
All VLSI programs
All VLSI programsAll VLSI programs
All VLSI programsGouthaman V
 
Tiramisu をちょっと、味見してみました。
Tiramisu をちょっと、味見してみました。Tiramisu をちょっと、味見してみました。
Tiramisu をちょっと、味見してみました。Mr. Vengineer
 
Programming at Compile Time
Programming at Compile TimeProgramming at Compile Time
Programming at Compile TimeemBO_Conference
 
Devirtualizing FinSpy
Devirtualizing FinSpyDevirtualizing FinSpy
Devirtualizing FinSpyjduart
 
Android Multimedia Framework
Android Multimedia FrameworkAndroid Multimedia Framework
Android Multimedia FrameworkPicker Weng
 
Best Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesBest Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesAndrey Karpov
 

What's hot (20)

Computer Networks Lab File
Computer Networks Lab FileComputer Networks Lab File
Computer Networks Lab File
 
Python Performance 101
Python Performance 101Python Performance 101
Python Performance 101
 
GCC
GCCGCC
GCC
 
Flink Forward Berlin 2017: Max Kiessling, Martin Junghanns - Cypher-based Gra...
Flink Forward Berlin 2017: Max Kiessling, Martin Junghanns - Cypher-based Gra...Flink Forward Berlin 2017: Max Kiessling, Martin Junghanns - Cypher-based Gra...
Flink Forward Berlin 2017: Max Kiessling, Martin Junghanns - Cypher-based Gra...
 
IT6712 lab manual
IT6712 lab manualIT6712 lab manual
IT6712 lab manual
 
Проблемы использования TCP в мобильных приложениях. Владимир Кириллов
Проблемы использования TCP в мобильных приложениях.  Владимир КирилловПроблемы использования TCP в мобильных приложениях.  Владимир Кириллов
Проблемы использования TCP в мобильных приложениях. Владимир Кириллов
 
Go Native : Squeeze the juice out of your 64-bit processor using C++
Go Native : Squeeze the juice out of your 64-bit processor using C++Go Native : Squeeze the juice out of your 64-bit processor using C++
Go Native : Squeeze the juice out of your 64-bit processor using C++
 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)
 
Virtual Machine Constructions for Dummies
Virtual Machine Constructions for DummiesVirtual Machine Constructions for Dummies
Virtual Machine Constructions for Dummies
 
Euro python2011 High Performance Python
Euro python2011 High Performance PythonEuro python2011 High Performance Python
Euro python2011 High Performance Python
 
Q 1
Q 1Q 1
Q 1
 
Erlang Introduction Bcberlin3
Erlang Introduction Bcberlin3Erlang Introduction Bcberlin3
Erlang Introduction Bcberlin3
 
TVM VTA (TSIM)
TVM VTA (TSIM) TVM VTA (TSIM)
TVM VTA (TSIM)
 
All VLSI programs
All VLSI programsAll VLSI programs
All VLSI programs
 
Tiramisu をちょっと、味見してみました。
Tiramisu をちょっと、味見してみました。Tiramisu をちょっと、味見してみました。
Tiramisu をちょっと、味見してみました。
 
Programming at Compile Time
Programming at Compile TimeProgramming at Compile Time
Programming at Compile Time
 
Interpreter, Compiler, JIT from scratch
Interpreter, Compiler, JIT from scratchInterpreter, Compiler, JIT from scratch
Interpreter, Compiler, JIT from scratch
 
Devirtualizing FinSpy
Devirtualizing FinSpyDevirtualizing FinSpy
Devirtualizing FinSpy
 
Android Multimedia Framework
Android Multimedia FrameworkAndroid Multimedia Framework
Android Multimedia Framework
 
Best Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesBest Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' Mistakes
 

Viewers also liked

BUD17-400: Secure Data Path with OPTEE
BUD17-400: Secure Data Path with OPTEE BUD17-400: Secure Data Path with OPTEE
BUD17-400: Secure Data Path with OPTEE Linaro
 
BUD17-416: Benchmark and profiling in OP-TEE
BUD17-416: Benchmark and profiling in OP-TEE BUD17-416: Benchmark and profiling in OP-TEE
BUD17-416: Benchmark and profiling in OP-TEE Linaro
 
BUD17-309: IRQ prediction
BUD17-309: IRQ prediction BUD17-309: IRQ prediction
BUD17-309: IRQ prediction Linaro
 
The HPE Machine and Gen-Z - BUD17-503
The HPE Machine and Gen-Z - BUD17-503The HPE Machine and Gen-Z - BUD17-503
The HPE Machine and Gen-Z - BUD17-503Linaro
 
BUD17-214: Bus scaling QoS update
BUD17-214: Bus scaling QoS update BUD17-214: Bus scaling QoS update
BUD17-214: Bus scaling QoS update Linaro
 
BUD17-510: Power management in Linux together with secure firmware
BUD17-510: Power management in Linux together with secure firmwareBUD17-510: Power management in Linux together with secure firmware
BUD17-510: Power management in Linux together with secure firmwareLinaro
 
Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120
Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120
Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120Linaro
 
BUD17-DF15 - Optimized Android N MR1 + 4.9 Kernel
BUD17-DF15 - Optimized Android N MR1 + 4.9 KernelBUD17-DF15 - Optimized Android N MR1 + 4.9 Kernel
BUD17-DF15 - Optimized Android N MR1 + 4.9 KernelLinaro
 
George Grey Welcome Keynote - BUD17-100K1
George Grey Welcome Keynote - BUD17-100K1George Grey Welcome Keynote - BUD17-100K1
George Grey Welcome Keynote - BUD17-100K1Linaro
 
BUD17-310: Introducing LLDB for linux on Arm and AArch64
BUD17-310: Introducing LLDB for linux on Arm and AArch64 BUD17-310: Introducing LLDB for linux on Arm and AArch64
BUD17-310: Introducing LLDB for linux on Arm and AArch64 Linaro
 
BUD17-218: Scheduler Load tracking update and improvement
BUD17-218: Scheduler Load tracking update and improvement BUD17-218: Scheduler Load tracking update and improvement
BUD17-218: Scheduler Load tracking update and improvement Linaro
 
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64 BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64 Linaro
 

Viewers also liked (12)

BUD17-400: Secure Data Path with OPTEE
BUD17-400: Secure Data Path with OPTEE BUD17-400: Secure Data Path with OPTEE
BUD17-400: Secure Data Path with OPTEE
 
BUD17-416: Benchmark and profiling in OP-TEE
BUD17-416: Benchmark and profiling in OP-TEE BUD17-416: Benchmark and profiling in OP-TEE
BUD17-416: Benchmark and profiling in OP-TEE
 
BUD17-309: IRQ prediction
BUD17-309: IRQ prediction BUD17-309: IRQ prediction
BUD17-309: IRQ prediction
 
The HPE Machine and Gen-Z - BUD17-503
The HPE Machine and Gen-Z - BUD17-503The HPE Machine and Gen-Z - BUD17-503
The HPE Machine and Gen-Z - BUD17-503
 
BUD17-214: Bus scaling QoS update
BUD17-214: Bus scaling QoS update BUD17-214: Bus scaling QoS update
BUD17-214: Bus scaling QoS update
 
BUD17-510: Power management in Linux together with secure firmware
BUD17-510: Power management in Linux together with secure firmwareBUD17-510: Power management in Linux together with secure firmware
BUD17-510: Power management in Linux together with secure firmware
 
Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120
Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120
Linux-wpan: IEEE 802.15.4 and 6LoWPAN in the Linux Kernel - BUD17-120
 
BUD17-DF15 - Optimized Android N MR1 + 4.9 Kernel
BUD17-DF15 - Optimized Android N MR1 + 4.9 KernelBUD17-DF15 - Optimized Android N MR1 + 4.9 Kernel
BUD17-DF15 - Optimized Android N MR1 + 4.9 Kernel
 
George Grey Welcome Keynote - BUD17-100K1
George Grey Welcome Keynote - BUD17-100K1George Grey Welcome Keynote - BUD17-100K1
George Grey Welcome Keynote - BUD17-100K1
 
BUD17-310: Introducing LLDB for linux on Arm and AArch64
BUD17-310: Introducing LLDB for linux on Arm and AArch64 BUD17-310: Introducing LLDB for linux on Arm and AArch64
BUD17-310: Introducing LLDB for linux on Arm and AArch64
 
BUD17-218: Scheduler Load tracking update and improvement
BUD17-218: Scheduler Load tracking update and improvement BUD17-218: Scheduler Load tracking update and improvement
BUD17-218: Scheduler Load tracking update and improvement
 
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64 BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
BUD17-209: Reliability, Availability, and Serviceability (RAS) on ARM64
 

Similar to HHVM on AArch64 - BUD17-400K1

Scale17x buffer overflows
Scale17x buffer overflowsScale17x buffer overflows
Scale17x buffer overflowsjohseg
 
Chapter Eight(3)
Chapter Eight(3)Chapter Eight(3)
Chapter Eight(3)bolovv
 
Reverse engineering of binary programs for custom virtual machines
Reverse engineering of binary programs for custom virtual machinesReverse engineering of binary programs for custom virtual machines
Reverse engineering of binary programs for custom virtual machinesSmartDec
 
Make ARM Shellcode Great Again - HITB2018PEK
Make ARM Shellcode Great Again - HITB2018PEKMake ARM Shellcode Great Again - HITB2018PEK
Make ARM Shellcode Great Again - HITB2018PEKSaumil Shah
 
Implement an MPI program to perform matrix-matrix multiplication AB .pdf
Implement an MPI program to perform matrix-matrix multiplication AB .pdfImplement an MPI program to perform matrix-matrix multiplication AB .pdf
Implement an MPI program to perform matrix-matrix multiplication AB .pdfmeerobertsonheyde608
 
Reverse Engineering Dojo: Enhancing Assembly Reading Skills
Reverse Engineering Dojo: Enhancing Assembly Reading SkillsReverse Engineering Dojo: Enhancing Assembly Reading Skills
Reverse Engineering Dojo: Enhancing Assembly Reading SkillsAsuka Nakajima
 
Windbg랑 친해지기
Windbg랑 친해지기Windbg랑 친해지기
Windbg랑 친해지기Ji Hun Kim
 
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019corehard_by
 
TDOH x 台科 pwn課程
TDOH x 台科 pwn課程TDOH x 台科 pwn課程
TDOH x 台科 pwn課程Weber Tsai
 
PVS-Studio team experience: checking various open source projects, or mistake...
PVS-Studio team experience: checking various open source projects, or mistake...PVS-Studio team experience: checking various open source projects, or mistake...
PVS-Studio team experience: checking various open source projects, or mistake...Andrey Karpov
 
The str/bytes nightmare before python2 EOL
The str/bytes nightmare before python2 EOLThe str/bytes nightmare before python2 EOL
The str/bytes nightmare before python2 EOLKir Chou
 
20190521 pwn 101_by_roy
20190521 pwn 101_by_roy20190521 pwn 101_by_roy
20190521 pwn 101_by_royRoy
 
Reverse engineering20151112
Reverse engineering20151112Reverse engineering20151112
Reverse engineering20151112Bordeaux I
 
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itEvgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itSergey Platonov
 
Please convert the following C code to assembly Y86int j,k; .....pdf
Please convert the following C code to assembly Y86int j,k; .....pdfPlease convert the following C code to assembly Y86int j,k; .....pdf
Please convert the following C code to assembly Y86int j,k; .....pdffoottraders
 
The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...
The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...
The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...Positive Hack Days
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64FFRI, Inc.
 
C++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical ReviewerC++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical ReviewerAndrey Karpov
 
Reverse eningeering
Reverse eningeeringReverse eningeering
Reverse eningeeringKent Huang
 

Similar to HHVM on AArch64 - BUD17-400K1 (20)

Scale17x buffer overflows
Scale17x buffer overflowsScale17x buffer overflows
Scale17x buffer overflows
 
Chapter Eight(3)
Chapter Eight(3)Chapter Eight(3)
Chapter Eight(3)
 
Reverse engineering of binary programs for custom virtual machines
Reverse engineering of binary programs for custom virtual machinesReverse engineering of binary programs for custom virtual machines
Reverse engineering of binary programs for custom virtual machines
 
Make ARM Shellcode Great Again - HITB2018PEK
Make ARM Shellcode Great Again - HITB2018PEKMake ARM Shellcode Great Again - HITB2018PEK
Make ARM Shellcode Great Again - HITB2018PEK
 
Implement an MPI program to perform matrix-matrix multiplication AB .pdf
Implement an MPI program to perform matrix-matrix multiplication AB .pdfImplement an MPI program to perform matrix-matrix multiplication AB .pdf
Implement an MPI program to perform matrix-matrix multiplication AB .pdf
 
Reverse Engineering Dojo: Enhancing Assembly Reading Skills
Reverse Engineering Dojo: Enhancing Assembly Reading SkillsReverse Engineering Dojo: Enhancing Assembly Reading Skills
Reverse Engineering Dojo: Enhancing Assembly Reading Skills
 
Windbg랑 친해지기
Windbg랑 친해지기Windbg랑 친해지기
Windbg랑 친해지기
 
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
 
TDOH x 台科 pwn課程
TDOH x 台科 pwn課程TDOH x 台科 pwn課程
TDOH x 台科 pwn課程
 
PVS-Studio team experience: checking various open source projects, or mistake...
PVS-Studio team experience: checking various open source projects, or mistake...PVS-Studio team experience: checking various open source projects, or mistake...
PVS-Studio team experience: checking various open source projects, or mistake...
 
The str/bytes nightmare before python2 EOL
The str/bytes nightmare before python2 EOLThe str/bytes nightmare before python2 EOL
The str/bytes nightmare before python2 EOL
 
20190521 pwn 101_by_roy
20190521 pwn 101_by_roy20190521 pwn 101_by_roy
20190521 pwn 101_by_roy
 
Reverse engineering20151112
Reverse engineering20151112Reverse engineering20151112
Reverse engineering20151112
 
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itEvgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
 
Please convert the following C code to assembly Y86int j,k; .....pdf
Please convert the following C code to assembly Y86int j,k; .....pdfPlease convert the following C code to assembly Y86int j,k; .....pdf
Please convert the following C code to assembly Y86int j,k; .....pdf
 
The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...
The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...
The System of Automatic Searching for Vulnerabilities or how to use Taint Ana...
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64
 
Qemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System EmulationQemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System Emulation
 
C++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical ReviewerC++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical Reviewer
 
Reverse eningeering
Reverse eningeeringReverse eningeering
Reverse eningeering
 

More from Linaro

Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea GalloDeep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea GalloLinaro
 
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta VekariaArm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta VekariaLinaro
 
Huawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua MoraHuawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua MoraLinaro
 
Bud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qaBud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qaLinaro
 
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018Linaro
 
HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018Linaro
 
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...Linaro
 
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...Linaro
 
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...Linaro
 
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Linaro
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineLinaro
 
HKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteHKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteLinaro
 
HKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopHKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopLinaro
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineLinaro
 
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and allHKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and allLinaro
 
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorHKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorLinaro
 
HKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMUHKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMULinaro
 
HKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8MHKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8MLinaro
 
HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation Linaro
 
HKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootHKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootLinaro
 

More from Linaro (20)

Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea GalloDeep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
 
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta VekariaArm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
 
Huawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua MoraHuawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
 
Bud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qaBud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qa
 
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
 
HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018
 
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
 
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
 
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
 
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
 
HKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteHKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening Keynote
 
HKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopHKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP Workshop
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
 
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and allHKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
 
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorHKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
 
HKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMUHKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMU
 
HKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8MHKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8M
 
HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation
 
HKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootHKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted boot
 

Recently uploaded

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 

Recently uploaded (20)

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

HHVM on AArch64 - BUD17-400K1

  • 1.
  • 2. HHVM on AArch64 Max Wang Software Engineer HHVM
  • 3. Agenda Four questions: Will the demo work? 1 4 3 Where do we go from here? How did we get running on AArch64?2 What is HHVM?
  • 4. Agenda Four questions: Will the demo work? 1 4 3 Where do we go from here? How did we get running on AArch64?2 What is HHVM?
  • 5. Agenda Four questions: Will the demo work? 1 4 3 Where do we go from here? How did we get running on AArch64?2 What is HHVM?
  • 6. Agenda Four questions: Will the demo work? 1 4 3 Where do we go from here? How did we get running on AArch64?2 What is HHVM?
  • 7. Agenda Four questions: Will the demo work? 1 4 3 Where do we go from here? How did we get running on AArch64?2 What is HHVM?
  • 8. Will the demo work? 1 4 3 Where do we go from here? How did we get running on AArch64?2 What is HHVM? Agenda i.e., Why should you care?
  • 9. • Just-in-time compiler for PHP and Hack What is HHVM? In a nutshell "1" + "2" == 3 "1" + "2wo" == 3 "15" + "0xf" == 15 ("15" == "0xf") == true $str = "foo"; list($a, $b) = $str; var_dump($a); // "f" list($a, $b) = "foo"; var_dump($a); // NULL
  • 10.
  • 11. • Just-in-time compiler for PHP and Hack What is HHVM? In a nutshell <?hh class Foo<T> { public async function getBar( dict<string,T> $ts ): Awaitable<Bar> { return await fetch_bar($this->priv, $ts); } }
  • 12. • Serves production web traffic for Facebook • HHVM is fast! • Orders of magnitude improvement • Not just for FB! What is HHVM? In a nutshell
  • 13. • Open source (https://github.com/facebook/hhvm) • Used by 3 of the Alexa Top 5 • Facebook, Baidu, Wikipedia • Also: Box, Slack, Etsy, Wordpress, ... What is HHVM? In a nutshell {
  • 14. • Fast! • Open source! • Just-in-time compiler for PHP and Hack What is HHVM? In a nutshell
  • 15. • Major performance improvement over PHP5 • But: • slow ahead-of-time compilation • massive binary size • static type inference on a dynamic language Compilation pipeline HipHop for PHP (HPHPc) PHP hphpc binaryC++ g++ ahead of time
  • 16. Compilation pipeline High-level PHP bytecode PHP x64HHBC just in time
  • 17. Compilation pipeline High-level PHP bytecode PHP x64HHBC just in time $elem = ...; if ($elem > 0) { ... } 63 SetL L:4 65 PopC 66 Int 0 75 CGetL2 L:4 77 Gt 78 JmpZ 13 (91)
  • 18. Compilation pipeline HHVM intermediate representation x64HHIR just in time PHP HHBC 63 SetL L:4 65 PopC 66 Int 0 75 CGetL2 L:4 77 Gt 78 JmpZ 13 (91) 63: SetL L:4 (12) t3:Int = LdStk<Int,IRSPOff 0> t1:StkPtr (14) StLoc<4> t0:FramePtr, t3:Int 66: Int 0 (21) StStk<IRSPOff 0> t1:StkPtr, 0 75: CGetL2 L:4 (24) StStk<IRSPOff 0> t1:StkPtr, t3:Int (25) StStk<IRSPOff -1> t1:StkPtr, 0
  • 19. Compilation pipeline Bytecode-to-bytecode transformation x64HHIR just in time PHP HHBC optionally ahead of time 63 SetL L:4 65 PopC 66 Int 0 75 CGetL2 L:4 77 Gt 78 JmpZ 13 (91) 63: SetL L:4 (12) t3:Int = LdStk<Int,IRSPOff 0> t1:StkPtr (14) StLoc<4> t0:FramePtr, t3:Int 66: Int 0 (21) StStk<IRSPOff 0> t1:StkPtr, 0 75: CGetL2 L:4 (24) StStk<IRSPOff 0> t1:StkPtr, t3:Int (25) StStk<IRSPOff -1> t1:StkPtr, 0
  • 20. • This is where the magic happens Compilation pipeline x64HHIR just in time PHP HHBC optionally ahead of time
  • 21. 83 CGetL L:4 85 CGetL2 L:2 87 Add 88 SetL L:2 90 PopC $sum:Dbl ; $elem:Int 83 CGetL L:4 85 CGetL2 L:2 87 Add 88 SetL L:2 90 PopC $sum:Dbl ; $elem:Dbl 83 CGetL L:4 85 CGetL2 L:2 87 Add 88 SetL L:2 90 PopC $sum:Int ; $elem:Dbl Dynamic type specialization JIT optimizations 43 CGetL L:1 45 CGetL2 L:3 47 Lt 48 JmpZ 57 (105) $n:Int ; $i:Int 91 IncDecL L:3 PostInc 94 PopC 95 CGetL L:1 97 CGetL2 L:3 99 Lt 100 JmpNZ -47 (53) $n:Int; $i:Int 83 CGetL L:4 85 CGetL2 L:2 87 Add 88 SetL L:2 90 PopC $sum:Int ; $elem:Int 53 BaseL L:0 Warn 57 QueryM 0 CGet EL:3 $arr:Arr ; $i:Int 63 SetL L:4 65 PopC 66 Int 0 75 CGetL2 L:4 77 Gt 78 JmpZ 13 (91) $elem:Unc ; Stk{0}:Dbl 63 SetL L:4 65 PopC 66 Int 0 75 CGetL2 L:4 77 Gt 78 JmpZ 13 (91) $elem:Unc ; Stk{0}:Int function addPositive($arr, $n) { $sum = 0; for ($i = 0; $i < $n; $i++) { $elem = $arr[$i]; if ($elem > 0) { $sum = $sum + $elem; } } return $sum; }
  • 22. 83 CGetL L:4 85 CGetL2 L:2 87 Add 88 SetL L:2 90 PopC $sum:Dbl ; $elem:Int 83 CGetL L:4 85 CGetL2 L:2 87 Add 88 SetL L:2 90 PopC $sum:Dbl ; $elem:Dbl 83 CGetL L:4 85 CGetL2 L:2 87 Add 88 SetL L:2 90 PopC $sum:Int ; $elem:Dbl Profile-guided optimization JIT optimizations 43 CGetL L:1 45 CGetL2 L:3 47 Lt 48 JmpZ 57 (105) $n:Int ; $i:Int 91 IncDecL L:3 PostInc 94 PopC 95 CGetL L:1 97 CGetL2 L:3 99 Lt 100 JmpNZ -47 (53) $n:Int; $i:Int 83 CGetL L:4 85 CGetL2 L:2 87 Add 88 SetL L:2 90 PopC $sum:Int ; $elem:Int 53 BaseL L:0 Warn 57 QueryM 0 CGet EL:3 $arr:Arr ; $i:Int 63 SetL L:4 65 PopC 66 Int 0 75 CGetL2 L:4 77 Gt 78 JmpZ 13 (91) $elem:Unc ; Stk{0}:Dbl 63 SetL L:4 65 PopC 66 Int 0 75 CGetL2 L:4 77 Gt 78 JmpZ 13 (91) $elem:Unc ; Stk{0}:Int function addPositive($arr, $n) { $sum = 0; for ($i = 0; $i < $n; $i++) { $elem = $arr[$i]; if ($elem > 0) { $sum = $sum + $elem; } } return $sum; }
  • 23. 83 CGetL L:4 85 CGetL2 L:2 87 Add 88 SetL L:2 90 PopC $sum:Dbl ; $elem:Dbl Profile-guided optimization JIT optimizations 43 CGetL L:1 45 CGetL2 L:3 47 Lt 48 JmpZ 57 (105) $n:Int ; $i:Int 53 BaseL L:0 Warn 57 QueryM 0 CGet EL:3 $arr:Arr ; $i:Int 63 SetL L:4 65 PopC 66 Int 0 75 CGetL2 L:4 77 Gt 78 JmpZ 13 (91) $elem:Unc ; Stk{0}:Dblfunction addPositive($arr, $n) { $sum = 0; for ($i = 0; $i < $n; $i++) { $elem = $arr[$i]; if ($elem > 0) { $sum = $sum + $elem; } } return $sum; } 91 IncDecL L:3 PostInc 94 PopC 95 CGetL L:1 97 CGetL2 L:3 99 Lt 100 JmpNZ -47 (53)
  • 24. HHIR optimization passes JIT optimizations 69: CGetL L:1 (12) t3:Str = LdLoc<Str,1> t0:FramePtr (13) IncRef t3:Str 71: CGetL2 L:0 (16) t4:Str = LdLoc<Str,0> t0:FramePtr (17) IncRef t4:Str 73: Concat (22) t5:Str = ConcatStrStr t4:Str, t3:Str (24) DecRef<-> t3:Str 74: SetL L:2 (27) StLoc<2> t0:FramePtr, t5:Str (28) IncRef t5:Str 76: PopC (31) DecRef<-> t5:Str 77: CGetL L:2 (33) IncRef t5:Str 79: FCallBuiltin 1 1 "strlen" (35) t7:Int = LdStrLen t5:Str (36) DecRef<-> t5:Str 69: CGetL L:1 (12) t3:Str = LdLoc<Str,1> t0:FramePtr (13) IncRef t3:Str 71: CGetL2 L:0 (16) t4:Str = LdLoc<Str,0> t0:FramePtr (17) IncRef t4:Str 73: Concat (22) t5:Str = ConcatStrStr t4:Str, t3:Str (24) DecRef<-> t3:Str 74: SetL L:2 (27) StLoc<2> t0:FramePtr, t5:Str (28) IncRef t5:Str 76: PopC (31) DecRef<-> t5:Str $c = $a . $b; $len = strlen($c);
  • 25. HHIR optimization passes JIT optimizations 69: CGetL L:1 (12) t3:Str = LdLoc<Str,1> t0:FramePtr (13) IncRef t3:Str 71: CGetL2 L:0 (16) t4:Str = LdLoc<Str,0> t0:FramePtr (17) IncRef t4:Str 73: Concat (22) t5:Str = ConcatStrStr t4:Str, t3:Str (24) DecRef<-> t3:Str 74: SetL L:2 (27) StLoc<2> t0:FramePtr, t5:Str (28) IncRef t5:Str 76: PopC (31) DecRef<-> t5:Str 77: CGetL L:2 (33) IncRef t5:Str 79: FCallBuiltin 1 1 "strlen" (35) t7:Int = LdStrLen t5:Str (36) DecRef<-> t5:Str $c = $a . $b; $len = strlen($c);
  • 26. HHIR optimization passes JIT optimizations 69: CGetL L:1 (12) t3:Str = LdLoc<Str,1> t0:FramePtr (13) Nop 71: CGetL2 L:0 (16) t4:Str = LdLoc<Str,0> t0:FramePtr (17) IncRef t4:Str 73: Concat (22) t5:Str = ConcatStrStr t4:Str, t3:Str (24) Nop 74: SetL L:2 (27) StLoc<2> t0:FramePtr, t5:Str (28) Nop 76: PopC (31) Nop 77: CGetL L:2 (33) Nop 79: FCallBuiltin 1 1 "strlen" (35) t7:Int = LdStrLen t5:Str (36) Nop $c = $a . $b; $len = strlen($c);
  • 27. HHIR optimization passes JIT optimizations 69: CGetL L:1 (12) t3:Str = LdLoc<Str,1> t0:FramePtr 71: CGetL2 L:0 (16) t4:Str = LdLoc<Str,0> t0:FramePtr (17) IncRef t4:Str 73: Concat (22) t5:Str = ConcatStrStr t4:Str, t3:Str 74: SetL L:2 (27) StLoc<2> t0:FramePtr, t5:Str 79: FCallBuiltin 1 1 "strlen" (35) t7:Int = LdStrLen t5:Str $c = $a . $b; $len = strlen($c);
  • 28. /* ... */ HHIR optimization passes JIT optimizations
  • 29. Will the demo work? 1 4 3 Where do we go from here? How did we get running on AArch64?2 What is HHVM? Agenda i.e., Who did all the hard work?
  • 30. Compilation pipeline x64HHIR just in time PHP HHBC optionally ahead of time
  • 31. Compilation pipeline ARM simulator x64 HHIR just in time PHP HHBC optionally ahead of time vixl
  • 32. • Maintenance nightmare • > 600 HHIR ops: • We aren't ARM experts Compilation pipeline ARM simulator x64 HHIR just in time PHP HHBC optionally ahead of time vixl
  • 33. Compilation pipeline x64HHIR just in time PHP HHBC optionally ahead of time 63 SetL L:4 65 PopC 66 Int 0 75 CGetL2 L:4 77 Gt 78 JmpZ 13 (91) 63: SetL L:4 (12) t3:Int = LdStk<Int,IRSPOff 0> t1:StkPtr (14) StLoc<4> t0:FramePtr, t3:Int 66: Int 0 (21) StStk<IRSPOff 0> t1:StkPtr, 0 75: CGetL2 L:4 (24) StStk<IRSPOff 0> t1:StkPtr, t3:Int (25) StStk<IRSPOff -1> t1:StkPtr, 0
  • 34. just in time Compilation pipeline Virtual assembly PHP x64HHIRHHBC vasm optionally ahead of time 63: SetL L:4 (12) t3:Int = LdStk<Int,IRSPOff 0> t1:StkPtr (14) StLoc<4> t0:FramePtr, t3:Int 66: Int 0 (21) StStk<IRSPOff 0> t1:StkPtr, 0 75: CGetL2 L:4 (24) StStk<IRSPOff 0> t1:StkPtr, t3:Int (25) StStk<IRSPOff -1> t1:StkPtr, 0 load [%128] => %129 storeb %136(17b), [%rbp - 0x48] store %129, [%rbp - 0x50] storeb %136(17b), [%128 + 0x8] store %129, [%128]
  • 35. just in time • Uncanny resemblance to x64 • Spiritual sibling of WebKit's Bare Bones Backend Compilation pipeline Virtual assembly PHP x64HHIRHHBC vasm optionally ahead of time
  • 36. just in time • "Why don't you just use LLVM?" 🤔 • We tried it: • No noticeable performance gains • LLVM's MCJIT is too heavyweight Compilation pipeline LLVM? Have you heard of it? PHP LLIR?HHIRHHBC vasm optionally ahead of time
  • 37. • Experimental LLVM backend stress-tested vasm • Calling conventions • Register widths • ... Compilation pipeline LLVM? Have you heard of it? PHP LLIR?HHIRHHBC vasm optionally ahead of time just in time
  • 38. Compilation pipeline ARM backend PHP HHIR just in time HHBC vasm optionally ahead of time x64 arm
  • 39. Compilation pipeline Backends for everyone! PHP HHIR just in time HHBC vasm optionally ahead of time x64 ppc64 arm
  • 40. • Lakshmi Pathy — @lpathy • Dave Estes — @dave-estes • Jim Saxman — @jim-saxman • Christoph Müllner — @cmuellner • Steve Walk — @swalk-cavium • Andrew Pinski — @apinski-cavium • ... Contributors The most important slide in this talk
  • 41. • Final vasm-to-AArch64 lowering pass • Code smashing • Boundary-crossing b/w C++ and jitted code • Bonus: Continuous integration testing! ARM backend Baseline functionality
  • 42. • Strength reduction on flag-setting instructions • 64-bit immediate lifting • Branch offset optimizations • ... ARM backend Optimizations
  • 43. Will the demo work? 1 4 3 Where do we go from here? How did we get running on AArch64?2 What is HHVM? Agenda Hold onto your backends
  • 44. Will the demo work? 1 4 3 Where do we go from here? How did we get running on AArch64?2 What is HHVM? Agenda i.e., How can you get involved?
  • 45. • Cache is king! • Instruction sequences generally larger on AArch64 • HHVM is sensitive to code layout • Huge pages • Indirect branch rewriting • Locality tuning • ... Future work Code size and layout
  • 46. • Profile OSS workloads on ARM using perf • https://github.com/hhvm/oss-performance • Make some measurements Future work More ARM-specific optimizations
  • 47. • Website: http://hhvm.com/ • GitHub: https://github.com/facebook/hhvm • IRC: #hphp-dev on Freenode • Mailing list: https://groups.google.com/d/forum/hhvm-arm • My email: mwang@fb.com Resources Feel free to contribute!
  • 49. Quick recap HHVM on AArch64 1 HHVM
  • 50. Quick recap HHVM on AArch64 1 It runs on AArch64 (thanks to the community)2 HHVM
  • 51. Quick recap HHVM on AArch64 Seriously, the demo worked and everything 1 3 It runs on AArch64 (thanks to the community)2 HHVM
  • 52. Any questions? Any questions? Seriously, the demo worked and everything 1 4 3 Any questions? It runs on AArch64 (thanks to the community)2 HHVM