SlideShare a Scribd company logo
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 File
Kandarp Tiwari
 
Python Performance 101
Python Performance 101Python Performance 101
Python Performance 101
Ankur Gupta
 
GCC
GCCGCC
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
 
IT6712 lab manual
IT6712 lab manualIT6712 lab manual
IT6712 lab manual
Madhu Amarnath
 
Проблемы использования 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
 
Virtual Machine Constructions for Dummies
Virtual Machine Constructions for DummiesVirtual Machine Constructions for Dummies
Virtual Machine Constructions for Dummies
National Cheng Kung University
 
Euro python2011 High Performance Python
Euro python2011 High Performance PythonEuro python2011 High Performance Python
Euro python2011 High Performance Python
Ian Ozsvald
 
Q 1
Q 1Q 1
Erlang Introduction Bcberlin3
Erlang Introduction Bcberlin3Erlang Introduction Bcberlin3
Erlang Introduction Bcberlin3
guesta3202
 
TVM VTA (TSIM)
TVM VTA (TSIM) TVM VTA (TSIM)
TVM VTA (TSIM)
Mr. Vengineer
 
All VLSI programs
All VLSI programsAll VLSI programs
All VLSI programs
Gouthaman V
 
Tiramisu をちょっと、味見してみました。
Tiramisu をちょっと、味見してみました。Tiramisu をちょっと、味見してみました。
Tiramisu をちょっと、味見してみました。
Mr. Vengineer
 
Programming at Compile Time
Programming at Compile TimeProgramming at Compile Time
Programming at Compile Time
emBO_Conference
 
Interpreter, Compiler, JIT from scratch
Interpreter, Compiler, JIT from scratchInterpreter, Compiler, JIT from scratch
Interpreter, Compiler, JIT from scratch
National Cheng Kung University
 
Devirtualizing FinSpy
Devirtualizing FinSpyDevirtualizing FinSpy
Devirtualizing FinSpy
jduart
 
Android Multimedia Framework
Android Multimedia FrameworkAndroid Multimedia Framework
Android Multimedia Framework
Picker 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' Mistakes
Andrey 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-503
Linaro
 
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 firmware
Linaro
 
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
Linaro
 
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
Linaro
 
George Grey Welcome Keynote - BUD17-100K1
George Grey Welcome Keynote - BUD17-100K1George Grey Welcome Keynote - BUD17-100K1
George Grey Welcome Keynote - BUD17-100K1
Linaro
 
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 overflows
johseg
 
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 machines
SmartDec
 
Make ARM Shellcode Great Again - HITB2018PEK
Make ARM Shellcode Great Again - HITB2018PEKMake ARM Shellcode Great Again - HITB2018PEK
Make ARM Shellcode Great Again - HITB2018PEK
Saumil 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 .pdf
meerobertsonheyde608
 
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
Asuka 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 2019
corehard_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 EOL
Kir Chou
 
class04_x86assembly.ppt hy there u need be
class04_x86assembly.ppt hy there u need beclass04_x86assembly.ppt hy there u need be
class04_x86assembly.ppt hy there u need be
mnewg218
 
20190521 pwn 101_by_roy
20190521 pwn 101_by_roy20190521 pwn 101_by_roy
20190521 pwn 101_by_roy
Roy
 
Reverse engineering20151112
Reverse engineering20151112Reverse engineering20151112
Reverse engineering20151112
Bordeaux 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 it
Sergey 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; .....pdf
foottraders
 
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 x64
FFRI, Inc.
 
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
National Cheng Kung University
 
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
Andrey Karpov
 

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
 
class04_x86assembly.ppt hy there u need be
class04_x86assembly.ppt hy there u need beclass04_x86assembly.ppt hy there u need be
class04_x86assembly.ppt hy there u need be
 
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
 

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 Gallo
Linaro
 
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
Linaro
 
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
Linaro
 
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
Linaro
 
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
Linaro
 
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
Linaro
 
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 mainline
Linaro
 
HKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteHKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening Keynote
Linaro
 
HKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopHKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP Workshop
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 mainline
Linaro
 
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
Linaro
 
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
Linaro
 
HKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMUHKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMU
Linaro
 
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
Linaro
 
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 boot
Linaro
 

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

Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - HiikeSystem Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
Hiike
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
DanBrown980551
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
saastr
 
A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024
Intelisync
 
Azure API Management to expose backend services securely
Azure API Management to expose backend services securelyAzure API Management to expose backend services securely
Azure API Management to expose backend services securely
Dinusha Kumarasiri
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
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
 
GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
Javier Junquera
 
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Tatiana Kojar
 
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
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
SAP S/4 HANA sourcing and procurement to Public cloud
SAP S/4 HANA sourcing and procurement to Public cloudSAP S/4 HANA sourcing and procurement to Public cloud
SAP S/4 HANA sourcing and procurement to Public cloud
maazsz111
 
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
 
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
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 

Recently uploaded (20)

Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - HiikeSystem Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
 
A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024
 
Azure API Management to expose backend services securely
Azure API Management to expose backend services securelyAzure API Management to expose backend services securely
Azure API Management to expose backend services securely
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
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...
 
GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
 
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
 
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
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
SAP S/4 HANA sourcing and procurement to Public cloud
SAP S/4 HANA sourcing and procurement to Public cloudSAP S/4 HANA sourcing and procurement to Public cloud
SAP S/4 HANA sourcing and procurement to Public cloud
 
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
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 

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