SlideShare a Scribd company logo
Parallel builds in Eclipse Workspaces
Value, making-of and optimal usages
Mickael Istria - @mickaelistria CC0 – No rights reserved
Demo Tool
For the demo/talk we use
https://github.com/mickaelistria/eclipse-ide-parallel-builds-demo
which
– Defines the WaitBuilder
– Allows to generate build Gantt chart
– Allows to generate signature of build
output (compare output)
– Allows to control scheduling rule for JDT
and M2E builders
Demo scenario
6 projects with WaitBuilder waiting for some time (Thread.sleep())
– Projects deps directly configured in .project
– Builder duration configured in waitBuilder.properties (default 1000ms)
– Builder schedulingRule configured in waitBuilder.properties (default current
project) can be set to workspace root or some other project.
The basics: legacy (pre-Photon)
Builds can only be sequential
The basics: Paralleling
● Create 1 job per project build
● Throttle on limited amount of threads
using JobGroup API
● Preference used by good old
Workspace.build() API
● Default in Photon and 2018-09 is
disabled (nbThreads == 1)
The basics: Parallelized
No dependencies, isolated scheduling rules
The basics: Benefits
● Shorter full time to completion (& less energy consumed)
● Faster availability of each project
– A long project or chain of projects build doesn’t block other
projects for too long
– If you have handlers on project builds completion, they’re
called way earlier
● Applies to any workspace-build solutions, including non-
IDE offerings like JDT-LS
Relying on jobs→Usable progress View
Dependency Graph: no parallel
Dependency graph is computed, and turned
into a sequence (via topological sort)
p3,p1,p2,p5,p4,p6
Dependency graph: Parallel
Graph is used directly and jobs are scheduled
for builds as soon as all ancestors are built
About Scheduling Rules
● 2 operations using conflicting scheduling rules
rule1.isConflicting(rule2) can NOT run in parallel
● Scheduling rules are usually Resource Path which conflict when one path is
a parent of the other:
– a/b and a/b/c are conflicting and those scheduling rules prevent jobs for
running in parallel
– a/b and a/c are not conflicting and those schduling rules can allow jobs to run in
parallel
● Builders are expected to implement
IncrementalProjectBuilder.getRule(…)
Default is workspace.getRoot()
Here, p1 build rule conflicts with all other build rules → p1 won’t build in // of other projects
Scheduling rules don’t change
sequential scheduling
No jobs → no issue about conflicting scheduling
rules
So why scheduling rules on builders?
“Safety”: Scheduling rule are here to prevent some
other thread to change critical content while builder is
running. The scheduling rule defines what must NOT
be changed externally while builder is running.
GOLDEN RULE: To minimize conflicts and allow
more parallelism, set the narrowest rule your
builder can deal with.
(Bad) State of art
Many builders do not specify a scheduling rule
(defaulting to workspace root, conflicting with
every workspace operation)
→ Building a project locks the whole workspace!
Builder uses root as SR, conflicts with whole WS
Change file in another
unrelated Project + Save
(Bad) examples
● JDT Builder https://bugs.eclipse.org/bugs/show_bug.cgi?id=531554
● M2E Builder https://bugs.eclipse.org/bugs/show_bug.cgi?id=538461
● PDE Builder https://bugs.eclipse.org/bugs/show_bug.cgi?id=531555
…
Use default workspace scheduling rule,
preventing parallel execution and blocking user
actions in unrelated files!
With finer scheduling rule...
More specific scheduling rule, only necessary
content is locked by builder.
For example, just using getProject() as
scheduling rule can often be enough.
Builder uses project as SR, conflicts with only project content
Change file in another
unrelated Project + Save File just saved!
GOLDEN RULE:
To minimize conflicts and allow more parallelism,
set the narrowest rule your builder can deal with.
2018-09, a new hope...
JDT and m2e have a (hidden) preference to control
the builder’s scheduling rule and let it be null.
Hidden, but available for
testing with the test wizard,
or with typical preference
customization strategy (API,
plugin_customization.ini…)
in your Eclipse-based
package (like JDT-LS).
Try them!
Scheduling rules and parallel builds
All rules conflicting → No parallel builder execution
Current impl does not pass rules to schedule jobs
and use rules at job exec. Some jobs are started for
nothing ( ) and can block other builds.
But could do a bit better
Now you got it
● 1 project build → 1 job
● Throttling with JobGroup
● Scheduled according to dependency graph
● Honoring scheduling rules
GOLDEN RULE: To minimize conflicts and allow
more parallelism, set the narrowest rule your
builder can deal with.
Highlighted cases
● Long build chain vs standalone projet
● Dependency cycles
● 1 project builder uses workspace root as
scheduling rule
Dependency chain vs standalone
project
1 thread
4 threads
p6 is available much much sooner
Some project output available
much sooner
With cycles, sequential
Compute a best sequential order (using “Strongly
connected component”) and apply it
p1,p2,p3,p4,p5,p6
With cycles, parallel
1. Process graph until no node is ready (symptom of cycle)
2. Then process the 1st
waiting node in computed sequential order
3. Then back to regular graph processing.
1 2 3
Workspace root scheduling rule
● For backward compatibility, if any builder uses workspace
root scheduling rule, disable parallel builds (as the
scheduler will use this rule in its thread)
● Anyway, workspace root would conflict with about
everything…
● So most builders currently prevents parallel builds
GOLDEN RULE:
To minimize conflicts and allow more parallelism,
set the narrowest rule your builder can deal with.
Case studies
1. dotnet build builder
2. JavaBuilder (JDT) and MavenBuilder
(m2e)
Case Study #1
6 independent C# projects building with dotnet
build (builder scheduling root == current project)
Sequential build takes 39s
Parallel on 4 threads takes 26s
Actual gain: 33% (cool, but...)
Expected gain: 66%
?
Case study #1 - lesson learned
Most real world operation have bottlenecks (I/O,
network…) making concurrent executions slower.
Sequential
4 threads
But still a major win!
Case study #2: Java (JDT & m2e)
JavaBuilder and MavenBuilder do use default
workspace root scheduling rule by default →
Disable/prevents parallel builds
GOLDEN RULE:
To minimize conflicts and allow more parallelism,
set the narrowest rule your builder can deal with.
Case study #2: Java (JDT & m2e)
Applying the GOLDEN RULE on
JavaBuilder and
MavenBuilder shows that null
might be a good scheduling rule
https://bugs.eclipse.org/bugs/show_bug.cgi?id=531554#c22 . null
is the perfect value to avoid
conflict and enabled parallelism.
Effect of null scheduling rule for
JDT and m2e effect: story #1
Legacy
Scheduling
Rule
null
Scheduling
Rule
Build with 4
threads
Effect of null scheduling rule for
JDT and m2e effect: story #2
Legacy
Scheduling
Rule
null
Scheduling
Rule
Build with 4
threads
Mickael Istria - @mickaelistria CC0 – No rights reserved
And remember GOLDEN RULE:
To minimize conflicts and allow more parallelism,
set the narrowest rule your builder can deal with.
Questions?

More Related Content

PPT
Web assembly overview by Mikhail Sorokovsky
PDF
Menonaktifkan Pesan Notifikasi No Valid Subscription pada Proxmox VE 5.1
PPTX
Belajar Ms. Word, Ms. Excel, Ms. Powerpoint dan Internet.
PDF
CSS Layouting #3 : Box Model
PDF
Insert, Edit, Delete pada VB 2010 dengan DB Mysql dan Crystal Report
DOCX
Soal + jawaban PAT PBO Kelas XI RPL 2021.docx
PPTX
Testing dan implemetasi sistem 2
PPTX
Bootstrap
Web assembly overview by Mikhail Sorokovsky
Menonaktifkan Pesan Notifikasi No Valid Subscription pada Proxmox VE 5.1
Belajar Ms. Word, Ms. Excel, Ms. Powerpoint dan Internet.
CSS Layouting #3 : Box Model
Insert, Edit, Delete pada VB 2010 dengan DB Mysql dan Crystal Report
Soal + jawaban PAT PBO Kelas XI RPL 2021.docx
Testing dan implemetasi sistem 2
Bootstrap

What's hot (20)

PDF
Soal grafis
DOCX
Soal uts/ pts semester genap mapel pbo kelas xi rpl tahun 2021
PPTX
Introduction to DOM
PPSX
Tableau BI
PPT
Email - - Materi Ajar - -
PDF
VISUAL BASIC PRATICAL FILE MSC COMPUTER SCIENCE.pdf
PDF
PostgreSQL
PPT
PDF
304597939 soal-praktek-uas-microsoft-access-2016
PDF
Tutorial Lengkap Cara Membuat Aplikasi Android Sederhana
PDF
[PBO] Pertemuan 2 - Method, String & array
DOCX
Rpp pemrograman dasar kelas 10 semester ganjil
PDF
Modul Membuat Tabel pada HTML
PDF
Asp.net state management
PDF
Web Services PHP Tutorial
PDF
VB.Net-Controls and events
PDF
Modul Praktikum Pemrograman Berorientasi Objek (Chap.7)
PDF
Penggunaan tipe data dan variabel
PDF
Pertemuan 5 list view
PDF
KA1053 Dasar Pemrograman Macro Excel
Soal grafis
Soal uts/ pts semester genap mapel pbo kelas xi rpl tahun 2021
Introduction to DOM
Tableau BI
Email - - Materi Ajar - -
VISUAL BASIC PRATICAL FILE MSC COMPUTER SCIENCE.pdf
PostgreSQL
304597939 soal-praktek-uas-microsoft-access-2016
Tutorial Lengkap Cara Membuat Aplikasi Android Sederhana
[PBO] Pertemuan 2 - Method, String & array
Rpp pemrograman dasar kelas 10 semester ganjil
Modul Membuat Tabel pada HTML
Asp.net state management
Web Services PHP Tutorial
VB.Net-Controls and events
Modul Praktikum Pemrograman Berorientasi Objek (Chap.7)
Penggunaan tipe data dan variabel
Pertemuan 5 list view
KA1053 Dasar Pemrograman Macro Excel
Ad

Similar to Parallel builds in Eclipse IDE workspace - EclispeCon Europe 2018 (20)

ODP
Parallel builds in Eclipse IDE workspace
PPTX
AOT(Ahead Of Time)
PDF
MongoDB Ops Manager + Kubernetes
PDF
What's coming in Airflow 2.0? - NYC Apache Airflow Meetup
PDF
Performant Django - Ara Anjargolian
PPTX
Road to sbt 1.0: Paved with server (2015 Amsterdam)
PDF
Gradle
PDF
Gradle - the Enterprise Automation Tool
PDF
Why Gradle?
PPTX
Decrease build time and application size
PPTX
Instant developer onboarding with self contained repositories
PDF
DDD with Behat
PDF
Esctl in action elastic user group presentation aug 25 2020
PDF
Advanced Node.JS Meetup
PDF
Michal Havryluk: How To Speed Up Android Gradle Builds
PDF
Why you should consider a microframework for your next web project
PDF
Platform Engineering for the Modern Oracle World
PPTX
Road to sbt 1.0 paved with server
PDF
Keeping your build tool updated in a multi repository world
PDF
ICONUK 2015 - Gradle Up!
Parallel builds in Eclipse IDE workspace
AOT(Ahead Of Time)
MongoDB Ops Manager + Kubernetes
What's coming in Airflow 2.0? - NYC Apache Airflow Meetup
Performant Django - Ara Anjargolian
Road to sbt 1.0: Paved with server (2015 Amsterdam)
Gradle
Gradle - the Enterprise Automation Tool
Why Gradle?
Decrease build time and application size
Instant developer onboarding with self contained repositories
DDD with Behat
Esctl in action elastic user group presentation aug 25 2020
Advanced Node.JS Meetup
Michal Havryluk: How To Speed Up Android Gradle Builds
Why you should consider a microframework for your next web project
Platform Engineering for the Modern Oracle World
Road to sbt 1.0 paved with server
Keeping your build tool updated in a multi repository world
ICONUK 2015 - Gradle Up!
Ad

More from Mickael Istria (16)

ODP
Adopting Debug Adapter Protocol in Eclipse IDE: netcoredbg (.NET debugger) ca...
ODP
IDE as a Front-end and Fast time-to-market language support in Eclipse IDE re...
ODP
[EclipseCon France 2017] Language Server Protocol in action
ODP
[EclipseCon France 2017] Eclipse Platform Generic Editor
PDF
EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...
ODP
Making Eclipse IDE better at handling real-life projects @EclipseCon NA 2015
ODP
[EclipseCon NA 2014] Integration tests for RCP made easy with SWTBot and Tycho
ODP
Contribute to Eclipse projects
PDF
A journey with Target Platforms
ODP
Cool stuff in E4 for developers
PDF
Fight your technical debt with Jenkins, Jacoco and Sonar
ODP
What's up GMF Tooling?
ODP
Iterative and-agile-codegen
ODP
Modeling With Eclipse @SoftShake 2011
ODP
Whats new in Eclipse Indigo ? (@DemoCamp Grenoble 2011)
ODP
Sur la route de l'agilité @Mix-it Lyon 2011
Adopting Debug Adapter Protocol in Eclipse IDE: netcoredbg (.NET debugger) ca...
IDE as a Front-end and Fast time-to-market language support in Eclipse IDE re...
[EclipseCon France 2017] Language Server Protocol in action
[EclipseCon France 2017] Eclipse Platform Generic Editor
EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...
Making Eclipse IDE better at handling real-life projects @EclipseCon NA 2015
[EclipseCon NA 2014] Integration tests for RCP made easy with SWTBot and Tycho
Contribute to Eclipse projects
A journey with Target Platforms
Cool stuff in E4 for developers
Fight your technical debt with Jenkins, Jacoco and Sonar
What's up GMF Tooling?
Iterative and-agile-codegen
Modeling With Eclipse @SoftShake 2011
Whats new in Eclipse Indigo ? (@DemoCamp Grenoble 2011)
Sur la route de l'agilité @Mix-it Lyon 2011

Recently uploaded (20)

PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
KodekX | Application Modernization Development
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Modernizing your data center with Dell and AMD
PPTX
Cloud computing and distributed systems.
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Empathic Computing: Creating Shared Understanding
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Approach and Philosophy of On baking technology
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Electronic commerce courselecture one. Pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
Understanding_Digital_Forensics_Presentation.pptx
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Network Security Unit 5.pdf for BCA BBA.
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
KodekX | Application Modernization Development
20250228 LYD VKU AI Blended-Learning.pptx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
Modernizing your data center with Dell and AMD
Cloud computing and distributed systems.
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Unlocking AI with Model Context Protocol (MCP)
NewMind AI Monthly Chronicles - July 2025
Empathic Computing: Creating Shared Understanding
NewMind AI Weekly Chronicles - August'25 Week I
Approach and Philosophy of On baking technology
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
The Rise and Fall of 3GPP – Time for a Sabbatical?
Electronic commerce courselecture one. Pdf
The AUB Centre for AI in Media Proposal.docx
Understanding_Digital_Forensics_Presentation.pptx

Parallel builds in Eclipse IDE workspace - EclispeCon Europe 2018

  • 1. Parallel builds in Eclipse Workspaces Value, making-of and optimal usages Mickael Istria - @mickaelistria CC0 – No rights reserved
  • 2. Demo Tool For the demo/talk we use https://github.com/mickaelistria/eclipse-ide-parallel-builds-demo which – Defines the WaitBuilder – Allows to generate build Gantt chart – Allows to generate signature of build output (compare output) – Allows to control scheduling rule for JDT and M2E builders
  • 3. Demo scenario 6 projects with WaitBuilder waiting for some time (Thread.sleep()) – Projects deps directly configured in .project – Builder duration configured in waitBuilder.properties (default 1000ms) – Builder schedulingRule configured in waitBuilder.properties (default current project) can be set to workspace root or some other project.
  • 4. The basics: legacy (pre-Photon) Builds can only be sequential
  • 5. The basics: Paralleling ● Create 1 job per project build ● Throttle on limited amount of threads using JobGroup API ● Preference used by good old Workspace.build() API ● Default in Photon and 2018-09 is disabled (nbThreads == 1)
  • 6. The basics: Parallelized No dependencies, isolated scheduling rules
  • 7. The basics: Benefits ● Shorter full time to completion (& less energy consumed) ● Faster availability of each project – A long project or chain of projects build doesn’t block other projects for too long – If you have handlers on project builds completion, they’re called way earlier ● Applies to any workspace-build solutions, including non- IDE offerings like JDT-LS
  • 8. Relying on jobs→Usable progress View
  • 9. Dependency Graph: no parallel Dependency graph is computed, and turned into a sequence (via topological sort) p3,p1,p2,p5,p4,p6
  • 10. Dependency graph: Parallel Graph is used directly and jobs are scheduled for builds as soon as all ancestors are built
  • 11. About Scheduling Rules ● 2 operations using conflicting scheduling rules rule1.isConflicting(rule2) can NOT run in parallel ● Scheduling rules are usually Resource Path which conflict when one path is a parent of the other: – a/b and a/b/c are conflicting and those scheduling rules prevent jobs for running in parallel – a/b and a/c are not conflicting and those schduling rules can allow jobs to run in parallel ● Builders are expected to implement IncrementalProjectBuilder.getRule(…) Default is workspace.getRoot() Here, p1 build rule conflicts with all other build rules → p1 won’t build in // of other projects
  • 12. Scheduling rules don’t change sequential scheduling No jobs → no issue about conflicting scheduling rules
  • 13. So why scheduling rules on builders? “Safety”: Scheduling rule are here to prevent some other thread to change critical content while builder is running. The scheduling rule defines what must NOT be changed externally while builder is running. GOLDEN RULE: To minimize conflicts and allow more parallelism, set the narrowest rule your builder can deal with.
  • 14. (Bad) State of art Many builders do not specify a scheduling rule (defaulting to workspace root, conflicting with every workspace operation) → Building a project locks the whole workspace! Builder uses root as SR, conflicts with whole WS Change file in another unrelated Project + Save
  • 15. (Bad) examples ● JDT Builder https://bugs.eclipse.org/bugs/show_bug.cgi?id=531554 ● M2E Builder https://bugs.eclipse.org/bugs/show_bug.cgi?id=538461 ● PDE Builder https://bugs.eclipse.org/bugs/show_bug.cgi?id=531555 … Use default workspace scheduling rule, preventing parallel execution and blocking user actions in unrelated files!
  • 16. With finer scheduling rule... More specific scheduling rule, only necessary content is locked by builder. For example, just using getProject() as scheduling rule can often be enough. Builder uses project as SR, conflicts with only project content Change file in another unrelated Project + Save File just saved!
  • 17. GOLDEN RULE: To minimize conflicts and allow more parallelism, set the narrowest rule your builder can deal with.
  • 18. 2018-09, a new hope... JDT and m2e have a (hidden) preference to control the builder’s scheduling rule and let it be null. Hidden, but available for testing with the test wizard, or with typical preference customization strategy (API, plugin_customization.ini…) in your Eclipse-based package (like JDT-LS). Try them!
  • 19. Scheduling rules and parallel builds All rules conflicting → No parallel builder execution
  • 20. Current impl does not pass rules to schedule jobs and use rules at job exec. Some jobs are started for nothing ( ) and can block other builds. But could do a bit better
  • 21. Now you got it ● 1 project build → 1 job ● Throttling with JobGroup ● Scheduled according to dependency graph ● Honoring scheduling rules GOLDEN RULE: To minimize conflicts and allow more parallelism, set the narrowest rule your builder can deal with.
  • 22. Highlighted cases ● Long build chain vs standalone projet ● Dependency cycles ● 1 project builder uses workspace root as scheduling rule
  • 23. Dependency chain vs standalone project 1 thread 4 threads p6 is available much much sooner Some project output available much sooner
  • 24. With cycles, sequential Compute a best sequential order (using “Strongly connected component”) and apply it p1,p2,p3,p4,p5,p6
  • 25. With cycles, parallel 1. Process graph until no node is ready (symptom of cycle) 2. Then process the 1st waiting node in computed sequential order 3. Then back to regular graph processing. 1 2 3
  • 26. Workspace root scheduling rule ● For backward compatibility, if any builder uses workspace root scheduling rule, disable parallel builds (as the scheduler will use this rule in its thread) ● Anyway, workspace root would conflict with about everything… ● So most builders currently prevents parallel builds
  • 27. GOLDEN RULE: To minimize conflicts and allow more parallelism, set the narrowest rule your builder can deal with.
  • 28. Case studies 1. dotnet build builder 2. JavaBuilder (JDT) and MavenBuilder (m2e)
  • 29. Case Study #1 6 independent C# projects building with dotnet build (builder scheduling root == current project) Sequential build takes 39s Parallel on 4 threads takes 26s Actual gain: 33% (cool, but...) Expected gain: 66% ?
  • 30. Case study #1 - lesson learned Most real world operation have bottlenecks (I/O, network…) making concurrent executions slower. Sequential 4 threads But still a major win!
  • 31. Case study #2: Java (JDT & m2e) JavaBuilder and MavenBuilder do use default workspace root scheduling rule by default → Disable/prevents parallel builds
  • 32. GOLDEN RULE: To minimize conflicts and allow more parallelism, set the narrowest rule your builder can deal with.
  • 33. Case study #2: Java (JDT & m2e) Applying the GOLDEN RULE on JavaBuilder and MavenBuilder shows that null might be a good scheduling rule https://bugs.eclipse.org/bugs/show_bug.cgi?id=531554#c22 . null is the perfect value to avoid conflict and enabled parallelism.
  • 34. Effect of null scheduling rule for JDT and m2e effect: story #1 Legacy Scheduling Rule null Scheduling Rule Build with 4 threads
  • 35. Effect of null scheduling rule for JDT and m2e effect: story #2 Legacy Scheduling Rule null Scheduling Rule Build with 4 threads
  • 36. Mickael Istria - @mickaelistria CC0 – No rights reserved And remember GOLDEN RULE: To minimize conflicts and allow more parallelism, set the narrowest rule your builder can deal with. Questions?

Editor's Notes

  • #2: Pre-reqs: Eclipse IDE workspace with org.eclipsecon.editor in it open Build Jobs == 1 Project Explorer + (empty) editor area + progress view JDT tweaked to enable graphical report