Top Banner
Marcus Gründler | aixigo AG Financial Portfolio Management on Steroids
61

Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Jan 06, 2017

Download

Technology

aixigo AG
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Marcus  Gründler  |  aixigo  AG

Financial  Portfolio  Management  on  Steroids

Page 2: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

About meMarcus  Gründler@marcusgruendler

Head  of Portfolio  Management  SystemsArchitect at  aixigo  AG,  Germany

www.aixigo.de

JAX  Finance 2016  -­ London

Page 3: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Agenda

• Financial  portfolio management

• Hardware

• Java  memory

• Programming patterns

• Scaling

Page 4: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

What exactly is

Financial  PortfolioManagement?

Page 5: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Portfolio  Management

• Transactions,  prices,  securities

• Financial  algorithms

• Historical  analysis

• Time  series

Page 6: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Portfolio  Management

• No extreme  low latency

• High  data throughput (1  mio rec/sec)

• Low  response times (100ms/10,000  rec)

• Very large  datasets

Page 7: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Ishigh  performancecomputingpossible withJava?

Page 8: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Yes  ...

...  read the fine print!

Page 9: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Matrix  Sum23 101 2 34 88 120 4

44 12 234 211 112 189 11

33 1 86 201 3 11 22

65 32 62 22 34 15 67

43 178 105 138 192 38 41

11 58 35 25 27 16 21

Row major access

Page 10: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Matrix  Sum

23 101 2 34 88 120 4

44 12 234 211 112 189 11

33 1 86 201 3 11 22

65 32 62 22 34 15 67

43 178 105 138 192 38 41

11 58 35 25 27 16 21

Column major access

Page 11: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Matrix  Sum(10,000  x  10,000  elements)

ops/sec

ops/sec

ops/sec

Page 12: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Matrix  Sum

Row major access

Column major access

Page 13: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Matrix  Sum

Row major access

Column major access

Page 14: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Matrix  Sum

Row major access

Column major access

Page 15: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Matrix  Sum

Row major access

Column major access

Page 16: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Matrix  Sum

Row major access

Column major access

Page 17: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Matrix  Sum

Row major access

Column major access

Page 18: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Matrix  Sum

Row major access

Column major access

Page 19: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Matrix  Sum

Row major access

Column major access

Page 20: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Tool  Support  -­ JMH

• OpenJDK JMH  (Java  Microbenchmark Harness)  

• Eliminates measurement (in)accuracy

• Statistically robust  measurements

• Maven  and Jenkins  support

http://openjdk.java.net/projects/code-­tools/jmh/

Page 21: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Memory  Access

CPU

RAM

Page 22: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Cached Memory  Access

CPU

RAM

Cache

Page 23: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Multi  Level  Caches

CPU

RAM

L1 L2 L3

Page 24: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Latency NumbersCPU  cycles Time Size

L1  latency ~  4-­5  cycles 1.5 ns 32  KBL2  latency ~  12  cycles 3.5  ns 256  KBL3  latency ~  36  cycles 10.6 ns 8-­40  MBRAM  latency ~  230  cycles 67.6  ns 256  GB2KB  over 1GBit 20,000 ns1  MB  from RAM 250,000  nsDisk  seek 10,000,000 nsRoundtrip US-­EU-­US 150,000,000  nsIntel  i7-­4770  (Haswell),  3.4  GHz Sources:http://www.7-­cpu.com/cpu/Haswell.html

http://norvig.com/21-­days.html#answers

Page 25: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Latency NumbersCPU  cycles Time Size

L1  latency ~  4-­5  cycles 1.5 ns 32  KBL2  latency ~  12  cycles 3.5  ns 256  KBL3  latency ~  36  cycles 10.6 ns 8-­40  MBRAM  latency ~  230  cycles 67.6  ns 256  GB2KB  over 1GBit 20,000 ns1  MB  from RAM 250,000  nsDisk  seek 10,000,000 nsRoundtrip US-­EU-­US 150,000,000  nsIntel  i7-­4770  (Haswell),  3.4  GHz Sources:http://www.7-­cpu.com/cpu/Haswell.html

http://norvig.com/21-­days.html#answers

Page 26: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Cache-­oblivious Algorithms

• Optimized for minimal  memory transfer

• All  computation with L1  cache

• Cache-­“oblivious“:  no knowledge about

cache hierarchy

• Keeps CPU  permanently „under pressure“

• Empowers cache prefetching

Page 27: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Plain Matrix  Transpose

1 2 34 5 6

...

1 4...2 5

637

7

Page 28: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Cache-­oblivious Transpose

Page 29: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Matrix  Transpose(4096  x  4096  elements)

ops/sec

Page 30: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Matrix  Transpose(4096  x  4096  elements)

Cores

ops/sec

Page 31: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

• Memory  access patterns matter

• Avoid main memory jumps

• Algorithms should support prefetching

Page 32: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

How muchmemorydo  weconsume?

Page 33: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

How large  is an  object?

double  =  8 byteDouble  =  ? byte

BigDecimal =  ? byte

Page 34: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

java.lang.Double

double  =  8 byteDouble  =  ? byte

BigDecimal =  ? byte

0 4 8 12 16 20 24 28

Padding8  bytealignment

Objectheader

„Mark  word“• HashCode• Flags

Class  pointer

Data

Page 35: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

java.lang.Double

double  =  8 byteDouble  =  ? byte

BigDecimal =  ? byte

0 4 8 12 16 20 24 28

Objectheader

„Mark  word“• HashCode• Flags

Class  pointer

Data

Page 36: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

double  =      8  byteDouble  =  24  byte

BigDecimal =      ?  byte

double  array0 4 8 12 16 20 24 28

„Mark  word“• HashCode• Flags

Class  pointer

Data  0 Data  1Arraylength

...

Page 37: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

double  =      8  byteDouble  =  24  byte

BigDecimal =      ?  byte

java.lang.Double

Page 38: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

double  =      8  byteDouble  =  24  byte

BigDecimal =      ?  byte

BigDecimal0 4 8 12 16 20 24 28 32 36 40

ref to BigInteger

ref to int[  ]

Σ 40  byte

Σ 40  byte

Σ >16  byte>96  byte

Page 39: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

double  =          8  byteDouble  =      24  byte

BigDecimal =  >96  byte

BigDecimal

Page 40: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Tool  Support  -­ JOL• OpenJDK tool – JOL  (Java  Object Layout)

• Insight  into memory layout

• Heap  dump analysis

• Exact memory usage

• Graphical layout visualization

• Maven  module

http://openjdk.java.net/projects/code-­tools/jol/

Page 41: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Tool  Support  -­ JOL

java -jar jol-cli.jar \internals java.math.BigDecimal

or

java –cp jol-cli.jar:my-own.jar \org.openjdk.jol.Main \internals foo.MyClass

Page 42: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Tool  Support  -­ JOL

java.math.BigDecimal object internals:OFFSET SIZE TYPE DESCRIPTION VALUE

0 12 (object header) N/A12 4 int BigDecimal.scale N/A16 8 long BigDecimal.intCompact N/A24 4 int BigDecimal.precision N/A28 4 BigInteger BigDecimal.intVal N/A32 4 String BigDecimal.stringCache N/A36 4 (loss due to the next object alignment)

Instance size: 40 bytes (estimated, the sample instance is not available)Space losses: 0 bytes internal + 4 bytes external = 4 bytes total

Page 43: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Data  Locality

56  +  520  =  576  bytes 64  Bytes

Page 44: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Memory  LayoutTransactionPlain[100]

TransactionCompact[100]

276  kB

Page 45: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

• Keep  data compact

• Think  about data types

• Keep  memory allocations low

• Keep  garbage collection rate  low

Page 46: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

And...

Which patternsshould Iuse?

Page 47: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Tree Model

Page 48: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Flattened Data  Model

Page 49: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Streaming  Data  Access

!𝑧𝑦𝑥

4

%𝑦𝑥

1%𝑥𝑥

3

2

Page 50: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Decoupled Algorithms

Page 51: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

• Prefer primitives  over classes

• Prefer arrays over object trees

• Process one array at  a  time

Page 52: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

What aboutclusterreplication?

Page 53: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

MVCC(Multi  Version  Concurrency Control)

V1

V2

V3

V4

View

1Vi

ew 1

+2Vi

ew 1

+2+3

View

1+2

+3+4

Page 54: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Compact  Data

V1

V2

V3

V4

View

1Vi

ew 1

+2Vi

ew 1

+2+3

View

1+2

+3+4

Page 55: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Off  heap RAMOn  disk

From Disk  to RAM

V1

V2

V3

V1 V2 V3

MappedByteBuffer

Page 56: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Data  Distribution

Apache  Kafka

Page 57: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Data  Distribution

Page 58: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Data  Distribution

Page 59: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Summary

Page 60: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

• Large  speedups through cache optimized

algorithms

• Memory  layout is crucial

• Scale by cache replication

@marcusgruendler

Page 61: Financial Portfolio Management with Java on Steroids - JAX Finance 2016

Thankyou!