Direct memory @ devoxxfr

Preview:

DESCRIPTION

Apache DirectMemory slides from DevoxxFr

Citation preview

1

Réduire la pression sur l'allocation mémoire

Le prochain pas dans l'optimisation des performances de la JVM

by Olivier Lamy et Benoit Perroud

2

Abstract•Cache Hors Tas (off-heap)

– Rappel sur la mémoire Java– Différences de Cache (on-heap vs. off-

heap)

•Apache Direct Memory– Principes et Architecture– Cas d'utilisation de la vie réelle– Prochaines étapes

•Questions

3

Speakers

•Olivier Lamy, Architecte@Talend, Apache Member & Direct Memory Committer

– @olamy

•Benoit Perroud, Software Engineer@Verisign & Apache Direct Memory Committer

– @killerwhile

4

Avant de commencer

•Désolés d'avance pour le fran-glais que nous allons parler

5

Apache Direct MemoryApache Direct Memory is a multi layered cache

implementation featuring off-heap memory storage to enable caching of java objects without degrading jvm performance.

Le but recherché par le projet est de décharger la JVM de la mémoire consommée par les objets mis en cache afin de réduire le temps d'exécution du GC.

6

Apache Direct Memory

• Projet dans l'incubateur de l'Apache Software Foundation

• Arrivé dans l'incubateur en automne 2011

• 12 développeurs, 10+ contributeurs

• En développement actif

– Sujet à changement et à bugs

7

La Mémoire Java

•Allocation automatique de la mémoire

8

La Mémoire Java (2)

•Ramasse-miette (GC)

– Le GC gèle complètement l'exécution du processus pour s'exécuter

– Rend l'exécution du programme non déterministe

9

Cache Mémoire

•Cache dans la mémoire Java (on-heap)

– Pas de pénalité d'utilisation

– Mais occupe de la mémoire Java la rendant indisponible au fonctionnement de l'application

TODO : Image avec RAM

10

Cache Mémoire (2)

•Cache hors de la mémoire Java (off-heap)

– Pénalité de sérialisation

• Protobuf, Avro, Thrift, MsgPack, ...

– Réduit la taille de la mémoire gérée par la JVM

11

Design et Architecture

• ByteBuffer.allocateDirect

• ByteBuffers sont alloués en masse, et découpés à la demande

• Développé en couche

– Pour une meilleure séparation des responsabilités

12

Stratégies d'Allocation• Fusion de ByteBuffers

– Pas de perte de mémoire, mais fragmentation

– A utiliser si ratio lecture / écriture haut

• Taille fixe des ByteBuffers

– Perte de mémoire, mais pas de fragmentation (*)

– A utiliser si objets de taille similaire

13

Cache Multi-Niveaux

• Idée : une très petite portion d'objets en cache en mémoire Java (on-heap), le reste hors de la mémoire Java (off-heap)

– Mmmh, ça ressemble à Terracotta BigMemory tout ça

– Apache Direct Memory peut être injecté dans Ehcache. Ouuups ;)

14

Server de Cache > PUT /dm/cache/bordeaux HTTP/1.1 > Content-Type:text/plain {"millesime":"bordeaux","description":"so good so good"} < HTTP/1.1 200 OK < X-DirectMemory-SerializeSize: 58 < Content-Length: 0

> GET /dm/cache/bordeaux HTTP/1.1 > Accept:text/plain < HTTP/1.1 200 OK < Content-Type: text/plain < Content-Length: 51 {"millesime":"2003","description":"so good so good"} > DELETE /dm/cache/foo HTTP/1.1

15

Prochaines étapes• JSR 107• Benchmarks• Intégrations dans des composants

(Cassandra, Lucene, Tomcat, ...)• Modification dynamique de la taille du

cache• Fonctionnalités de Monitoring et

Management• ...• https://issues.apache.org/jira/browse/DIRECTMEMORY

16

Questions ?

Merci pour votre attention !

Recommended