SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
2013-10-{24,25}

M’enfin Scalac,
où glandes-tu encore ?
François ARMAND
Directeur R&D - Normation
far@normation.com
Speaker
François @fanf42 ARMAND
far@normation.com
Lead-dev

Co-founder

Scala since...

(for personal projects)

Scala

PSUG !!!

Projet LaFoSec

Sécurité des langages fonctionnels
(Scala from the point of view of IT security)

French paper for the Agence Nationnal de la Sécurité de SI (ANSSI)

2

http://www.ssi.gouv.fr/fr/anssi/publications/publications
-scientifiques/autres-publications/lafosec-securite-et-la
ngages-fonctionnels.html
De quoi va-t-on parler ?

3
De quoi va-t-on parler ?
▣

▣

4

Pourquoi, mais pourquoi Scalac est-il si lent ?

En fait, est-ce que j'y peux quelque chose ?
De quoi va-t-on parler ?

▣

RAM, CPU et I/O
▣

▣

▣

Améliorer

▣

Espérer ?

Options de la JVM

▣

Inférence de type et autres features

▣

Sondes AspectJ

▣

Uniquement compilation !

▣

5

Comprendre

Pas de miracles
2013-10-{24,25}

Scalac : tous unis pour le
réchauffement climatique
Contentions : pourquoi ça rame ?

CPU
▣

Bien sûr, ca joue
■

■

Test de temps de compilation d'un projet
Scala pour différent CPU
CPU plus puissant ⇒ compilation plus
rapide !
https://groups.google.com/forum/#!topic/scala-user/PJbQefbsn0M
https://gist.github.com/DaveGit/5204178

▣

JVM : Temps de chauffe !
■

7

JIT : compilation, optimization...
Contentions : pourquoi ça rame ?
▣

Scalac est une application JavaJVM :
■
■

Ou de GC.

■

Ou de quantité d'objets générés.

■

▣

en fait, c'est toujours une question de RAM.

Enfin, c'est la même chose.

Perception de lenteur : tuner le temps de lancement !

RAM

8
Contentions : pourquoi ça rame ?

▣

Chargement de Jar / Class

▣

Écriture de logs (console)

▣

Génération de Bytecode

▣

Ecriture de .class

I/O

9
Contentions : pourquoi ça rame ?

CPU

RAM

10

I/O
2013-10-{24,25}

Scalac : tous unis pour le
réchauffement climatique
Fatal Features
Performances de Scalac
▣

On ne parle que de ça
■

Stack overflow & Martin Odersky (2010)
□

■

Bill Venners : project compiletime (2013)
□

■

http://stackoverflow.com/questions/3606591/why-does-intellij-idea-compile-scala-so-slowly/3612212#3612212

http://www.artima.com/articles/compile_time.html

Des dizaines d'emails sur scala-internal
□
□

Paul Phillips : obsédé par les performances et les métriques
James Iry,Grzegorz Kossakowski, Simon Ochsenreither, Rex Kerr et
tous ceux que j'oublie …

■

■

12

Miguel Garcia : compiler corner reloaded
Et des milliards d'utilisateurs Scala.
Fonctionnalités fatales
Start-up
■

■

▣

Odersky : Greater startup overhead
■

■

■

13

Parcours du Classpath
□
Recherche des roots
Taille / nombre de jar

Scalac itself consists of a LOT
loaded and jit-compiled

of classes which have to be

Scalac has to search the classpath for all root packages and files.
Depending on the size of your classpath this can take one to
three extra seconds.
Overall, expect a startup overhead of scalac of 4-8 seconds,
longer if you run it the first time so disk-caches are not filled.
Fonctionnalités fatales
▣

Chaque recherche d'implicit doit vérifier
UNE UNIQUE solution
Parcours de l'ensemble des possibilités A
CHAQUE FOIS
■

Jeu : construire une HLIST (Shapeless) de
plus en plus grande.

Système de type
■

Inférences de type

■

Recheche d'implicits

The point is that we are outside the realm of
anyone's conscious expectations.
It's like taking a toy car on a journey to the
moon. Maybe the car's plastic will make it
through the Van Allen belt, maybe it won't but regardless of outcome, there is no
expected behavior.
There is only observed behavior.
https://groups.google.com/d/msg/shapeless-dev/HvV63toSBNM/omphOda7-jcJ

https://docs.google.com/spreadsheet/ccc?key=0Avj3prhoBpnsdGM3TUY2ZWpaLUZPcWpUcXBxXzVDWFE#gid=0

14
Fonctionnalités fatales
▣

Scalac n'est pas I/O bounded
■

▣

(bémol pour système de fichiers archaïque)

Mais c'est un bon indicateur de la complexité
■

Et du stress généré sur le GC

Nombre de classes
générées
■

Nombre de fonctions,

■

X 26

lazy val, …

X 42

Très grande majorité de petits fichiers ( < 1ko )

15
Fonctionnalités fatales

▣

« project compile time »
■

▣

http://www.artima.com/articles/compile_time.html

"the compiler must insert forwarding
methods for all the methods declared in
the trait into the body of the subclass"

▣
▣

16

-optimize
spécialisation

▣

Héritage depuis
un trait

Énormément de travail
supplémentaire pour le compilateur
Fonctionnalités fatales
Start-up
■

■

Parcours du Classpath
□
Recherche des roots
Taille / nombre de jar

Nombre de classes
générées
■

Nombre de fonctions,

■

■

Inférences de type

■

Recheche d'implicits

Héritage depuis
un trait

lazy val, …

▣

-optimize

▣

17

Système de type

spécialisation

Solution : ne pas faire de Scala !
2013-10-{24,25}

Améliorer les choses
(?)
Fonctionnalités fatales
Start-up
■

■

▣

Parcours du Classpath
□
Recherche des roots
Taille / nombre de jar

JVM
□
□

■

Headius (JRuby fame)

Paul Phillips (Alpaca farmer) https://groups.google.com/forum/#!topic/scala-internals/rqtMmPEgdOM

Linux : Regenerate the shared archive !!!
□

■

java -Xshare:dump

JVM Options (YMMV):
□
□

19

https://github.com/jruby/jruby/wiki/Improving-startup-time

Tuning de GC quasi-sans effet
-Xmx3g -Xms3g -XX:+TieredCompilation
-XX:ReservedCodeCacheSize=256m -XX:MaxPermSize=384m
-XX:+UseNUMA -XX:+UseParallelGC
Fonctionnalités fatales
Système de type
■

▣

Pas de solution simple
■

▣

Recheche d'implicits

Sauf les cas triviaux, où ajouter des informations de type résout le souci

Se priver de ScalaZ, Shapeless, Specs2, etc ?

Identifier un fichier qui prend significativement plus de temps
■

Sondes AspectJ ou timing à la main
□
□

□

20

■

Limiter le nombre d'implicit dans le scope
■

▣

Inférences de type

https://github.com/gkossakowski/scalac-aspects
http://blog.normation.com/en/2013/01/29/per-file-compilation-time-in-a-scalamaven-project/
https://groups.google.com/forum/#!topic/scala-internals/lP0m3jJH4to
Fonctionnalités fatales

Nombre de classes
générées
■

■

21

▣

Faire du Java ?

▣

Espérer un meilleur futur ?

Nombre de fonctions,
lazy val, …

■

Java 8 / Closures ?
Fonctionnalités fatales

▣

Mixer le trait avec une classe

▣

Puis hériter cette classe ailleurs

22

Héritage depuis
un trait
Fonctionnalités fatales

▣

Pas de solution « utilisateur » au niveau code
■
■

▣

Ne pas les utiliser par défaut
Mettre en place des profils de CI spécialisés

Espérer un futur meilleur?

▣
▣

23

-optimize
spécialisation
2013-10-{24,25}

Un meilleur futur ?
Performances de Scalac
▣

On ne parle que de ça
■

Stack overflow & Martin Odersky (2010)
□

■

http://stackoverflow.com/questions/3606591/why-does-intellij-idea-compile-scala-so-slowly/3612212#3612212

Bill Venners : project compiletime (2013)
□

■

Typesafe est au courant 

http://www.artima.com/articles/compile_time.html

Des dizaines d'emails sur scala-internal
□
□

Paul Phillips : obsédé par les performances et les métriques
James Iry,Grzegorz Kossakowski, Simon Ochsenreither, Rex Kerr et
tous ceux que j'oublie …

■

■

25

Miguel Garcia : compiler corner reloaded
Et des milliards d'utilisateurs Scala.
Scala 2.11 : better compilation performances
▣

Amélioration massive de la
mémoire consommée par
Scalac
■

26

Backporté en Scala 10.3
Scala 2.11 : better compilation performances

▣

Réécriture des Class path (Flatpath)
■

Structure de données plus simple

■

Load/Scan de Jar parallélisable

■

Beaucoup plus rapide (~ Java : plusieurs => 200ms)
□

□

27

https://groups.google.com/forum/#!topic/scala-internals/rNsXhyojHUI
https://groups.google.com/forum/#!topic/scala-internals/xgb5YbKvQcw
Scala 2.11 : better compilation performances

▣

Nouveau backend d'émission de bytecode
■

Miguel Garcia : http://magarciaepfl.github.io/scala/
□

https://groups.google.com/forum/#!topic/scala-internals/UqEMRRdj2oY

■
■

Bytecode généré plus compact

■

Plus d'optimisation, simple et déterministes, possibles

■

28

10-20% plus rapide

Des licornes !
Et pour le futur ?

▣

Encore pleins de nouvelles choses prévues pour la suite !
https://groups.google.com/forum/#!topic/scala-internals/yCU04A2HoDY

29
2013-10-{24,25}

Questions ?

Contenu connexe

Similaire à Scala.io 2013 - M’enfin Scalac, où glandes-tu encore ?

Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoiPerf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoipkernevez
 
NetApp PartnersTour 2011 à Lille, mon point de vue
NetApp PartnersTour 2011 à Lille, mon point de vueNetApp PartnersTour 2011 à Lille, mon point de vue
NetApp PartnersTour 2011 à Lille, mon point de vueOlivier (DaffyDuke) Duquesne
 
Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetupSamir Rouabhi
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
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
 
Les containers docker vu par un chef cuisinier et un mécanicien
Les containers docker vu par un chef cuisinier et un mécanicienLes containers docker vu par un chef cuisinier et un mécanicien
Les containers docker vu par un chef cuisinier et un mécanicienRachid Zarouali
 
Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?
Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?
Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?Paris Salesforce Developer Group
 
Methodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlMethodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlCodizy
 
Extrait du Benchmark Cloud IaaS par Gekko
Extrait du Benchmark Cloud IaaS par Gekko Extrait du Benchmark Cloud IaaS par Gekko
Extrait du Benchmark Cloud IaaS par Gekko GekkoSAS
 
Une IDS scalable et résiliente avec geOrchestra & Docker
Une IDS scalable et résiliente avec geOrchestra & DockerUne IDS scalable et résiliente avec geOrchestra & Docker
Une IDS scalable et résiliente avec geOrchestra & DockerCamptocamp
 
Performance des sites dynamiques : une histoire de cache à tous les niveaux
Performance des sites dynamiques : une histoire de cache à tous les niveauxPerformance des sites dynamiques : une histoire de cache à tous les niveaux
Performance des sites dynamiques : une histoire de cache à tous les niveauxMy_Sic
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Jérôme Tamborini
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...XavierPestel
 
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Benoît de CHATEAUVIEUX
 
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
 
Spark Summit Europe Wrap Up and TASM State of the Community
Spark Summit Europe Wrap Up and TASM State of the CommunitySpark Summit Europe Wrap Up and TASM State of the Community
Spark Summit Europe Wrap Up and TASM State of the CommunityJean-Georges Perrin
 

Similaire à Scala.io 2013 - M’enfin Scalac, où glandes-tu encore ? (20)

The Future of Javascript
The Future of JavascriptThe Future of Javascript
The Future of Javascript
 
The future of JavaScript
The future of JavaScriptThe future of JavaScript
The future of JavaScript
 
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoiPerf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
 
NetApp PartnersTour 2011 à Lille, mon point de vue
NetApp PartnersTour 2011 à Lille, mon point de vueNetApp PartnersTour 2011 à Lille, mon point de vue
NetApp PartnersTour 2011 à Lille, mon point de vue
 
Sysadmin Day #5
Sysadmin Day #5Sysadmin Day #5
Sysadmin Day #5
 
Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetup
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
Les containers docker vu par un chef cuisinier et un mécanicien
Les containers docker vu par un chef cuisinier et un mécanicienLes containers docker vu par un chef cuisinier et un mécanicien
Les containers docker vu par un chef cuisinier et un mécanicien
 
Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?
Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?
Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?
 
Methodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlMethodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysql
 
Extrait du Benchmark Cloud IaaS par Gekko
Extrait du Benchmark Cloud IaaS par Gekko Extrait du Benchmark Cloud IaaS par Gekko
Extrait du Benchmark Cloud IaaS par Gekko
 
Une IDS scalable et résiliente avec geOrchestra & Docker
Une IDS scalable et résiliente avec geOrchestra & DockerUne IDS scalable et résiliente avec geOrchestra & Docker
Une IDS scalable et résiliente avec geOrchestra & Docker
 
Performance des sites dynamiques : une histoire de cache à tous les niveaux
Performance des sites dynamiques : une histoire de cache à tous les niveauxPerformance des sites dynamiques : une histoire de cache à tous les niveaux
Performance des sites dynamiques : une histoire de cache à tous les niveaux
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)
 
Bureaux portables 2019
Bureaux portables 2019Bureaux portables 2019
Bureaux portables 2019
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
 
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
 
Spark Summit Europe Wrap Up and TASM State of the Community
Spark Summit Europe Wrap Up and TASM State of the CommunitySpark Summit Europe Wrap Up and TASM State of the Community
Spark Summit Europe Wrap Up and TASM State of the Community
 

Plus de RUDDER

What if configuration management didn't need to be lvl60 in dev?
What if configuration management didn't need to be lvl60 in dev?What if configuration management didn't need to be lvl60 in dev?
What if configuration management didn't need to be lvl60 in dev?RUDDER
 
Servers compliance: audit, remediation, proof
Servers compliance: audit, remediation, proofServers compliance: audit, remediation, proof
Servers compliance: audit, remediation, proofRUDDER
 
OSIS 2019 - Qu’apporte l’observabilité à la gestion de configuration ?
OSIS 2019 - Qu’apporte l’observabilité à la gestion de configuration ?OSIS 2019 - Qu’apporte l’observabilité à la gestion de configuration ?
OSIS 2019 - Qu’apporte l’observabilité à la gestion de configuration ?RUDDER
 
OW2Con - Configurations, do you prove yours?
OW2Con - Configurations, do you prove yours?OW2Con - Configurations, do you prove yours?
OW2Con - Configurations, do you prove yours?RUDDER
 
The new plugin ecosystem in RUDDER 5.0
The new plugin ecosystem in RUDDER 5.0The new plugin ecosystem in RUDDER 5.0
The new plugin ecosystem in RUDDER 5.0RUDDER
 
What uses for observing operations of Configuration Management?
What uses for observing operations of Configuration Management?What uses for observing operations of Configuration Management?
What uses for observing operations of Configuration Management?RUDDER
 
UX challenges of a UI-centric config management tool
UX challenges of a UI-centric config management toolUX challenges of a UI-centric config management tool
UX challenges of a UI-centric config management toolRUDDER
 
What happened in RUDDER in 2018 and what’s next?
What happened in RUDDER in 2018 and what’s next?What happened in RUDDER in 2018 and what’s next?
What happened in RUDDER in 2018 and what’s next?RUDDER
 
What is RUDDER and when should I use it?
What is RUDDER and when should I use it?What is RUDDER and when should I use it?
What is RUDDER and when should I use it?RUDDER
 
Fosdem - Configurations do you prove yours?
Fosdem - Configurations  do you prove yours?Fosdem - Configurations  do you prove yours?
Fosdem - Configurations do you prove yours?RUDDER
 
L'audit en continu : clé de la conformité démontrable (#POSS 2018)
L'audit en continu : clé de la conformité démontrable (#POSS 2018)L'audit en continu : clé de la conformité démontrable (#POSS 2018)
L'audit en continu : clé de la conformité démontrable (#POSS 2018)RUDDER
 
Fiabilité et conformité continues en production avec Rudder (#BBOOST 2018)
Fiabilité et conformité continues en production avec Rudder (#BBOOST 2018)Fiabilité et conformité continues en production avec Rudder (#BBOOST 2018)
Fiabilité et conformité continues en production avec Rudder (#BBOOST 2018)RUDDER
 
Stay up - voyage d'un éditeur de logiciels libres
Stay up - voyage d'un éditeur de logiciels libresStay up - voyage d'un éditeur de logiciels libres
Stay up - voyage d'un éditeur de logiciels libresRUDDER
 
How we scaled Rudder to 10k, and the road to 50k
How we scaled Rudder to 10k, and the road to 50kHow we scaled Rudder to 10k, and the road to 50k
How we scaled Rudder to 10k, and the road to 50kRUDDER
 
What's new and what's next in Rudder
What's new and what's next in RudderWhat's new and what's next in Rudder
What's new and what's next in RudderRUDDER
 
Poss 2017 : gestion des configurations et mise en conformité chez un service ...
Poss 2017 : gestion des configurations et mise en conformité chez un service ...Poss 2017 : gestion des configurations et mise en conformité chez un service ...
Poss 2017 : gestion des configurations et mise en conformité chez un service ...RUDDER
 
Poss 2017 - la continuité, arme secrète de la gestion du si - cas concret de ...
Poss 2017 - la continuité, arme secrète de la gestion du si - cas concret de ...Poss 2017 - la continuité, arme secrète de la gestion du si - cas concret de ...
Poss 2017 - la continuité, arme secrète de la gestion du si - cas concret de ...RUDDER
 
POSS 2017 : Comment automatiser son infrastructure quand... on a pas le temps...
POSS 2017 : Comment automatiser son infrastructure quand... on a pas le temps...POSS 2017 : Comment automatiser son infrastructure quand... on a pas le temps...
POSS 2017 : Comment automatiser son infrastructure quand... on a pas le temps...RUDDER
 
DevOps D-Day 2017 - Gestion des configurations et mise en conformité chez un ...
DevOps D-Day 2017 - Gestion des configurations et mise en conformité chez un ...DevOps D-Day 2017 - Gestion des configurations et mise en conformité chez un ...
DevOps D-Day 2017 - Gestion des configurations et mise en conformité chez un ...RUDDER
 
RUDDER - Continuous Configuration (configuration management + continuous aud...
 RUDDER - Continuous Configuration (configuration management + continuous aud... RUDDER - Continuous Configuration (configuration management + continuous aud...
RUDDER - Continuous Configuration (configuration management + continuous aud...RUDDER
 

Plus de RUDDER (20)

What if configuration management didn't need to be lvl60 in dev?
What if configuration management didn't need to be lvl60 in dev?What if configuration management didn't need to be lvl60 in dev?
What if configuration management didn't need to be lvl60 in dev?
 
Servers compliance: audit, remediation, proof
Servers compliance: audit, remediation, proofServers compliance: audit, remediation, proof
Servers compliance: audit, remediation, proof
 
OSIS 2019 - Qu’apporte l’observabilité à la gestion de configuration ?
OSIS 2019 - Qu’apporte l’observabilité à la gestion de configuration ?OSIS 2019 - Qu’apporte l’observabilité à la gestion de configuration ?
OSIS 2019 - Qu’apporte l’observabilité à la gestion de configuration ?
 
OW2Con - Configurations, do you prove yours?
OW2Con - Configurations, do you prove yours?OW2Con - Configurations, do you prove yours?
OW2Con - Configurations, do you prove yours?
 
The new plugin ecosystem in RUDDER 5.0
The new plugin ecosystem in RUDDER 5.0The new plugin ecosystem in RUDDER 5.0
The new plugin ecosystem in RUDDER 5.0
 
What uses for observing operations of Configuration Management?
What uses for observing operations of Configuration Management?What uses for observing operations of Configuration Management?
What uses for observing operations of Configuration Management?
 
UX challenges of a UI-centric config management tool
UX challenges of a UI-centric config management toolUX challenges of a UI-centric config management tool
UX challenges of a UI-centric config management tool
 
What happened in RUDDER in 2018 and what’s next?
What happened in RUDDER in 2018 and what’s next?What happened in RUDDER in 2018 and what’s next?
What happened in RUDDER in 2018 and what’s next?
 
What is RUDDER and when should I use it?
What is RUDDER and when should I use it?What is RUDDER and when should I use it?
What is RUDDER and when should I use it?
 
Fosdem - Configurations do you prove yours?
Fosdem - Configurations  do you prove yours?Fosdem - Configurations  do you prove yours?
Fosdem - Configurations do you prove yours?
 
L'audit en continu : clé de la conformité démontrable (#POSS 2018)
L'audit en continu : clé de la conformité démontrable (#POSS 2018)L'audit en continu : clé de la conformité démontrable (#POSS 2018)
L'audit en continu : clé de la conformité démontrable (#POSS 2018)
 
Fiabilité et conformité continues en production avec Rudder (#BBOOST 2018)
Fiabilité et conformité continues en production avec Rudder (#BBOOST 2018)Fiabilité et conformité continues en production avec Rudder (#BBOOST 2018)
Fiabilité et conformité continues en production avec Rudder (#BBOOST 2018)
 
Stay up - voyage d'un éditeur de logiciels libres
Stay up - voyage d'un éditeur de logiciels libresStay up - voyage d'un éditeur de logiciels libres
Stay up - voyage d'un éditeur de logiciels libres
 
How we scaled Rudder to 10k, and the road to 50k
How we scaled Rudder to 10k, and the road to 50kHow we scaled Rudder to 10k, and the road to 50k
How we scaled Rudder to 10k, and the road to 50k
 
What's new and what's next in Rudder
What's new and what's next in RudderWhat's new and what's next in Rudder
What's new and what's next in Rudder
 
Poss 2017 : gestion des configurations et mise en conformité chez un service ...
Poss 2017 : gestion des configurations et mise en conformité chez un service ...Poss 2017 : gestion des configurations et mise en conformité chez un service ...
Poss 2017 : gestion des configurations et mise en conformité chez un service ...
 
Poss 2017 - la continuité, arme secrète de la gestion du si - cas concret de ...
Poss 2017 - la continuité, arme secrète de la gestion du si - cas concret de ...Poss 2017 - la continuité, arme secrète de la gestion du si - cas concret de ...
Poss 2017 - la continuité, arme secrète de la gestion du si - cas concret de ...
 
POSS 2017 : Comment automatiser son infrastructure quand... on a pas le temps...
POSS 2017 : Comment automatiser son infrastructure quand... on a pas le temps...POSS 2017 : Comment automatiser son infrastructure quand... on a pas le temps...
POSS 2017 : Comment automatiser son infrastructure quand... on a pas le temps...
 
DevOps D-Day 2017 - Gestion des configurations et mise en conformité chez un ...
DevOps D-Day 2017 - Gestion des configurations et mise en conformité chez un ...DevOps D-Day 2017 - Gestion des configurations et mise en conformité chez un ...
DevOps D-Day 2017 - Gestion des configurations et mise en conformité chez un ...
 
RUDDER - Continuous Configuration (configuration management + continuous aud...
 RUDDER - Continuous Configuration (configuration management + continuous aud... RUDDER - Continuous Configuration (configuration management + continuous aud...
RUDDER - Continuous Configuration (configuration management + continuous aud...
 

Scala.io 2013 - M’enfin Scalac, où glandes-tu encore ?

  • 1. 2013-10-{24,25} M’enfin Scalac, où glandes-tu encore ? François ARMAND Directeur R&D - Normation far@normation.com
  • 2. Speaker François @fanf42 ARMAND far@normation.com Lead-dev Co-founder Scala since... (for personal projects) Scala PSUG !!! Projet LaFoSec Sécurité des langages fonctionnels (Scala from the point of view of IT security) French paper for the Agence Nationnal de la Sécurité de SI (ANSSI) 2 http://www.ssi.gouv.fr/fr/anssi/publications/publications -scientifiques/autres-publications/lafosec-securite-et-la ngages-fonctionnels.html
  • 3. De quoi va-t-on parler ? 3
  • 4. De quoi va-t-on parler ? ▣ ▣ 4 Pourquoi, mais pourquoi Scalac est-il si lent ? En fait, est-ce que j'y peux quelque chose ?
  • 5. De quoi va-t-on parler ? ▣ RAM, CPU et I/O ▣ ▣ ▣ Améliorer ▣ Espérer ? Options de la JVM ▣ Inférence de type et autres features ▣ Sondes AspectJ ▣ Uniquement compilation ! ▣ 5 Comprendre Pas de miracles
  • 6. 2013-10-{24,25} Scalac : tous unis pour le réchauffement climatique
  • 7. Contentions : pourquoi ça rame ? CPU ▣ Bien sûr, ca joue ■ ■ Test de temps de compilation d'un projet Scala pour différent CPU CPU plus puissant ⇒ compilation plus rapide ! https://groups.google.com/forum/#!topic/scala-user/PJbQefbsn0M https://gist.github.com/DaveGit/5204178 ▣ JVM : Temps de chauffe ! ■ 7 JIT : compilation, optimization...
  • 8. Contentions : pourquoi ça rame ? ▣ Scalac est une application JavaJVM : ■ ■ Ou de GC. ■ Ou de quantité d'objets générés. ■ ▣ en fait, c'est toujours une question de RAM. Enfin, c'est la même chose. Perception de lenteur : tuner le temps de lancement ! RAM 8
  • 9. Contentions : pourquoi ça rame ? ▣ Chargement de Jar / Class ▣ Écriture de logs (console) ▣ Génération de Bytecode ▣ Ecriture de .class I/O 9
  • 10. Contentions : pourquoi ça rame ? CPU RAM 10 I/O
  • 11. 2013-10-{24,25} Scalac : tous unis pour le réchauffement climatique Fatal Features
  • 12. Performances de Scalac ▣ On ne parle que de ça ■ Stack overflow & Martin Odersky (2010) □ ■ Bill Venners : project compiletime (2013) □ ■ http://stackoverflow.com/questions/3606591/why-does-intellij-idea-compile-scala-so-slowly/3612212#3612212 http://www.artima.com/articles/compile_time.html Des dizaines d'emails sur scala-internal □ □ Paul Phillips : obsédé par les performances et les métriques James Iry,Grzegorz Kossakowski, Simon Ochsenreither, Rex Kerr et tous ceux que j'oublie … ■ ■ 12 Miguel Garcia : compiler corner reloaded Et des milliards d'utilisateurs Scala.
  • 13. Fonctionnalités fatales Start-up ■ ■ ▣ Odersky : Greater startup overhead ■ ■ ■ 13 Parcours du Classpath □ Recherche des roots Taille / nombre de jar Scalac itself consists of a LOT loaded and jit-compiled of classes which have to be Scalac has to search the classpath for all root packages and files. Depending on the size of your classpath this can take one to three extra seconds. Overall, expect a startup overhead of scalac of 4-8 seconds, longer if you run it the first time so disk-caches are not filled.
  • 14. Fonctionnalités fatales ▣ Chaque recherche d'implicit doit vérifier UNE UNIQUE solution Parcours de l'ensemble des possibilités A CHAQUE FOIS ■ Jeu : construire une HLIST (Shapeless) de plus en plus grande. Système de type ■ Inférences de type ■ Recheche d'implicits The point is that we are outside the realm of anyone's conscious expectations. It's like taking a toy car on a journey to the moon. Maybe the car's plastic will make it through the Van Allen belt, maybe it won't but regardless of outcome, there is no expected behavior. There is only observed behavior. https://groups.google.com/d/msg/shapeless-dev/HvV63toSBNM/omphOda7-jcJ https://docs.google.com/spreadsheet/ccc?key=0Avj3prhoBpnsdGM3TUY2ZWpaLUZPcWpUcXBxXzVDWFE#gid=0 14
  • 15. Fonctionnalités fatales ▣ Scalac n'est pas I/O bounded ■ ▣ (bémol pour système de fichiers archaïque) Mais c'est un bon indicateur de la complexité ■ Et du stress généré sur le GC Nombre de classes générées ■ Nombre de fonctions, ■ X 26 lazy val, … X 42 Très grande majorité de petits fichiers ( < 1ko ) 15
  • 16. Fonctionnalités fatales ▣ « project compile time » ■ ▣ http://www.artima.com/articles/compile_time.html "the compiler must insert forwarding methods for all the methods declared in the trait into the body of the subclass" ▣ ▣ 16 -optimize spécialisation ▣ Héritage depuis un trait Énormément de travail supplémentaire pour le compilateur
  • 17. Fonctionnalités fatales Start-up ■ ■ Parcours du Classpath □ Recherche des roots Taille / nombre de jar Nombre de classes générées ■ Nombre de fonctions, ■ ■ Inférences de type ■ Recheche d'implicits Héritage depuis un trait lazy val, … ▣ -optimize ▣ 17 Système de type spécialisation Solution : ne pas faire de Scala !
  • 19. Fonctionnalités fatales Start-up ■ ■ ▣ Parcours du Classpath □ Recherche des roots Taille / nombre de jar JVM □ □ ■ Headius (JRuby fame) Paul Phillips (Alpaca farmer) https://groups.google.com/forum/#!topic/scala-internals/rqtMmPEgdOM Linux : Regenerate the shared archive !!! □ ■ java -Xshare:dump JVM Options (YMMV): □ □ 19 https://github.com/jruby/jruby/wiki/Improving-startup-time Tuning de GC quasi-sans effet -Xmx3g -Xms3g -XX:+TieredCompilation -XX:ReservedCodeCacheSize=256m -XX:MaxPermSize=384m -XX:+UseNUMA -XX:+UseParallelGC
  • 20. Fonctionnalités fatales Système de type ■ ▣ Pas de solution simple ■ ▣ Recheche d'implicits Sauf les cas triviaux, où ajouter des informations de type résout le souci Se priver de ScalaZ, Shapeless, Specs2, etc ? Identifier un fichier qui prend significativement plus de temps ■ Sondes AspectJ ou timing à la main □ □ □ 20 ■ Limiter le nombre d'implicit dans le scope ■ ▣ Inférences de type https://github.com/gkossakowski/scalac-aspects http://blog.normation.com/en/2013/01/29/per-file-compilation-time-in-a-scalamaven-project/ https://groups.google.com/forum/#!topic/scala-internals/lP0m3jJH4to
  • 21. Fonctionnalités fatales Nombre de classes générées ■ ■ 21 ▣ Faire du Java ? ▣ Espérer un meilleur futur ? Nombre de fonctions, lazy val, … ■ Java 8 / Closures ?
  • 22. Fonctionnalités fatales ▣ Mixer le trait avec une classe ▣ Puis hériter cette classe ailleurs 22 Héritage depuis un trait
  • 23. Fonctionnalités fatales ▣ Pas de solution « utilisateur » au niveau code ■ ■ ▣ Ne pas les utiliser par défaut Mettre en place des profils de CI spécialisés Espérer un futur meilleur? ▣ ▣ 23 -optimize spécialisation
  • 25. Performances de Scalac ▣ On ne parle que de ça ■ Stack overflow & Martin Odersky (2010) □ ■ http://stackoverflow.com/questions/3606591/why-does-intellij-idea-compile-scala-so-slowly/3612212#3612212 Bill Venners : project compiletime (2013) □ ■ Typesafe est au courant  http://www.artima.com/articles/compile_time.html Des dizaines d'emails sur scala-internal □ □ Paul Phillips : obsédé par les performances et les métriques James Iry,Grzegorz Kossakowski, Simon Ochsenreither, Rex Kerr et tous ceux que j'oublie … ■ ■ 25 Miguel Garcia : compiler corner reloaded Et des milliards d'utilisateurs Scala.
  • 26. Scala 2.11 : better compilation performances ▣ Amélioration massive de la mémoire consommée par Scalac ■ 26 Backporté en Scala 10.3
  • 27. Scala 2.11 : better compilation performances ▣ Réécriture des Class path (Flatpath) ■ Structure de données plus simple ■ Load/Scan de Jar parallélisable ■ Beaucoup plus rapide (~ Java : plusieurs => 200ms) □ □ 27 https://groups.google.com/forum/#!topic/scala-internals/rNsXhyojHUI https://groups.google.com/forum/#!topic/scala-internals/xgb5YbKvQcw
  • 28. Scala 2.11 : better compilation performances ▣ Nouveau backend d'émission de bytecode ■ Miguel Garcia : http://magarciaepfl.github.io/scala/ □ https://groups.google.com/forum/#!topic/scala-internals/UqEMRRdj2oY ■ ■ Bytecode généré plus compact ■ Plus d'optimisation, simple et déterministes, possibles ■ 28 10-20% plus rapide Des licornes !
  • 29. Et pour le futur ? ▣ Encore pleins de nouvelles choses prévues pour la suite ! https://groups.google.com/forum/#!topic/scala-internals/yCU04A2HoDY 29