java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 ›...

87
Java на Эльбрусе Артемьев Роман Новосибирский центр информационных технологий «УНИПРО» JPointStudent day, 24 апреля 2016

Upload: others

Post on 27-Jun-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

JavaнаЭльбрусе

АртемьевРоман

Новосибирскийцентринформационныхтехнологий«УНИПРО»

JPointStudentday,24апреля2016

Page 2: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

ЭЛЬБРУС*/&?+=?!!!

2

Page 3: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Эльбрус?

3

Page 4: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

ЗачемЭльбрус?

• Импортозамещение• Безопасность

4

Page 5: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

ЗачемJavaнаЭльбрусе?

• Java– промышленныйстандарт• ПоддержкаJVM-basedязыков• ШагнапутикподдержкеJavaScript,C#

5

Page 6: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Очемдоклад?

• ПроЭльбрусJ• Происториюпортирования OpenJDK наЭльбрус• Прокомпиляторы• ПроJava-runtime• ПропроблемывработеJavaприложенийнаЭльбрусе• ПроспособыувеличенияскоростиJavaнаЭльбруса

6

Page 7: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Ктомытакие?

• Унипро:• УчаствоваливразработкеплатформыJavaс1996 г.• РазработчикJavaCompatibilityKit• «Реинкарнатор»ApacheHarmony

7

Page 8: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Отличия архитектурЭльбрус x86-64

8

Page 9: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Отличия архитектурЭльбрус• VLIW• Многорегистров(192+32)• Явнаяспекулятивность

x86-64• Суперскалярный• Малорегистров(16+16+8)• Неявнаяспекулятивность

9

Page 10: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Спекулятивность

10

Page 11: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Отличия архитектурЭльбрус• VLIW• Многорегистров(192+32)• Явнаяспекулятивность• Условноеисполнение

x86-64• Суперскалярный• Малорегистров(16+16+8)• Неявнаяспекулятивность• cmov

11

Page 12: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Условноеисполнение

12

Page 13: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Отличия архитектурЭльбрус• VLIW• Многорегистров(192+32)• Явнаяспекулятивность• Условноеисполнение• 3аппаратныхстека(2защищены)

x86-64• Суперскалярный• Малорегистров(16+16+8)• Неявнаяспекулятивность• cmov• 1аппаратныйвседоступныйстек

13

Page 14: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Отличия архитектурСтекиЭльбруса

UserStack

localvar 3

localvar 2

localvar 1

parameter1

parameter2

Parameter3

Стекx86-64

Reg Stack

saved%r0

saved%r1

saved%r2

saved%r191

saved%r192

ChainStack

returnaddr 1

returnaddr 2

returnaddr 3

returnaddr 4

returnaddr 5

returnaddr 6

14

Page 15: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Отличия архитектурЭльбрус• VLIW• Многорегистров(192+32)• Явнаяспекулятивность• Условноеисполнение• 3аппаратныхстека• Нетпредсказателяпереходов

x86-64• Суперскалярный• Малорегистров(16+16+8)• Неявнаяспекулятивность• cmov• 1аппаратныйстек• Динамическийпредсказательпереходов

15

Page 16: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Свитчи– Зло

16

Page 17: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

17

Page 18: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

18

Page 19: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

19

Page 20: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

nop 3setwd wsz = 0x4return %ctpr3ldw,0 %dr0, 0x0, %r0ldw,2 %dr0, 0x4, %r1ldw,3 %dr1, 0x0, %r2ldw,5 %dr1, 0x4, %r3

nop 2fsubs,0 %r0, %r2, %r0fsubs,3 %r1, %r3, %r1

nop 4fmuls,0 %r0, %r0, %r0fmuls,3 %r1, %r1, %r1

nop 3fadds,0 %r0, %r1, %r0

nop 3fsqrts,0 %r0, %r0ct %ctpr3

20

Page 21: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

nop 3setwd wsz = 0x4return %ctpr3ldw,0 %dr0, 0x0, %r0ldw,2 %dr0, 0x4, %r1ldw,3 %dr1, 0x0, %r2ldw,5 %dr1, 0x4, %r3

nop 2fsubs,0 %r0, %r2, %r0fsubs,3 %r1, %r3, %r1

nop 4fmuls,0 %r0, %r0, %r0fmuls,3 %r1, %r1, %r1

nop 3fadds,0 %r0, %r1, %r0

nop 3fsqrts,0 %r0, %r0ct %ctpr3

21

Page 22: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

nop 3setwd wsz = 0x4return %ctpr3ldw,0 %dr0, 0x0, %r0ldw,2 %dr0, 0x4, %r1ldw,3 %dr1, 0x0, %r2ldw,5 %dr1, 0x4, %r3

nop 2fsubs,0 %r0, %r2, %r0fsubs,3 %r1, %r3, %r1

nop 4fmuls,0 %r0, %r0, %r0fmuls,3 %r1, %r1, %r1

nop 3fadds,0 %r0, %r1, %r0

nop 3fsqrts,0 %r0, %r0ct %ctpr3 ? predX

22

Page 23: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

nop 3setwd wsz = 0x4return %ctpr3ldw,0 %dr0, 0x0, %r0ldw,2 %dr0, 0x4, %r1ldw,3 %dr1, 0x0, %r2ldw,5 %dr1, 0x4, %r3

nop 2fsubs,0 %r0, %r2, %r0fsubs,3 %r1, %r3, %r1

nop 4fmuls,0 %r0, %r0, %r0fmuls,3 %r1, %r1, %r1

nop 3fadds,0 %r0, %r1, %r0

nop 3fsqrts,0 %r0, %r0ct %ctpr3

23

Page 24: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

nop 3setwd wsz = 0x4return %ctpr3ldw,0 %dr0, 0x0, %r0ldw,2 %dr0, 0x4, %r1ldw,3 %dr1, 0x0, %r2ldw,5 %dr1, 0x4, %r3

; a->x; a->y; b->x; b->y

nop 2fsubs,0 %r0, %r2, %r0fsubs,3 %r1, %r3, %r1

nop 4fmuls,0 %r0, %r0, %r0fmuls,3 %r1, %r1, %r1

nop 3fadds,0 %r0, %r1, %r0

nop 3fsqrts,0 %r0, %r0ct %ctpr3

24

Page 25: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

nop 3setwd wsz = 0x4return %ctpr3ldw,0 %dr0, 0x0, %r0ldw,2 %dr0, 0x4, %r1ldw,3 %dr1, 0x0, %r2ldw,5 %dr1, 0x4, %r3

nop 2fsubs,0 %r0, %r2, %r0fsubs,3 %r1, %r3, %r1

; (a.x - b.x); (a.y - b.y)

nop 4fmuls,0 %r0, %r0, %r0fmuls,3 %r1, %r1, %r1

; (.x) * (.x); (.y) * (.y)

nop 3fadds,0 %r0, %r1, %r0 ; (x*x) + (y*y)

nop 3fsqrts,0 %r0, %r0ct %ctpr3

; sqrt(..)

25

Page 26: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

history|grepelbrus

1. OpenJDK+Zero+LLVM2. VLIW-кодогенератор3. Client-JITдляЭльбруса4. Server-JITдляЭльбруса5. Шаблонныйинтерпретатор

26

Page 27: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Version1.0• LLVMBackendдляЭльбруса• JIT-компиляторShark• Tailcall оптимизацияCPP-интерпретатора• НаЭльбрусепоявиласьJava!

27

Page 28: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Первыйблинкомом…• Много,оченьмноговетвлений• Неэффективнаясборкамусора• Явныепроверки• НетHigh-levelоптимизаций• НетLow-levelоптимизаций• Ит.д.

28

Page 29: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Состояниедел• Дорогиепереходы• НетLow-levelоптимизаций• Низкаяскоростькомпиляции• Неэффективнаясборкамусора• ЯвныеRuntimeпроверки• НетHigh-levelоптимизаций• Медленныйинтерпретатор

29

Page 30: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Многорегистров Быстрыйаллокатор

VLIW Мощныйпланировщик

Ветвления If-conversion

Чтожеделать?

30

Page 31: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Кодогенератор

• Планировщик– “superblock”• Спекулятивность• Распределительуправляющихрегистров

• Регистры– раскраскаграфа• If-conversion– поканетL

31

Page 32: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Состояниедел• Дешевыепереходы• Low-levelоптимизации• Низкаяскоростькомпиляции• Неэффективнаясборкамусора• ЯвныеRuntimeпроверки• НетHigh-levelоптимизаций• Медленныйинтерпретатор

32

Page 33: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Client-компилятор

Байткод IR Implicitexceptions

If-conversion

SchedulerRegisterAllocator

«Быстрый»метод

33

Page 34: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Client-компилятор

Байткод IR Implicitexceptions

If-conversion

SchedulerRegisterAllocator

«Быстрый»метод Scheduler+RegisterAllocator

34

Page 35: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Состояниедел• Дешевыепереходы• Low-levelоптимизации• Высокаяскоростькомпиляции(x10)• Неэффективнаясборкамусора• ЯвныеRuntimeпроверки• НетHigh-levelоптимизаций• Медленныйинтерпретатор

35

Page 36: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

GarbageCollection

36

Page 37: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

GC:Эльбрус

%r0

%r1

%r54

%r55

37

Page 38: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

GC:Эльбрус

%r0

%r1

%r54

%r55

saved%r0

saved%r1

saved %r55

Frame info

Javastack

38

Page 39: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

GC:Эльбрус

%r0

%r1

%r54

%r55

saved%r0

saved%r1

saved %r55

Frame info

saved%r0saved%r1

…saved %r55

Javastack

Reg stack

Hardware

39

Page 40: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

GC:Эльбрус

%r0

%r1

%r54

%r55

saved%r0

saved%r1

saved %r55

Frame info

saved%r0saved%r1

…saved %r55

Javastack

Reg stack

Hardware

collct %r0

collct %r1

collct %r55

Frame info

saved%r0saved%r1

…saved %r55

Reg stack

Javastack

DoGC

40

Page 41: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

GC:Эльбрус

%r0

%r1

%r54

%r55

saved%r0

saved%r1

saved %r55

Frame info

saved%r0saved%r1

…saved %r55

Javastack

Reg stack

Hardware

collct %r0

collct %r1

collct %r55

Frame info

saved%r0saved%r1

…saved %r55

Reg stack

Javastack

DoGC%r0

%r1

%r54

%r55

Hardware

41

Page 42: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

GC:Эльбрус

%r0

%r1

%r54

%r55

saved%r0

saved%r1

saved %r55

Frame info

saved%r0saved%r1

…saved %r55

Javastack

Reg stack

Hardware

collct %r0

collct %r1

collct %r55

Frame info

saved%r0saved%r1

…saved %r55

Reg stack

Javastack

DoGC%r0

%r1

%r54

%r55

Hardware

42

Page 43: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

GC:Эльбрус

%r0

%r1

%r54

%r55

saved%r0

saved%r1

saved %r55

Frame info

saved%r0saved%r1

…saved %r55

Javastack

Reg stack

Hardware

collct %r0

collct %r1

collct %r55

Frame info

collct %r0collct %r1

…collct %r55

Reg stack

Javastack

DoGC%r0

%r1

%r54

%r55

HardwareDoGC

43

Page 44: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Состояниедел• Дешевыепереходы• Low-levelоптимизации• Высокаяскоростькомпиляции• Сборкамусорачерезстекрегистров(x2)• ЯвныеRuntimeпроверки• НетHigh-levelоптимизаций• Медленныйинтерпретатор

44

Page 45: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Runtime проверки

Идея– явноесделатьнеявным

45

Page 46: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Runtime проверки

• NPE– ловимSIGSEGVилиSIGILL

46

Page 47: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

NullPointerException

load,sm [ptr1+0x10], dst «тяжелая» инструкция

47

Page 48: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

NullPointerException

load,sm [ptr1+0x10], dst «тяжелая» инструкция

…… Что-тосчитаем

48

Page 49: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

NullPointerException

load,sm [ptr1+0x10], dst «тяжелая» инструкция

…… Что-тосчитаем

add dst,rX,rY «легкая»инструкцияSIGILL->NPE

49

Page 50: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

NullPointerException

load,sm [ptr1+0x10], dst «тяжелая» инструкция

…… Что-тосчитаем

add dst,rX,rY «легкая»инструкцияSIGILL->NPE

storerY,[ptr2+0x20] SIGSEGV->NPE

50

Page 51: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Runtime проверки

• NPE– ловимSIGSEGVилиSIGILL• Div0– ловимSIGILL• StackOverflow– guardpage,SIGSEGV

51

Page 52: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

StackOverflow

GuardPage

Emptyspace

frame0frame1

…frameN

Frameptr*

SOptr*

52

Page 53: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Runtime проверки

• NPE– ловимSIGSEGV• Div0– ловимSIGILL• StackOverflow– guardpage,SIGSEGV• BoundsCheck– спомощьюусловныхинструкцийпровоцируемSIGSEGVпривыходезаграницу

53

Page 54: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

BoundsCheck

loadarr_ptr,arr_length ; SIGSEGV ->NPE

54

Page 55: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

BoundsCheck

loadarr_ptr,arr_length ; SIGSEGV ->NPEcmpU,index,arr_length,pred

55

Page 56: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

BoundsCheck

loadarr_ptr,arr_length ; SIGSEGV ->NPEcmpU,index,arr_length,predmov 0,arr_ptr ?~predmov 0,index ?~pred

56

Page 57: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

BoundsCheck

loadarr_ptr,arr_length ; SIGSEGV ->NPEcmpU,index,arr_length,predmov 0,arr_ptr ?~predmov 0,index ?~predload[arr_ptr +index],val ; SIGSEGV->OOB

57

Page 58: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Runtime проверки

• NPE– ловимSIGSEGV• Div0– ловимSIGILL• StackOverflow– guardpage,SIGSEGV• BoundsCheck– спомощьюусловныхинструкцийпровоцируемSIGSEGVпривыходезаграницу

58

Page 59: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Состояниедел• Дешевыепереходы• Low-levelоптимизаций• Высокаяскоростькомпиляции• Сборкамусорачерезстекрегистров• НеявныеRuntimeпроверки(+15%)• НетHigh-levelоптимизаций• Медленныйинтерпретатор

59

Page 60: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Opto

x86-64

Bytecode IdealIR

OptimizedIdealIRMachIR

OptimizedMachIR ASM

60

Page 61: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Opto

Эльбрус

Bytecode IdealIR

OptimizedIdealIRVLIWIR

ASM

x86-64

Bytecode IdealIR

OptimizedIdealIRMachIR

OptimizedMachIR ASM

61

Page 62: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Состояниедел• Дешевыепереходы• Low-levelоптимизаций• Высокаяскоростькомпиляции• Сборкамусорачерезстекрегистров• НеявныеRuntimeпроверки• High-levelоптимизаций• Медленныйинтерпретатор

62

Page 63: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Шаблонныйинтерпретатор• Влияетнаскоростьстартаприложений• Наx86быстрееобычногов10раз• РеализациядляЭльбрусаведется

63

Page 64: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Состояниедел• Дешевыепереходы• Low-levelоптимизаций• Высокаяскоростькомпиляции• Сборкамусорачерезстекрегистров• НеявныеRuntimeпроверки• High-levelоптимизаций• Быстрыйинтерпретатор

64

Page 65: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Сравнениережимовкомпиляции

Shark Client Server УскорениеServer/Shark

SpecJBB2005, числоопераций, больше–>лучше

SpecJBB2005 2172 6261 18378 8.5

SpecJVM98, времявсекундах,меньше–>лучше

compress 76.08 28.56 15.57 4.9jess 35.26 12.62 5.43 6.5db 60.78 32.12 19.35 3.14javac 41.78 18.16 9.74 4.3mpegaudio 70.58 36.39 10.37 6.8mtrt 32.06 12.15 1.64 19.5jack 25.33 15.99 9.92 2.5

65

Page 66: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Сравнениережимовкомпиляции

Shark Client Server УскорениеServer/Shark

SpecJBB2005, числоопераций, больше–>лучше

SpecJBB2005 2172 6261 18378 8.5

SpecJVM98, времявсекундах,меньше–>лучше

compress 76.08 28.56 15.57 4.9jess 35.26 12.62 5.43 6.5db 60.78 32.12 19.35 3.14javac 41.78 18.16 9.74 4.3mpegaudio 70.58 36.39 10.37 6.8mtrt 32.06 12.15 1.64 19.5jack 25.33 15.99 9.92 2.5

66

Page 67: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Сравнениережимовкомпиляции

Shark Client Server УскорениеServer/Shark

SpecJVM2008, числоопераций, больше–>лучшеcompiler 4.3 13.8 25.8 6.0compress 2.7 11.1 20.8 7.7crypto 3.1 6.0 20.3 6.5derby 4.9 17.2 36.9 7.5mpegaudio 2.3 4.1 12.4 5.4scimark.large 1.2 1.8 3.8 3.2scimark.small 4.0 6.8 16.5 4.1serial 1.5 5.3 12.5 8.3startup 0.7 1.4 2.3 3.3sunflow 0.9 4.0 8.2 9.1xml 5.2 14.1 34.2 6.6Общий счет 2.3 6.0 13.4 5.8

67

Page 68: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Тестовыйстенд

Эльбрус

• Elbrus4C• 800MHz• 4cores• 65нм• 8 MbL2Cache

x86-64

• Intel Core2Quad Q9300• 2.50GHz• 4cores• 45нм• 6 MbL2 Cache

68

Page 69: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Сравнениесx86-64

x86-64 Elbrus Отношениеx86-64/Elbrus

SpecJBB2005, числоопераций, больше–>лучше

SpecJBB2005 65682 18378 3.6

SpecJVM98, времявсекундах,меньше–>лучше

compress 2.38 15.57 6.5

jess 0.54 5.43 10.0

db 5.05 19.35 3.8

javac 1.63 9.74 6.0

mpegaudio 1.32 10.37 7.8

mtrt 0.3 1.64 5.5

jack 0.83 9.92 11.9

69

Page 70: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Сравнениес x86-64

Intel Elbrus Отношение x86-64/Elbrus

SpecJVM2008, числоопераций, больше–>лучшеcompiler 241.65 25.8 9.4compress 147.42 20.8 7.1crypto 152 20.3 7.6derby 209.91 36.9 5.7mpegaudio 86.05 12.4 6.9scimark.large 17.45 3.8 4.6scimark.small 164.54 16.5 10.0serial 88.65 12.5 7.1startup 22.49 2.3 9.8sunflow 49.49 8.2 6.0xml 308.56 34.2 9.0Общий счет 98.59 13.4 7.3

70

Page 71: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Чтодальше?

• Java• If-conversion• Векторизация• CompressedOops• TemplateInterpreter• ConcurrentGC

• JavaScript(V8)• C#

71

Page 72: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Summary

• ЧтотакоеЭльбрус• ЧтозаJavaнаЭльбрусе• Какненадописать наJava подЭльбрус• КакустроенJIT-компилятор• Какпортировать Javaна«экзотику»• «Реальную»скоростьЭльбруса• ПерспективыЭльбруса

72

Page 73: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

73

Page 74: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

JavaнаЭльбрус

АртемьевРоман[email protected]

Новосибирскийцентринформационныхтехнологий«УНИПРО»

JPointStudentday,24апреля2016

Page 75: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

ВерсияJava

75

Page 76: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Деоптимизация

MethodA

MethodB*

MethodC

MethodD

B’sDeopt stub

C’sReexecutestub

OriginalRet

76

Page 77: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

GC:Эльбрус

%r0

%r1

%r54

%r55

saved%r0saved%r1

…saved %r55

Reg stack

collct %r0collct %r1

…collct %r55

Reg stack

OS->DoGC

%r0

%r1

%r54

%r55

77

Page 78: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

GC:x86-64savedRAX

savedRCX

savedRDX

savedEBP

returnpc

colllctd RAX

colllctd RCX

colllctd RDX

colllctd EBP

returnpc

rax

rcx

rdx

rbx

rsp

rbp

rsi

rdi

r8

r15

save

rax

rcx

rdx

rbx

rsp

rbp

rsi

rdi

r8

r15

loadDoGC

Java+ABIstack Java+ABIstackRegisters

78

Page 79: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Планированиеинструкций

• До6арифметическихинструкцийвширокойкоманде• Javaимееткороткиебазовыеблоки• Списочноепланированиедает1.3инструкции наширокуюкоманду

+30%производительности

79

Page 80: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Межблоковоепланированиеинструкций

A

B

C

D

E

F

G

Суперблок

Exception

Блоксоднимпредком Exceptionhandler

80

Page 81: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Межблоковоепланированиеинструкций

• Суперблокидаютеще15% производительности• Среднееколичествоинструкцийвширокойкоманде2.2,по-прежнемузначительноменьше6

A

B

C

D

E

F

G

Implicitexception

Блоксоднимпредком Exceptionhandler

81

Page 82: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Распределениерегистров

• Регистрызначения:192черезрегистровоеокно,32глобальных• Предикаты:32,можносоздатьдо65потоковуправления• Управляющиерегистры:3,служатдляпередачиуправления

82

Page 83: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

ControlTransitionPreparationRegister

returnreturn %ctpr3

ct %ctpr3 ? predY

branchprep br %ctprX

ct %ctprX ? predY

callprep call %ctprX

call %ctprX ? predY

2-8

2-4

5-9

83

Page 84: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Распределениерегистров

• Linear scan register allocator дляуправляющихрегистроввовремяпланирования,+10%производительности• Вбудущемпланируемобъединитьраспределениерегистровипланированиеинструкцийдлявсехтипов

84

Page 85: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Пробросисключений

PCM0

PC M1

XPC

PC3

Chainstack

PCM0

PCM1

HPC

PC3

ОС

Chainstack

85

Page 86: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Исключения– Медленно

86

Page 87: Java на Эльбрусеpublic.jugru.org › jpointsd › 2016 › msk › day_1 › track_3 › ... · JPointStudent day, 24 апреля 2016 ЭЛЬБРУС*/&?+=?!!! 2. Эльбрус?

Исключения– Медленно(пока…)

87