SlideShare une entreprise Scribd logo
1  sur  32
Le framework LMAX / Disruptor
       par Cédric FINANCE et François OSTYN
     cedric.finance@soat.fr / francois.ostyn@soat.fr


                       26 janvier 2012
Qui sommes nous ?
Introduction :
LMAX :
Société spécialisée dans le passage d’ordres de bourse.
Affichage temps réel des cotations, volume de transactions élevé,
respect de l’ordonnancement des ordres et temps d’exécution
réduit.
Disruptor (replicator) :
arme ayant été utilisée pour détruire les réplicateurs dans Stargate SG1
Disruptor :
Framework de programmation concurrente. Résultat des
recherches de la société LMAX.
Le cloud, j’le casse
- On se base sur le principe de l’IoA (Inversion of Architecture).

- Pourquoi ne pas utiliser le maximum de puissance CPU et la
mémoire de nos machines ?

- Toutes ces architectures par strates sont compliquées non ?
La soirée 3T va devenir
UT (Ultimate Technical):
Mais pourquoi la gestion de la
concurrence en Java est si
compliquée ?


          Attention, ces 384 pages sont dangereuses !!!
L’ordre :
// ordre de programmation        // ordre d’exécution (non certain)
  int w = 10;                      int y = 30;
  int x = 20;                      int x = 20;
  int y = 30;                      int b = x * y;
  int z = 40;
                                  int z = 40;
 int a = w + z;                   int w = 10;
 int b = x * y;                   int a = w + z;

De nombreux facteurs peuvent influer : le matériel, les
paramètres de la JVM, le type de GC,... merci je JIT
Avant de continuer quelques chiffres :


L1 cache reference                             0.5 ns
Branch mispredict                              5 ns
L2 cache reference                             7 ns
Mutex lock/unlock                             25 ns
Main memory reference                        100 ns
Compress 1K bytes with Zippy               3,000 ns
Send 2K bytes over 1 Gbps network         20,000 ns
Read 1 MB sequentially from memory       250,000 ns
Round trip within same datacenter        500,000 ns
Disk seek                             10,000,000 ns
Read 1 MB sequentially from disk      20,000,000 ns
Send packet CA->Netherlands->CA      150,000,000 ns
Il faut faire attention aux détails :

Incrémenter un compteur :                    Utiliser un lock :
                                             public static long foo = 0;
static long foo = 0;
                                             public static Lock lock = new Lock();
private static void increment() {
                                             private static void increment() {
  for (long l = 0; l < 500000000L; l++) {
                                                 for (long l = 0; l < 500000000L; l++) {
        foo ++;
                                                   lock.lock();
}
                                                   try {
                                                       foo++;
                                                   } finally {
Utiliser un AtomicLong :                             lock.unlock();
                                             }}}
static AtomicLong foo = new AtomicLong(0);
private static void increment() {
    for (long l = 0; l < 500000000L; l++)
   {foo.getAndIncrement();}
}
Le coût des contentions

Incrémenter un compteur 500 millions de fois...

● One Thread! :! 300 ms

● One Thread (volatile):! 4 700 ms (15x)

● One Thread (Atomic) : 5 700 ms (19x)

● One Thread (Lock)!: 10 000 ms (33x)

● Two Threads (Atomic) : 30 000 ms (100x)

● Two Threads (Lock)!: 224 000 ms (746x)
Soit pas loin de 4 minutes
Découper des chaînes de caractères


● Parallel   (Scala): 440 ops/sec

●   Serial! (Java) : 1768 ops/sec
La parallélisation des traitements n’est pas toujours une bonne solution
Et quid des processeurs ?

Comparaison du temps de découpage des chaines de caractères
en mono-thread sur différents processeurs.




       Les performances peuvent aller du simple au double...
Mais que peut nous apporter le
                  Disruptor
... A part nous sauver des réplicateurs... (Private JOKE)
Ne pas devoir recourir à une architecture multi-thread

Donc, une mise en place plus aisée

De la simplicité pour les tests

Un coût de machines moins élevé

Se remettre en question sur le fonctionnement de Java...
Les problématiques rencontrées par la société LMAX

 - False sharing

 - Memory barrier

 - Context switch

 - CAS (compare and swap)

 - Cache line
le False sharing

 public void run()
 {
     long i = ITERATIONS + 1;
     while (0 != --i)
     {
         longs[arrayIndex].value = i;
     }
 }


 public final static class VolatileLong
 {
     public volatile long value = 0L;
     public long p1, p2, p3, p4, p5, p6; // comment out
 }
le False sharing
le False sharing




Pourquoi ce tel changement de performances?
le False sharing
le False sharing




                   Header data1   data2   p1    p2      p3   p4   p5


                                           Cache Line
Les conclusions que l’on peut tirer...

Les queues (java) sont coûteuses (temps de traitement et lock des ressources)

Le multi-threading est coûteux (contentions sur les ressources communes) et difficile a mettre en œuvre.

Le multi-threading n’est pas le plus efficace en terme de performances.




  Attention, ce cas d’utilisation ne peut pas convenir à tout le monde...
Ce qu’a fait LMAX :

Ecriture d’un framework permettant de partager rapidement les données entre thread sans toutefois
recourir aux mécanismes classiques des locks. C’est ce que nous nommerons Disruptor.
Le pattern Disruptor :




  Les producteurs, le Ring Buffer et les consommateurs sont chacun dans des threads différents.
  Les acteurs : Producteur, Consommateur
  Les objets : RingBuffer, Barrier
  Les stratégies : Wait, Claim

Objectif : ne plus avoir de contentions...
Alors qu’avec une architecture classique nous avions :




      Mais où se trouve ma contention...
Ce que peut apporter le disruptor ?




     C’est mieux mais toujours pas parfait....
Mais est-ce vraiment rapide ?




Conclusion : jusqu’à 5 fois plus rapide... et combien de fois moins cher (maintenance,
matériel,...) et plus constant...
...DEMO...
Comment aider le GIE portabilité ? (pour toi Xavier...)
Conclusion
- Ne jamais croire ce que l’on nous dit, il faut tester, expérimenter, la pratique est
souvent très loin de la théorie

- La concurrence est un outil à manier avec précautions,...

- Pour avoir des performances, chaque détail compte, mais comme le dit Donald
Knuth, «premature optimization is the root of Evil»
Liens :
•http://www.infoq.com/articles/memory_barriers_jvm_concurrency
•http://www.cs.virginia.edu/kim/publicity/pldi09tutorials/memory-efficient-java-tutorial.pdf
•http://www.slideshare.net/trishagee/understanding-the-disruptor
•http://code.google.com/p/disruptor/
•http://disruptor.googlecode.com/files/Disruptor-1.0.pdf
•http://mechanical-sympathy.blogspot.com/2011/07/false-sharing.html
•http://mechanical-sympathy.blogspot.com/2011/07/memory-barriersfences.html
•http://martinfowler.com/articles/lmax.html

Contenu connexe

Tendances

Java - implémentation des concepts objets
Java - implémentation des concepts objetsJava - implémentation des concepts objets
Java - implémentation des concepts objetsJean David Olekhnovitch
 
Java - notions de bases pour développeur
Java - notions de bases pour développeurJava - notions de bases pour développeur
Java - notions de bases pour développeurJean David Olekhnovitch
 
Introduction à MacRuby - OSDC.fr 2009
Introduction à MacRuby - OSDC.fr 2009Introduction à MacRuby - OSDC.fr 2009
Introduction à MacRuby - OSDC.fr 2009guest60b8020b
 
Premiers pas dans les extensions PHP
Premiers pas dans les extensions PHPPremiers pas dans les extensions PHP
Premiers pas dans les extensions PHPPierrick Charron
 
Concepts de base O.O (1)
Concepts de base O.O (1)Concepts de base O.O (1)
Concepts de base O.O (1)Ouijden Dhemaid
 
Les secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceLes secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceOCTO Technology
 
Présentation au Blockchain Day (Lyon)
Présentation au Blockchain Day (Lyon)Présentation au Blockchain Day (Lyon)
Présentation au Blockchain Day (Lyon)Quentin de Beauchesne
 
SdE 8 - Synchronization de execution
SdE 8 - Synchronization de executionSdE 8 - Synchronization de execution
SdE 8 - Synchronization de executionAlexandru Radovici
 
Game camp 2017 - "Pesto, un langage pour coder les IAs" - Pastagames
Game camp 2017 - "Pesto, un langage pour coder les IAs" - PastagamesGame camp 2017 - "Pesto, un langage pour coder les IAs" - Pastagames
Game camp 2017 - "Pesto, un langage pour coder les IAs" - PastagamesLaura Fournier
 
Les Alternatives à la Blockchain
Les Alternatives à la BlockchainLes Alternatives à la Blockchain
Les Alternatives à la BlockchainCyril Grunspan
 
Eric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpEric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpMSDEVMTL
 

Tendances (18)

Java - implémentation des concepts objets
Java - implémentation des concepts objetsJava - implémentation des concepts objets
Java - implémentation des concepts objets
 
Java - notions de bases pour développeur
Java - notions de bases pour développeurJava - notions de bases pour développeur
Java - notions de bases pour développeur
 
Paug renderscript-mars-2013
Paug renderscript-mars-2013Paug renderscript-mars-2013
Paug renderscript-mars-2013
 
Introduction à MacRuby - OSDC.fr 2009
Introduction à MacRuby - OSDC.fr 2009Introduction à MacRuby - OSDC.fr 2009
Introduction à MacRuby - OSDC.fr 2009
 
Premiers pas dans les extensions PHP
Premiers pas dans les extensions PHPPremiers pas dans les extensions PHP
Premiers pas dans les extensions PHP
 
Concepts de base O.O (1)
Concepts de base O.O (1)Concepts de base O.O (1)
Concepts de base O.O (1)
 
Java 9 modules
Java 9    modulesJava 9    modules
Java 9 modules
 
Rust my node
Rust my nodeRust my node
Rust my node
 
Ruby et Rails
Ruby et RailsRuby et Rails
Ruby et Rails
 
Ruby et Rails
Ruby et RailsRuby et Rails
Ruby et Rails
 
Les secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceLes secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquence
 
Présentation au Blockchain Day (Lyon)
Présentation au Blockchain Day (Lyon)Présentation au Blockchain Day (Lyon)
Présentation au Blockchain Day (Lyon)
 
SdE 8 - Synchronization de execution
SdE 8 - Synchronization de executionSdE 8 - Synchronization de execution
SdE 8 - Synchronization de execution
 
Game camp 2017 - "Pesto, un langage pour coder les IAs" - Pastagames
Game camp 2017 - "Pesto, un langage pour coder les IAs" - PastagamesGame camp 2017 - "Pesto, un langage pour coder les IAs" - Pastagames
Game camp 2017 - "Pesto, un langage pour coder les IAs" - Pastagames
 
Mgd scripting
Mgd scriptingMgd scripting
Mgd scripting
 
Plateformes Linux Embedded
Plateformes Linux EmbeddedPlateformes Linux Embedded
Plateformes Linux Embedded
 
Les Alternatives à la Blockchain
Les Alternatives à la BlockchainLes Alternatives à la Blockchain
Les Alternatives à la Blockchain
 
Eric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpEric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharp
 

En vedette

Lean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanbanLean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanbanJulien Fallet
 
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013Daniel Rehn
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.MongoDB
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPelliando dias
 
02.10.2011 SC B.A.T II
02.10.2011   SC B.A.T II02.10.2011   SC B.A.T II
02.10.2011 SC B.A.T IIHerdwangerSV
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáZarathon Maia
 
Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?iniciativaverds
 
Présentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@tPrésentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@tFrancois Ostyn
 
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...dbi services
 
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2dmc digital media center GmbH
 
Presentació assamblea
Presentació assamblea Presentació assamblea
Presentació assamblea FC Barcelona
 
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung IICampus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung IIDaniel Rehn
 
Otimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxOtimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxElton Minetto
 
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Daniel Rehn
 

En vedette (20)

Forma php
Forma phpForma php
Forma php
 
Lean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanbanLean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanban
 
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
 
Tutorialphpmyadmin
TutorialphpmyadminTutorialphpmyadmin
Tutorialphpmyadmin
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHP
 
02.10.2011 SC B.A.T II
02.10.2011   SC B.A.T II02.10.2011   SC B.A.T II
02.10.2011 SC B.A.T II
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc Quixadá
 
Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?
 
Présentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@tPrésentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@t
 
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
 
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
ECM-Webinar: Alfresco Migration Bestandsdaten Teil 2
 
Presentació assamblea
Presentació assamblea Presentació assamblea
Presentació assamblea
 
Einführung in SCRUM
Einführung in SCRUMEinführung in SCRUM
Einführung in SCRUM
 
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung IICampus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
 
MySQL Query Optimization
MySQL Query OptimizationMySQL Query Optimization
MySQL Query Optimization
 
NotORM
NotORMNotORM
NotORM
 
Digitale Mentalität II
Digitale Mentalität IIDigitale Mentalität II
Digitale Mentalität II
 
Otimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxOtimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - Tchelinux
 
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
 

Similaire à Présentation LMAX / Disruptor

11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdfPatiento Del Mar
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !ochafik
 
gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !Carles Sistare
 
gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!David Caramelo
 
.NET Microframework: du code, de l&rsquo;électronique, de la robotique
.NET Microframework: du code, de l&rsquo;électronique, de la robotique.NET Microframework: du code, de l&rsquo;électronique, de la robotique
.NET Microframework: du code, de l&rsquo;électronique, de la robotiqueMicrosoft
 
Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 2/2)Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 2/2)Loic Ortola
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesXavier MARIN
 
Composants reconfigurables
Composants reconfigurablesComposants reconfigurables
Composants reconfigurablesPeronnin Eric
 
Solutions temps réel sous linux
Solutions temps réel sous linuxSolutions temps réel sous linux
Solutions temps réel sous linuxembedded-linux-bdx
 
Hacking your Home @bdx.io
Hacking your Home @bdx.ioHacking your Home @bdx.io
Hacking your Home @bdx.iolaurenthuet
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introductionsabrine_hamdi
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 
Introduction au lock-free programming avec std::atomics
Introduction au lock-free programming avec std::atomicsIntroduction au lock-free programming avec std::atomics
Introduction au lock-free programming avec std::atomicsAurélien Regat-Barrel
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronestchappui
 

Similaire à Présentation LMAX / Disruptor (20)

11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
 
gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !
 
gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!
 
.NET Microframework: du code, de l&rsquo;électronique, de la robotique
.NET Microframework: du code, de l&rsquo;électronique, de la robotique.NET Microframework: du code, de l&rsquo;électronique, de la robotique
.NET Microframework: du code, de l&rsquo;électronique, de la robotique
 
Hackerspace jan-2013
Hackerspace jan-2013Hackerspace jan-2013
Hackerspace jan-2013
 
Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 2/2)Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 2/2)
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
 
Composants reconfigurables
Composants reconfigurablesComposants reconfigurables
Composants reconfigurables
 
Introduction à MacRuby
Introduction à MacRubyIntroduction à MacRuby
Introduction à MacRuby
 
Solutions temps réel sous linux
Solutions temps réel sous linuxSolutions temps réel sous linux
Solutions temps réel sous linux
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Hacking your Home @bdx.io
Hacking your Home @bdx.ioHacking your Home @bdx.io
Hacking your Home @bdx.io
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introduction
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Introduction au lock-free programming avec std::atomics
Introduction au lock-free programming avec std::atomicsIntroduction au lock-free programming avec std::atomics
Introduction au lock-free programming avec std::atomics
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
 
Apache kafka big data track
Apache kafka   big data trackApache kafka   big data track
Apache kafka big data track
 

Plus de SOAT

Back from Microsoft //Build 2018
Back from Microsoft //Build 2018Back from Microsoft //Build 2018
Back from Microsoft //Build 2018SOAT
 
L'entreprise libérée
L'entreprise libéréeL'entreprise libérée
L'entreprise libéréeSOAT
 
Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !SOAT
 
JAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entrepriseJAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entrepriseSOAT
 
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESSOAT
 
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-DurandSOAT
 
1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-DurandSOAT
 
2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-Durand2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-DurandSOAT
 
Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido SOAT
 
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu ParisotDans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu ParisotSOAT
 
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014SOAT
 
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...SOAT
 
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014SOAT
 
20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soat20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soatSOAT
 
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...SOAT
 
Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014SOAT
 
ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)SOAT
 
Xamarin et le développement natif d’applications Android, iOS et Windows en C#
 Xamarin et le développement natif d’applications Android, iOS et Windows en C# Xamarin et le développement natif d’applications Android, iOS et Windows en C#
Xamarin et le développement natif d’applications Android, iOS et Windows en C#SOAT
 
A la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - SoatA la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - SoatSOAT
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesSOAT
 

Plus de SOAT (20)

Back from Microsoft //Build 2018
Back from Microsoft //Build 2018Back from Microsoft //Build 2018
Back from Microsoft //Build 2018
 
L'entreprise libérée
L'entreprise libéréeL'entreprise libérée
L'entreprise libérée
 
Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !
 
JAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entrepriseJAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entreprise
 
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
 
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
 
1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand
 
2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-Durand2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-Durand
 
Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido
 
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu ParisotDans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
 
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
 
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
 
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
 
20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soat20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soat
 
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
 
Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014
 
ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)
 
Xamarin et le développement natif d’applications Android, iOS et Windows en C#
 Xamarin et le développement natif d’applications Android, iOS et Windows en C# Xamarin et le développement natif d’applications Android, iOS et Windows en C#
Xamarin et le développement natif d’applications Android, iOS et Windows en C#
 
A la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - SoatA la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - Soat
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de données
 

Présentation LMAX / Disruptor

  • 1. Le framework LMAX / Disruptor par Cédric FINANCE et François OSTYN cedric.finance@soat.fr / francois.ostyn@soat.fr 26 janvier 2012
  • 4. LMAX : Société spécialisée dans le passage d’ordres de bourse. Affichage temps réel des cotations, volume de transactions élevé, respect de l’ordonnancement des ordres et temps d’exécution réduit.
  • 5. Disruptor (replicator) : arme ayant été utilisée pour détruire les réplicateurs dans Stargate SG1
  • 6. Disruptor : Framework de programmation concurrente. Résultat des recherches de la société LMAX.
  • 7. Le cloud, j’le casse - On se base sur le principe de l’IoA (Inversion of Architecture). - Pourquoi ne pas utiliser le maximum de puissance CPU et la mémoire de nos machines ? - Toutes ces architectures par strates sont compliquées non ?
  • 8. La soirée 3T va devenir UT (Ultimate Technical):
  • 9. Mais pourquoi la gestion de la concurrence en Java est si compliquée ? Attention, ces 384 pages sont dangereuses !!!
  • 10. L’ordre : // ordre de programmation // ordre d’exécution (non certain) int w = 10; int y = 30; int x = 20; int x = 20; int y = 30; int b = x * y; int z = 40; int z = 40; int a = w + z; int w = 10; int b = x * y; int a = w + z; De nombreux facteurs peuvent influer : le matériel, les paramètres de la JVM, le type de GC,... merci je JIT
  • 11. Avant de continuer quelques chiffres : L1 cache reference 0.5 ns Branch mispredict 5 ns L2 cache reference 7 ns Mutex lock/unlock 25 ns Main memory reference 100 ns Compress 1K bytes with Zippy 3,000 ns Send 2K bytes over 1 Gbps network 20,000 ns Read 1 MB sequentially from memory 250,000 ns Round trip within same datacenter 500,000 ns Disk seek 10,000,000 ns Read 1 MB sequentially from disk 20,000,000 ns Send packet CA->Netherlands->CA 150,000,000 ns
  • 12. Il faut faire attention aux détails : Incrémenter un compteur : Utiliser un lock : public static long foo = 0; static long foo = 0; public static Lock lock = new Lock(); private static void increment() { private static void increment() { for (long l = 0; l < 500000000L; l++) { for (long l = 0; l < 500000000L; l++) { foo ++; lock.lock(); } try { foo++; } finally { Utiliser un AtomicLong : lock.unlock(); }}} static AtomicLong foo = new AtomicLong(0); private static void increment() { for (long l = 0; l < 500000000L; l++) {foo.getAndIncrement();} }
  • 13. Le coût des contentions Incrémenter un compteur 500 millions de fois... ● One Thread! :! 300 ms ● One Thread (volatile):! 4 700 ms (15x) ● One Thread (Atomic) : 5 700 ms (19x) ● One Thread (Lock)!: 10 000 ms (33x) ● Two Threads (Atomic) : 30 000 ms (100x) ● Two Threads (Lock)!: 224 000 ms (746x) Soit pas loin de 4 minutes
  • 14. Découper des chaînes de caractères ● Parallel (Scala): 440 ops/sec ● Serial! (Java) : 1768 ops/sec La parallélisation des traitements n’est pas toujours une bonne solution
  • 15. Et quid des processeurs ? Comparaison du temps de découpage des chaines de caractères en mono-thread sur différents processeurs. Les performances peuvent aller du simple au double...
  • 16. Mais que peut nous apporter le Disruptor ... A part nous sauver des réplicateurs... (Private JOKE)
  • 17. Ne pas devoir recourir à une architecture multi-thread Donc, une mise en place plus aisée De la simplicité pour les tests Un coût de machines moins élevé Se remettre en question sur le fonctionnement de Java...
  • 18. Les problématiques rencontrées par la société LMAX - False sharing - Memory barrier - Context switch - CAS (compare and swap) - Cache line
  • 19. le False sharing public void run() { long i = ITERATIONS + 1; while (0 != --i) { longs[arrayIndex].value = i; } } public final static class VolatileLong { public volatile long value = 0L; public long p1, p2, p3, p4, p5, p6; // comment out }
  • 21. le False sharing Pourquoi ce tel changement de performances?
  • 23. le False sharing Header data1 data2 p1 p2 p3 p4 p5 Cache Line
  • 24. Les conclusions que l’on peut tirer... Les queues (java) sont coûteuses (temps de traitement et lock des ressources) Le multi-threading est coûteux (contentions sur les ressources communes) et difficile a mettre en œuvre. Le multi-threading n’est pas le plus efficace en terme de performances. Attention, ce cas d’utilisation ne peut pas convenir à tout le monde...
  • 25. Ce qu’a fait LMAX : Ecriture d’un framework permettant de partager rapidement les données entre thread sans toutefois recourir aux mécanismes classiques des locks. C’est ce que nous nommerons Disruptor.
  • 26. Le pattern Disruptor : Les producteurs, le Ring Buffer et les consommateurs sont chacun dans des threads différents. Les acteurs : Producteur, Consommateur Les objets : RingBuffer, Barrier Les stratégies : Wait, Claim Objectif : ne plus avoir de contentions...
  • 27. Alors qu’avec une architecture classique nous avions : Mais où se trouve ma contention...
  • 28. Ce que peut apporter le disruptor ? C’est mieux mais toujours pas parfait....
  • 29. Mais est-ce vraiment rapide ? Conclusion : jusqu’à 5 fois plus rapide... et combien de fois moins cher (maintenance, matériel,...) et plus constant...
  • 30. ...DEMO... Comment aider le GIE portabilité ? (pour toi Xavier...)
  • 31. Conclusion - Ne jamais croire ce que l’on nous dit, il faut tester, expérimenter, la pratique est souvent très loin de la théorie - La concurrence est un outil à manier avec précautions,... - Pour avoir des performances, chaque détail compte, mais comme le dit Donald Knuth, «premature optimization is the root of Evil»

Notes de l'éditeur

  1. \n
  2. F + C\n
  3. \n
  4. F\n
  5. F\n
  6. F\n
  7. C\n
  8. F\n
  9. Poser la question sur qui utilise la concurrence sur ses projets ?\n
  10. C\n
  11. F\n
  12. C\n
  13. C\n
  14. C\n
  15. C\n
  16. F\n
  17. F\n
  18. F\n
  19. C\n
  20. C\n
  21. C\n
  22. C\n
  23. C\n
  24. F + C\n
  25. F\n
  26. F + C\n
  27. F + C\n
  28. F + C \n
  29. F + C \n
  30. F + C\n
  31. F + C \n
  32. NOP\n