OCTO - 2013 - Devoxx - la mort du gc

43
21h - 22h - Salle E. Fitzgerald & L. Armstrong La mort du GC ?

Transcript of OCTO - 2013 - Devoxx - la mort du gc

Page 1: OCTO - 2013 - Devoxx - la mort du gc

21h - 22h - Salle E. Fitzgerald & L. Armstrong

La mort du GC ?

Page 2: OCTO - 2013 - Devoxx - la mort du gc

27 au 29 mars 2013

La mort prochaine du GC ?

Philippe PRADOSOCTO - Consultant

@pprados – www.prados.fr

Page 3: OCTO - 2013 - Devoxx - la mort du gc

Philippe PRADOS

Conférences

• Java User Group

• Paris Android User Group

• DevFest (vidéo)

• Solution Linux

• SSTIC

Plus de 100 articles dans

• Linux Mag

• Programmez

• 01

• MISC

• …

Deux livres @pprados

Philippe PRADOS

Page 4: OCTO - 2013 - Devoxx - la mort du gc

Petit rappel – Le GC c’est quoi ?

• Algorithme qui supprime les objets inutiles.• Nécessite une période d’arrêt-du-monde

Page 5: OCTO - 2013 - Devoxx - la mort du gc

Ma conviction

Le ramasse-miettes ne sera

plus LA solution

Page 6: OCTO - 2013 - Devoxx - la mort du gc

La mort prochaine du GC ?

IntuitionsPreuves et constatNouvelles stratégiesSolutions alternativesProspectives

Polémiquons !

Page 7: OCTO - 2013 - Devoxx - la mort du gc

27 au 29 mars 2013

Intuitions

Page 8: OCTO - 2013 - Devoxx - la mort du gc

G1 nécessaire

Le nouvel algo de GC (G1) est nécessaire…

…mais limité

voir jHiccup de Azul

Page 9: OCTO - 2013 - Devoxx - la mort du gc

64 bits moins rapide

•15% moins rapide que les 32 bits

•Un artifice : le mode pseudo-64 bits

voir jHiccup de Azul

Page 10: OCTO - 2013 - Devoxx - la mort du gc

Mémoire hors heap – déjà ?

-XX:MaxDirectMemorySize=2G

?!

Page 11: OCTO - 2013 - Devoxx - la mort du gc

Les DB in memory utilisent hors heap

> 8 Go problématique

http://goo.gl/zsrXC

Page 12: OCTO - 2013 - Devoxx - la mort du gc

Loi de Moore aux limites

Fin en 2018 ?

http://goo.gl/MHYn8

Page 13: OCTO - 2013 - Devoxx - la mort du gc

@deprecated GC Objective-C

Automatic Counting Reference

Page 14: OCTO - 2013 - Devoxx - la mort du gc

Est-ce un problème ?

Page 15: OCTO - 2013 - Devoxx - la mort du gc

27 au 29 mars 2013

Preuves et constat

Page 16: OCTO - 2013 - Devoxx - la mort du gc

Puissance / Volume s’inverse bientôt

Puissance processeur

Volume à traiter

2015 ? 2020 ?

Page 17: OCTO - 2013 - Devoxx - la mort du gc

Il faut dépasser les limites

•Limites I/O

•Augmentation de mémoire

Page 18: OCTO - 2013 - Devoxx - la mort du gc

Avant 1981: 16 bits d’adresse

•2 octets par adresse

•Processeurs 8 bits

•Processeurs lents• Impossible d’utiliser un GC

•Mémoire à la main

8 bits 8 bits

16 bits

65.536 cases mémoire tout compris

Page 19: OCTO - 2013 - Devoxx - la mort du gc

Avant 1986 : 24 bits d’adresse

•2 x 16 bits = 4 octets par adresse

•Processeurs 16 bits

•Processeurs lents• Impossible d’utiliser un GC

•Mémoire à la main

24 bits

16 Mo

Page 20: OCTO - 2013 - Devoxx - la mort du gc

Avant 2001 : 32 bits d’adresse – Cool

•4 octets

•Processeurs très rapides•Super ! On peut utiliser un

GC

•La mémoire est gérée automatiquement

32 bits

4 Go théorique

Page 21: OCTO - 2013 - Devoxx - la mort du gc

Maintenant: 64 bits d’adresse

•Maintenant, nous avons un problème•8 octets

•Processeurs aux limites 64 bits

Pour le moment, la mémoire de base permet de tenir

256 tébioctets - 240

Page 22: OCTO - 2013 - Devoxx - la mort du gc

Coût des mémoires en baisse

• All in memory possible

• Évite l’ajout d’un nœud

Historical cost of computer memory and storage

1980 : 5000$/MB

2010 : 100$/MB

Page 23: OCTO - 2013 - Devoxx - la mort du gc

Hors-Heap sans GCHeap avec GC

Problèmes avec « All in memory » et GC

Objectif:

• Un accès direct aux objets persistants

• Algorithmes non orientés « secteur »

En réalité:

• Objets hors-heap

• Accès via sérialisation/désérialisation

• Accès orientés « zone mémoire »

Page 24: OCTO - 2013 - Devoxx - la mort du gc

All-in-memory contre DB sur SSD ?

•Mort des disques magnétiques dans 5 ans

•Swapfile sur SSD

•Indexations orienté objet en mémoire.

•files systèmes avec allocateur « mémoire »

Page 25: OCTO - 2013 - Devoxx - la mort du gc

Chiffre 2008 : avec 3,5 Terabyte,l’arrêt-du-monde dure 30 secondes

Page 26: OCTO - 2013 - Devoxx - la mort du gc

Absurdité économique ?

•Un cœur pour le GC = un étage sur quatre !

Économie en développement

•pas toujours compensée

Page 27: OCTO - 2013 - Devoxx - la mort du gc

Comment retarder l’échéance ?

Page 28: OCTO - 2013 - Devoxx - la mort du gc

Nouvelle stratégies?

Page 29: OCTO - 2013 - Devoxx - la mort du gc

Le GC victime de malédiction

Plus on augmente la mémoire,plus on dégrade les performances

Page 30: OCTO - 2013 - Devoxx - la mort du gc

Segmenter, segmenter, segmenter la mémoire

Réduire le volume traité par le GC

Page 31: OCTO - 2013 - Devoxx - la mort du gc

Application interactives : moins de mémoire

•Plusieurs JVM par nœud

•Plusieurs VM par nœud

•Abandon des threads•« share nothing »

•GC par thread dans la JVM ?

•Agents •GC par Classloader ?

Page 32: OCTO - 2013 - Devoxx - la mort du gc

Application « memory based » : hors heap

•Utiliser du hors-heap

•Langage sans ramasse-miettes (C/C++, Objectif-C, etc.)

Page 33: OCTO - 2013 - Devoxx - la mort du gc

Plus radical : faute de page

•GC sans arrêt du monde (Azul)

•Patch/module kernel (que sur *nix !)

•Pendant le GC:• Pages invalide

• Capture des faute de pages

• Patch l’adresse dans l’appelant et relance

• Page déclarée valide

Page 34: OCTO - 2013 - Devoxx - la mort du gc

27 au 29 mars 2013

Solutions alternatives

Page 35: OCTO - 2013 - Devoxx - la mort du gc

Un pointeur est :•Une relation ou une agrégation

vers un objet immuable

•Une agrégation simple

•Une agrégation partagée

•Une relation

• Forte ?

• Faible ?

Augmenter la sémantique pour les pointeurs

1

Immuable

Agrégation simple

1

Immuable

1

Immuable

Page 36: OCTO - 2013 - Devoxx - la mort du gc

Et les autres langages ?

•C++11 : shared_ptr, weak_ptr, unique_ptr et les rvalue_references.

•« Automatic Counteur Reference » (Objective-C).

•Acteur (ER-Lang, Go, Scala)

• Isolation totale (Javascript ou Dart)

•Programmation fonctionnelle (Hashkell, Closure, Scala, etc.)

Page 37: OCTO - 2013 - Devoxx - la mort du gc

27 au 29 mars 2013

Prospectives

Page 38: OCTO - 2013 - Devoxx - la mort du gc

Où allons nous ?

Puissances DEFINITIVEMENT à saturation :

• ++Volume avec puissance égale

Big-memory :

• Sémantique forete des pointeurs

• Libération déterministe.

Multiplication des CPU :

• Agents distribués.

• Objets immuables.

Réseau :

• Peer-to-peer

Page 39: OCTO - 2013 - Devoxx - la mort du gc

Où allons nous ?

La mémoire de masse•Sera statique

•Avec de gros volumes

Montage de la mémoire statique en RAM•Plusieurs téra-octets en ligne et persistant !

Page 40: OCTO - 2013 - Devoxx - la mort du gc

Et pour nos JVM ?

•Java 9 ou 10 saura découper la mémoire en tranche pour aider le GC ?

•Hors-heap sera la seule disponible ?

•@deprecated GC comme pour Objectif-C ?

•OS pour GC ?

•Changer de langage?

•Langages fonctionnels et à agents ?

Page 41: OCTO - 2013 - Devoxx - la mort du gc

Qu’en penser ?

Deux solutions :

•« Il est fort probable que cela arrivera »

•« Ce type est fou, il n’y a pas problème »

Rendez-vous dans 5 ans (ou avant)

Page 42: OCTO - 2013 - Devoxx - la mort du gc

Rappel des signaux faibles

• Intel prédit la fin de l’augmentation de puissance des processeurs pour 2018

• JVM 64 bits plus lent

•G1 est NECESSAIRE

• -XX:MaxDirectMemorySize=2G

•> 8 Go => Dégradation

•@deprecated GC Objective-C !

Page 43: OCTO - 2013 - Devoxx - la mort du gc

Polémiquez !!!