SlideShare a Scribd company logo
1 of 54
Download to read offline
Identifying Hotspots in
Software Build Processes

Shane
McIntosh

Bram
Adams

Meiyappan
Nagappan

Ahmed E.
Hassan

@shane_mcintosh
shanemcintosh@acm.org
What is a build system?
Source
code

!2
What is a build system?
Source
code

Deliverable

!2
Build systems describe how sources are
translated into deliverables
.c

.o

.cc

.o

.exe

.tex

.dvi

.pdf

.a
.deb

!3
All builds are equal…
(1)
Think

(2)
Edit
The
developer’s
work cycle

(4)
Test

(3)
Build
!4
…But some builds are more
equal than others

“

http://xkcd.com/303/

Why is the gtk build so abysmally slow?
This hinders our ability to run gtk bots
and keep the gtk build green. :(

”

!5
Refactoring can improve
build performance
deliverable1
del1.o
del1.c

deliverable2
library.a

util1.o

util2.o

util1.c

del2.o
del2.c

util2.c

!6
Refactoring can improve
build performance
deliverable1
del1.o
del1.c

deliverable2
library.a

util1.o

util2.o

util1.c

del2.o
del2.c

util2.c

!6
Refactoring can improve
build performance
deliverable1
del1.o
del1.c

deliverable2
library.a

util1.o

util2.o

util1.c

del2.o
del2.c

util2.c

!6
Refactoring can improve
build performance
deliverable1
del1.o
del1.c

deliverable2
library.a

util1.o

util2.o

util1.c

del2.o
del2.c

util2.c

!6
Refactoring can improve
build performance
deliverable1
del1.o
del1.c

deliverable2
library.a

util1.o

util2.o

util1.c

del2.o
del2.c

util2.c

!6
Refactoring can improve
build performance
deliverable1
deliverable2
Before refactoring:!
4 commands! del2.o
del1.o
library.a
triggered
del1.c
del2.c
util1.o
util2.o
util1.c

util2.c

!6
Refactoring can improve
build performance
deliverable1
del1.o
del1.c

deliverable2
library.a

util1.o

util2.o

util1.c

del2.o
del2.c

util2.c

!6
Refactoring can improve
build performance
deliverable1

deliverable2

del1.o

util1.o

util2.o

del2.o

del1.c

util1.c

util2.c

del2.c

!7
Refactoring can improve
build performance
deliverable1

deliverable2

del1.o

util1.o

util2.o

del2.o

del1.c

util1.c

util2.c

del2.c

!7
Refactoring can improve
build performance
deliverable1

deliverable2

del1.o

util1.o

util2.o

del2.o

del1.c

util1.c

util2.c

del2.c

!7
Refactoring can improve
build performance
deliverable1

deliverable2

del1.o

util1.o

util2.o

del2.o

del1.c

util1.c

util2.c

del2.c

!7
Refactoring can improve
build performance
deliverable1
deliverable2
After refactoring:!
2 commands! del2.o
del1.o
util1.o
util2.o
triggered
del1.c
del2.c
util1.c
util2.c

!7
…But where should we focus
refactoring effort?
Files that rebuild
the slowest?

!8
…But where should we focus
refactoring effort?
Files that rebuild
the slowest?

…but they may
only rarely change!
!8
…But where should we focus
refactoring effort?
Files that rebuild
the slowest?

Files that change
the most often?

…but they may
only rarely change!
!8
…But where should we focus
refactoring effort?
Files that rebuild
the slowest?

Files that change
the most often?

…but they may
only rarely change!

…but they may
already be optimal!
!8
…But where should we focus
refactoring effort?
Files that rebuild
the slowest?

Files that change
the most:often?
ots

…but they may
only rarely change!

…but they may
already be optimal!

otsp
h
ft e n
uild
ge o
on b
han
cus
nd c
Fo
ly a
slow
build
at re
es th
il

F

!8
(1)
Dependency
Graph
Construction

Dep. Graph

(2)
Dependency
Graph
Analysis

Graph
analysis
results

Version
Control
System

(3)
Build
Hotspot
Detection

File Churn

Hotspot detection approach

Build Activity

Quadrant Plot

!9
MAKAO tool extracts build
dependency graphs
(1)
Dependency
Graph
Construction
(2)
Dependency
Graph
Analysis

(3)
Build
Hotspot
Detection

Design recovery and maintenance of build systems
B. Adams, Herman Tromp, Kris De Schutter, Wolfgang De Meuter	

[ICSM 2007]
!10
The cost of traversing an edge is
derived by timing its build command
(1)
Dependency
Graph
Construction
(2)
Dependency
Graph
Analysis

(3)
Build
Hotspot
Detection

Median of 10
repetitions
!11
Mining frequently changing files
from version control
(1)
Dependency
Graph
Construction

Terminal

$ git clone …
…
$ git checkout <some_tag>
…
$ git log --oneline <some_file>

!12

(2)
Dependency
Graph
Analysis

(3)
Build
Hotspot
Detection
Quadrant plots highlight build
hotspots
Number of changes

(1)
Dependency
Graph
Construction
(2)
Dependency
Graph
Analysis

(3)
Build
Hotspot
Detection

Rebuild cost
!13
Quadrant plots highlight build
hotspots
Number of changes

(1)
Dependency
Graph
Construction
(2)
Dependency
Graph
Analysis

(3)
Build
Hotspot
Detection

Rebuild cost
!13
Quadrant plots highlight build
hotspots
Number of changes

(1)
Dependency
Graph
Construction
(2)
Dependency
Graph
Analysis

(3)
Build
Hotspot
Detection

Rebuild cost
!13
Number of changes

Quadrant plots highlight build
hotspots
factor
Re
e first!
thes

(1)
Dependency
Graph
Construction
(2)
Dependency
Graph
Analysis

(3)
Build
Hotspot
Detection

Rebuild cost
!13
Open source case studies!
Thresholds
!

Rebuild cost
90 seconds

Number of changes
!
Median
!

!14
Build dependency graph
properties
# Nodes
# Edges

38,102

2,752,225

0

750,000

1,500,000

2,250,000

3,000,000

3,375
121,710

5,131
60,170

0

35,000

70,000

105,000

140,000

!15
1.00

●
●
●

●
● ●
●
●

Number of changes
(Normalized)
Normalized File Churn

●
●

●

●
●

0.25

●
●
●
●
●
●
●
●

●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●

●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●

●

●
●
●
●
●
●
●

●

●

●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ● ●
●
●
●
●
●
●●
●
●
●
●
● ●
●
●
●
●● ● ●
●
●
●
●
●● ● ●
●
●
●
●
●
● ●
●
●● ●
● ●
●
●
●
●
●
● ●● ●
● ●
●
●● ●

●
●

●

●
●

●

●
●
●

●

●

●
●
●
●
●
●
●

●
●

●

●

●

●
●
●
●
●
●
●
●
●

●
●

65 hotspots!
(7% of
source files)
●

●

●
●

0.75

0.50

●
●
●
●
●
●●
●
●
●
●

●

Main culprits

●

●

●

●

●
●
●
●

●

●●
●●

●
●

●
●
●

●
●
●

●

●
●
●
●
●●
●
●
● ●
●
●
●
●

●

●
●●
●
●
●●● ●
●
●
●●
●

●
●●

●●
●
●
●

● ● ●
●●

●

● ●● ●
●

●

●

●

●

●
●
●

●
●
●

glib/glib.h
glib/glib-object.h

●
●

●

●

●●
●●
●

●

●●
●●
●

●

●●
●
●

● ●●
●
●

●
●
●

● ●●
●

●
●
●

●
●

●
●

●● ●
●
● ●
●

●●
●
●

●●
●

●
●
●

●● ● ● ●
●● ●
●
●

●
●

●●
●●
●
●

●
●
●
●

●● ● ●
●● ●
●
●

●
●
●

● ●● ●
●
● ● ●
●

●●
●
●
●

●●●●●
●● ●
●
●
●

●
●

●
●
●
●

●● ● ●
●● ●
●
●
●

●

0

●

●

●
●

●

●

●
●

●
●

●

●●

●

●

●

●

● ●
●

●●
●
●
●

●●
● ●

●

● ●●
● ●
●
●

●
●
●
●

50

Max: 148 seconds

●

●●●
●●
●
●
●

●

●

● ●●

●

Build Time

●

●
●

● ●

100

150

Rebuild cost
(seconds)
!16
1.00

●

●

●
●
●
●●

●

●
●

Number of changes
(Normalized)
Normalized File Churn

●
●
●
●
●
●

0.75

0.50

0.25

●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●● ● ●
●
●
●
● ●●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●●
●
●
●●●
●
●●
●●
●
●
●
●
●
●
●
●
● ●● ●
●
●
● ● ●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●●
●
●●
●
●
● ●
● ● ●● ●
●
●
●
●
●
●
●
●
●
● ●● ● ●
●
●
●
●
● ●
●
●
●
●
●
●
● ● ●
●
● ●
●
●
●
● ● ●
●
●
●
● ●●● ●
●●
●
●●●●
●
●
●
●
●
●
●
●
●●●
●
●
●●
●
●● ●●● ● ●
●
●
● ● ●
●
● ●
●
● ●●
●
● ●● ●●
●
● ●●
●
● ●●
●●
●
●
●
●
●
●●● ●● ●
●
●
●
●● ●
●
●
●
●● ● ●●● ●
●
●
●
●
●
●● ●
●●
●
●
●● ● ●
●●
●
●
●● ● ●
●
●
●●
●● ● ●
●●
●
●
●● ● ●
●●
●
●● ●
● ●●
●
●
●
●
●
●● ● ● ●● ● ●●
●● ● ● ● ●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
● ●● ●●
●●
●
●● ●
● ●
●
●
● ●
●●●
●● ●
●
●
●●
●●
●
● ●
●●
● ● ●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
● ●●
●
●
●
●
●
● ●
● ●
●
●
● ● ●●
●
● ●
●
●
●
●
●
●
●●● ●
●● ●
●
●
●●
●● ● ●
●●
●
●● ●
●●
●●
●● ● ●
●
●
● ●
●
●●
●●
●●
●
●
●● ●
●●
●
●
●
●● ● ● ●
●● ●
● ●●
●●
●●● ●●
● ●●●
●●
● ●
●
●
●●
●●
●●
●
●
● ●● ●
●●
●●
●
●

27 hotspots!
(2% of source
files)

●

●

●
●

●

●
●

●

●

●

●

●

●

●●

●

●

Main culprits

●
●

●

●

●

●

●
●

●
●

●

●

●

●

postgres.h
access/htup.h
access/genam.h
access/xact.h
utils/builtins.h

● ●
●
●

●

●

●

●

●
●

●

● ●
●

●
●
●
●

●

● ●
●

●

●

●
●

●
●
●

●
●

●

●
●

●

●●● ●
●●
●
●
●●● ●
●●●
● ●
●

●

●● ●
● ●
●
●

●

●●
●●
●
●
●●
●●
●●
●
●

●
●

●
●

●

●●

●
●

0

Max: 191 seconds

●

50

100

Build Time (s)

150

200

Rebuild cost
(seconds)
!17
1.00

●

●

●

●
●
●
●

Number of changes
(Normalized)
Normalized File Churn

●

0.75

0.50

0.25

●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●● ●
●
●
●
●
●
●
●
●
●
● ● ●●
●
●
●● ●
●●
●
●
●
●
●● ● ●
● ●
●● ●
●
●
●
●
●●
●●
●● ●
●●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●● ●
●
● ● ● ● ● ●● ●
● ●●●
●
●
●● ● ●● ● ●
●● ● ●
● ●
●
●●●● ●● ●
●●●●
●●
●●
●●
● ●
●●● ●●● ●
●●● ●
●●
●
●
●
●●●● ●● ● ●
●●●● ●
●● ●
●● ●
●●
●

●
●

●●●●●●●● ●
●●● ●●●●
●●● ● ●
● ●● ●
●●
●●

●

732 hotspots!
(8% of source files)

●

●

●

●

●
●

●

●

●

●

●

●

●

●

●
●
●

●

●
●

●

●

●
●

●

● ●
●

●

●
●

●

●●

● ●

● ●●
● ●
●

●
●
●

● ●
● ●
●
●

●
●

●

●●

●

●● ●
●●
●

●

●
●●
●

●

●
●

●

●
● ●

●

●

●

●

●

●●
● ●
●

●

●

●

●

● ●●
●

●● ● ●●● ● ●
●● ●● ● ●
●● ●●
●●
●●
●

●
●

●
●

●

●

●

●●
●
●

●● ● ●● ●
●● ● ●
●● ●
●● ●
●

●

●

● ● ●

●
●

● ●

●
●
●

● ●

●
●
●
●
●
● ●●
●
●
●
●
●
●

●
●

● ●

●● ●
●

●
●

●
●

●
●

●

●
●

●

●
●
●

●●
●

●

●

●
●
●

●

●

●

Main culprits
tmtm

●

●
●●
●
●
●●
● ●
●
●●
●
●●
●●
●
●● ●

●
●

●
●

●

●

●

●●
●
●●
● ●
●
● ●
●
● ●●
●
● ● ● ●
● ●
● ●● ●
● ●
●
●
●
●● ● ●
●
●● ● ●
●
●●
●
●●● ● ●
●●
●●
●●
●
● ●● ●
●
●
●●● ● ● ●
●● ● ●
●● ●
●
●

●
●
●

●
●

●

●
●

●

●

● ●●
●

●●● ● ●● ● ●
●● ● ● ●
●●
●●
●
●
●

●
●
●

●

●

●●●●●● ● ● ● ●
●● ● ●● ●
●
●
● ●●
●
●

●

●

●

●

●
●

●

●

●

●●

●●●● ●● ● ●
●●
●●
●●
●
●
●

●
●
●
●

●

● ●●
●

●
●

●

●

●●●●
●●
● ●
●

●●●●●●●●●● ● ●
●●● ● ●●●● ● ●
● ●●● ●●●●
● ●● ● ●
●●
●

●●● ●●●
● ●● ● ●●
● ●●
●●
● ●
●

●
●

● ●●
● ●
●
●
●
●

●●●●●●●● ● ● ●
●●●●●● ●● ●
●●● ●● ●●
●●●● ● ●
●●● ●
●●

●●● ● ● ●●
●●● ● ● ●
●●● ●
●●●
●
●

●

●
●

●
●
●

●

●

●

High hotspot!
concentration
qtbase/…/corelib
qtxmlpatterns

●●●●●● ● ●
●●●● ●
●●●●
● ●●●
●●●
●

0

2000

4000

Build Time (s)

6000

8000

Max: 2hrs 19min

Rebuild cost
(seconds)
!18
General trends
Transitive property of build hotspots
1

2

...

n-1

n

hot.o

hot.c

!19
General trends
Transitive property of build hotspots
1

2

...

n-1

n

hot.o

hot.c

!19
General trends
Transitive property of build hotspots
1

2

...

n-1

n

hot.o

hot.c

x.h
!19
General trends
Transitive property of build hotspots
1

2

...

n-1

n

hot.o

hot.c

x.h
!19
1

2

...

n-1

n

General trends
hot.o

Transitive property of build hotspots
hot.c

x.h

!20
1

2

...

n-1

n

General trends
hot.o

Transitive property of build hotspots
hot.c

x.h

!20
1

2

...

n-1

n

General trends
hot.o

Transitive property of build hotspots
hot.c

x.h

hub.h

!20
1

2

...

n-1

n

General trends
hot.o

Transitive property of build hotspots
hot.c

a.h

b.h

x.h

y.h

z.h

hub.h

!20
1

2

...

n-1

n

General trends
hot.o

Transitive property of build hotspots
hot.c

a.h

b.h

x.h

y.h

z.h

hub.h

!20
1

2

...

n-1

n

General trends
hot.o

Transitive property of build hotspots
hot.c

a.h

b.h

x.h

y.h

z.h

hub.h

!20
1

2

...

n-1

n

General trends
hot.o

Transitive property of build hotspots
hot.c

a.h

b.h

x.h

y.h

z.h

hub.h

Limit internal use of “header file hubs”
as much as possible!
!20
@shane_mcintosh
shanemcintosh@acm.org

More Related Content

What's hot

Collecting and Leveraging a Benchmark of Build System Clones to Aid in Qualit...
Collecting and Leveraging a Benchmark of Build System Clones to Aid in Qualit...Collecting and Leveraging a Benchmark of Build System Clones to Aid in Qualit...
Collecting and Leveraging a Benchmark of Build System Clones to Aid in Qualit...Shane McIntosh
 
Migrating from Subversion to Git and GitHub
Migrating from Subversion to Git and GitHubMigrating from Subversion to Git and GitHub
Migrating from Subversion to Git and GitHubMatthew McCullough
 
Git Graphs, Hashes, and Compression, Oh My
Git Graphs, Hashes, and Compression, Oh MyGit Graphs, Hashes, and Compression, Oh My
Git Graphs, Hashes, and Compression, Oh MyMatthew McCullough
 
Git and GitHub at the San Francisco JUG
 Git and GitHub at the San Francisco JUG Git and GitHub at the San Francisco JUG
Git and GitHub at the San Francisco JUGMatthew McCullough
 
DO YOU WANT TO USE A VCS
DO YOU WANT TO USE A VCSDO YOU WANT TO USE A VCS
DO YOU WANT TO USE A VCSSeongJae Park
 
CI/CD on Android project via Jenkins Pipeline
CI/CD on Android project via Jenkins PipelineCI/CD on Android project via Jenkins Pipeline
CI/CD on Android project via Jenkins PipelineVeaceslav Gaidarji
 
An Empirical Study of Unspecified Dependencies in Make-Based Build Systems
An Empirical Study of Unspecified Dependencies in Make-Based Build SystemsAn Empirical Study of Unspecified Dependencies in Make-Based Build Systems
An Empirical Study of Unspecified Dependencies in Make-Based Build Systemscorpaulbezemer
 
DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...
DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...
DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...Felipe Prado
 
Semi-Automatic Code Cleanup with Clang-Tidy
Semi-Automatic Code Cleanup with Clang-TidySemi-Automatic Code Cleanup with Clang-Tidy
Semi-Automatic Code Cleanup with Clang-TidyMarkus Werle
 
Git inter-snapshot public
Git  inter-snapshot publicGit  inter-snapshot public
Git inter-snapshot publicSeongJae Park
 
Golang Project Layout and Practice
Golang Project Layout and PracticeGolang Project Layout and Practice
Golang Project Layout and PracticeBo-Yi Wu
 
Drone 1.0 Feature
Drone 1.0 FeatureDrone 1.0 Feature
Drone 1.0 FeatureBo-Yi Wu
 
CI from scratch with Jenkins (EN)
CI from scratch with Jenkins (EN)CI from scratch with Jenkins (EN)
CI from scratch with Jenkins (EN)Borislav Traykov
 
Improving code quality with continuous integration (PHPBenelux Conference 2011)
Improving code quality with continuous integration (PHPBenelux Conference 2011)Improving code quality with continuous integration (PHPBenelux Conference 2011)
Improving code quality with continuous integration (PHPBenelux Conference 2011)Martin de Keijzer
 
Drone CI/CD Platform
Drone CI/CD PlatformDrone CI/CD Platform
Drone CI/CD PlatformBo-Yi Wu
 
new ifnet(9) KPI for FreeBSD network stack
new ifnet(9) KPI for FreeBSD network stacknew ifnet(9) KPI for FreeBSD network stack
new ifnet(9) KPI for FreeBSD network stackGleb Smirnoff
 
Team Development and Release Management
Team Development and Release ManagementTeam Development and Release Management
Team Development and Release ManagementSalesforce Partners
 
Archeology for Entertainment, or Checking Microsoft Word 1.1a with PVS-Studio
Archeology for Entertainment, or Checking Microsoft Word 1.1a with PVS-StudioArcheology for Entertainment, or Checking Microsoft Word 1.1a with PVS-Studio
Archeology for Entertainment, or Checking Microsoft Word 1.1a with PVS-StudioAndrey Karpov
 

What's hot (20)

Collecting and Leveraging a Benchmark of Build System Clones to Aid in Qualit...
Collecting and Leveraging a Benchmark of Build System Clones to Aid in Qualit...Collecting and Leveraging a Benchmark of Build System Clones to Aid in Qualit...
Collecting and Leveraging a Benchmark of Build System Clones to Aid in Qualit...
 
Migrating from Subversion to Git and GitHub
Migrating from Subversion to Git and GitHubMigrating from Subversion to Git and GitHub
Migrating from Subversion to Git and GitHub
 
Git Graphs, Hashes, and Compression, Oh My
Git Graphs, Hashes, and Compression, Oh MyGit Graphs, Hashes, and Compression, Oh My
Git Graphs, Hashes, and Compression, Oh My
 
Git and GitHub at the San Francisco JUG
 Git and GitHub at the San Francisco JUG Git and GitHub at the San Francisco JUG
Git and GitHub at the San Francisco JUG
 
DO YOU WANT TO USE A VCS
DO YOU WANT TO USE A VCSDO YOU WANT TO USE A VCS
DO YOU WANT TO USE A VCS
 
CI/CD on Android project via Jenkins Pipeline
CI/CD on Android project via Jenkins PipelineCI/CD on Android project via Jenkins Pipeline
CI/CD on Android project via Jenkins Pipeline
 
An Empirical Study of Unspecified Dependencies in Make-Based Build Systems
An Empirical Study of Unspecified Dependencies in Make-Based Build SystemsAn Empirical Study of Unspecified Dependencies in Make-Based Build Systems
An Empirical Study of Unspecified Dependencies in Make-Based Build Systems
 
DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...
DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...
DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...
 
Semi-Automatic Code Cleanup with Clang-Tidy
Semi-Automatic Code Cleanup with Clang-TidySemi-Automatic Code Cleanup with Clang-Tidy
Semi-Automatic Code Cleanup with Clang-Tidy
 
Git inter-snapshot public
Git  inter-snapshot publicGit  inter-snapshot public
Git inter-snapshot public
 
Golang Project Layout and Practice
Golang Project Layout and PracticeGolang Project Layout and Practice
Golang Project Layout and Practice
 
Drone 1.0 Feature
Drone 1.0 FeatureDrone 1.0 Feature
Drone 1.0 Feature
 
Rest, sockets em golang
Rest, sockets em golangRest, sockets em golang
Rest, sockets em golang
 
CI from scratch with Jenkins (EN)
CI from scratch with Jenkins (EN)CI from scratch with Jenkins (EN)
CI from scratch with Jenkins (EN)
 
Improving code quality with continuous integration (PHPBenelux Conference 2011)
Improving code quality with continuous integration (PHPBenelux Conference 2011)Improving code quality with continuous integration (PHPBenelux Conference 2011)
Improving code quality with continuous integration (PHPBenelux Conference 2011)
 
Drone CI/CD Platform
Drone CI/CD PlatformDrone CI/CD Platform
Drone CI/CD Platform
 
groovy & grails - lecture 9
groovy & grails - lecture 9groovy & grails - lecture 9
groovy & grails - lecture 9
 
new ifnet(9) KPI for FreeBSD network stack
new ifnet(9) KPI for FreeBSD network stacknew ifnet(9) KPI for FreeBSD network stack
new ifnet(9) KPI for FreeBSD network stack
 
Team Development and Release Management
Team Development and Release ManagementTeam Development and Release Management
Team Development and Release Management
 
Archeology for Entertainment, or Checking Microsoft Word 1.1a with PVS-Studio
Archeology for Entertainment, or Checking Microsoft Word 1.1a with PVS-StudioArcheology for Entertainment, or Checking Microsoft Word 1.1a with PVS-Studio
Archeology for Entertainment, or Checking Microsoft Word 1.1a with PVS-Studio
 

Viewers also liked

UM ESTUDO EMPÍRICO DO USO DA COMUNICAÇÃO PARA CARACTERIZAR A OCORRÊNCIA DE DE...
UM ESTUDO EMPÍRICO DO USO DA COMUNICAÇÃO PARA CARACTERIZAR A OCORRÊNCIA DE DE...UM ESTUDO EMPÍRICO DO USO DA COMUNICAÇÃO PARA CARACTERIZAR A OCORRÊNCIA DE DE...
UM ESTUDO EMPÍRICO DO USO DA COMUNICAÇÃO PARA CARACTERIZAR A OCORRÊNCIA DE DE...Igor Wiese
 
Orchestrating Change: An Artistic Representation of Software Evolution
Orchestrating Change: An Artistic Representation of Software EvolutionOrchestrating Change: An Artistic Representation of Software Evolution
Orchestrating Change: An Artistic Representation of Software EvolutionShane McIntosh
 
SOCIAL METRICS INCLUDED IN PREDICTION MODELS ON SOFTWARE ENGINEERING: A MAPPI...
SOCIAL METRICS INCLUDED IN PREDICTION MODELS ON SOFTWARE ENGINEERING: A MAPPI...SOCIAL METRICS INCLUDED IN PREDICTION MODELS ON SOFTWARE ENGINEERING: A MAPPI...
SOCIAL METRICS INCLUDED IN PREDICTION MODELS ON SOFTWARE ENGINEERING: A MAPPI...Igor Wiese
 
Unicode - What you need to know
Unicode - What you need to knowUnicode - What you need to know
Unicode - What you need to knowKeheliya Gallaba
 
Module System in Standard ML
Module System in Standard MLModule System in Standard ML
Module System in Standard MLKeheliya Gallaba
 
Icse2011 build maintenance
Icse2011 build maintenanceIcse2011 build maintenance
Icse2011 build maintenanceShane McIntosh
 
USING STRUCTURAL HOLES METRICS FROM COMMUNICATION NETWORKS TO PREDICT CHANGE ...
USING STRUCTURAL HOLES METRICS FROM COMMUNICATION NETWORKS TO PREDICT CHANGE ...USING STRUCTURAL HOLES METRICS FROM COMMUNICATION NETWORKS TO PREDICT CHANGE ...
USING STRUCTURAL HOLES METRICS FROM COMMUNICATION NETWORKS TO PREDICT CHANGE ...Igor Wiese
 
O que é BIG DATA e como pode influenciar nossas vidas
O que é BIG DATA e como pode influenciar nossas vidasO que é BIG DATA e como pode influenciar nossas vidas
O que é BIG DATA e como pode influenciar nossas vidasElaine Naomi
 

Viewers also liked (10)

UM ESTUDO EMPÍRICO DO USO DA COMUNICAÇÃO PARA CARACTERIZAR A OCORRÊNCIA DE DE...
UM ESTUDO EMPÍRICO DO USO DA COMUNICAÇÃO PARA CARACTERIZAR A OCORRÊNCIA DE DE...UM ESTUDO EMPÍRICO DO USO DA COMUNICAÇÃO PARA CARACTERIZAR A OCORRÊNCIA DE DE...
UM ESTUDO EMPÍRICO DO USO DA COMUNICAÇÃO PARA CARACTERIZAR A OCORRÊNCIA DE DE...
 
Orchestrating Change: An Artistic Representation of Software Evolution
Orchestrating Change: An Artistic Representation of Software EvolutionOrchestrating Change: An Artistic Representation of Software Evolution
Orchestrating Change: An Artistic Representation of Software Evolution
 
SOCIAL METRICS INCLUDED IN PREDICTION MODELS ON SOFTWARE ENGINEERING: A MAPPI...
SOCIAL METRICS INCLUDED IN PREDICTION MODELS ON SOFTWARE ENGINEERING: A MAPPI...SOCIAL METRICS INCLUDED IN PREDICTION MODELS ON SOFTWARE ENGINEERING: A MAPPI...
SOCIAL METRICS INCLUDED IN PREDICTION MODELS ON SOFTWARE ENGINEERING: A MAPPI...
 
Unicode - What you need to know
Unicode - What you need to knowUnicode - What you need to know
Unicode - What you need to know
 
Module System in Standard ML
Module System in Standard MLModule System in Standard ML
Module System in Standard ML
 
Icse2011 build maintenance
Icse2011 build maintenanceIcse2011 build maintenance
Icse2011 build maintenance
 
USING STRUCTURAL HOLES METRICS FROM COMMUNICATION NETWORKS TO PREDICT CHANGE ...
USING STRUCTURAL HOLES METRICS FROM COMMUNICATION NETWORKS TO PREDICT CHANGE ...USING STRUCTURAL HOLES METRICS FROM COMMUNICATION NETWORKS TO PREDICT CHANGE ...
USING STRUCTURAL HOLES METRICS FROM COMMUNICATION NETWORKS TO PREDICT CHANGE ...
 
Qt Apresentação
Qt ApresentaçãoQt Apresentação
Qt Apresentação
 
Sonar Metrics
Sonar MetricsSonar Metrics
Sonar Metrics
 
O que é BIG DATA e como pode influenciar nossas vidas
O que é BIG DATA e como pode influenciar nossas vidasO que é BIG DATA e como pode influenciar nossas vidas
O que é BIG DATA e como pode influenciar nossas vidas
 

Similar to Identifying Hotspots in Software Build Processes

[db tech showcase Tokyo 2017] A11: SQLite - The most used yet least appreciat...
[db tech showcase Tokyo 2017] A11: SQLite - The most used yet least appreciat...[db tech showcase Tokyo 2017] A11: SQLite - The most used yet least appreciat...
[db tech showcase Tokyo 2017] A11: SQLite - The most used yet least appreciat...Insight Technology, Inc.
 
Digging for Android Kernel Bugs
Digging for Android Kernel BugsDigging for Android Kernel Bugs
Digging for Android Kernel BugsJiahong Fang
 
Rainbow Over the Windows: More Colors Than You Could Expect
Rainbow Over the Windows: More Colors Than You Could ExpectRainbow Over the Windows: More Colors Than You Could Expect
Rainbow Over the Windows: More Colors Than You Could ExpectPeter Hlavaty
 
Road to sbt 1.0: Paved with server (2015 Amsterdam)
Road to sbt 1.0: Paved with server (2015 Amsterdam)Road to sbt 1.0: Paved with server (2015 Amsterdam)
Road to sbt 1.0: Paved with server (2015 Amsterdam)Eugene Yokota
 
TechTalk5-WhatDoesItTakeToRunLLVMBuildbots.pdf
TechTalk5-WhatDoesItTakeToRunLLVMBuildbots.pdfTechTalk5-WhatDoesItTakeToRunLLVMBuildbots.pdf
TechTalk5-WhatDoesItTakeToRunLLVMBuildbots.pdfxiso
 
Kettunen, miaubiz fuzzing at scale and in style
Kettunen, miaubiz   fuzzing at scale and in styleKettunen, miaubiz   fuzzing at scale and in style
Kettunen, miaubiz fuzzing at scale and in styleDefconRussia
 
Git - Intro to the Basics of DVCS
Git - Intro to the Basics of DVCSGit - Intro to the Basics of DVCS
Git - Intro to the Basics of DVCSMatthew McCullough
 
Git - Intro to the Basics of DVCS
Git - Intro to the Basics of DVCSGit - Intro to the Basics of DVCS
Git - Intro to the Basics of DVCSMatthew McCullough
 
How to Design a Program Repair Bot? Insights from the Repairnator Project
How to Design a Program Repair Bot? Insights from the Repairnator ProjectHow to Design a Program Repair Bot? Insights from the Repairnator Project
How to Design a Program Repair Bot? Insights from the Repairnator ProjectSimon Urli
 
Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with serverEugene Yokota
 
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...Sang Don Kim
 
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.UA Mobile
 
Using Git as your VCS with Bioconductor
Using Git as your VCS with BioconductorUsing Git as your VCS with Bioconductor
Using Git as your VCS with Bioconductortimyates
 
mloc.js 2014 - JavaScript and the browser as a platform for game development
mloc.js 2014 - JavaScript and the browser as a platform for game developmentmloc.js 2014 - JavaScript and the browser as a platform for game development
mloc.js 2014 - JavaScript and the browser as a platform for game developmentDavid Galeano
 
Hyperledger 구조 분석
Hyperledger 구조 분석Hyperledger 구조 분석
Hyperledger 구조 분석Jongseok Choi
 
Life of a Chromium Developer
Life of a Chromium DeveloperLife of a Chromium Developer
Life of a Chromium Developermpaproductions
 

Similar to Identifying Hotspots in Software Build Processes (20)

[db tech showcase Tokyo 2017] A11: SQLite - The most used yet least appreciat...
[db tech showcase Tokyo 2017] A11: SQLite - The most used yet least appreciat...[db tech showcase Tokyo 2017] A11: SQLite - The most used yet least appreciat...
[db tech showcase Tokyo 2017] A11: SQLite - The most used yet least appreciat...
 
Digging for Android Kernel Bugs
Digging for Android Kernel BugsDigging for Android Kernel Bugs
Digging for Android Kernel Bugs
 
Rainbow Over the Windows: More Colors Than You Could Expect
Rainbow Over the Windows: More Colors Than You Could ExpectRainbow Over the Windows: More Colors Than You Could Expect
Rainbow Over the Windows: More Colors Than You Could Expect
 
Introduction to Git (Greg Lonnon)
Introduction to Git (Greg Lonnon)Introduction to Git (Greg Lonnon)
Introduction to Git (Greg Lonnon)
 
Road to sbt 1.0: Paved with server (2015 Amsterdam)
Road to sbt 1.0: Paved with server (2015 Amsterdam)Road to sbt 1.0: Paved with server (2015 Amsterdam)
Road to sbt 1.0: Paved with server (2015 Amsterdam)
 
TechTalk5-WhatDoesItTakeToRunLLVMBuildbots.pdf
TechTalk5-WhatDoesItTakeToRunLLVMBuildbots.pdfTechTalk5-WhatDoesItTakeToRunLLVMBuildbots.pdf
TechTalk5-WhatDoesItTakeToRunLLVMBuildbots.pdf
 
Kettunen, miaubiz fuzzing at scale and in style
Kettunen, miaubiz   fuzzing at scale and in styleKettunen, miaubiz   fuzzing at scale and in style
Kettunen, miaubiz fuzzing at scale and in style
 
Git - Intro to the Basics of DVCS
Git - Intro to the Basics of DVCSGit - Intro to the Basics of DVCS
Git - Intro to the Basics of DVCS
 
Git - Intro to the Basics of DVCS
Git - Intro to the Basics of DVCSGit - Intro to the Basics of DVCS
Git - Intro to the Basics of DVCS
 
Switching to Git
Switching to GitSwitching to Git
Switching to Git
 
How to Design a Program Repair Bot? Insights from the Repairnator Project
How to Design a Program Repair Bot? Insights from the Repairnator ProjectHow to Design a Program Repair Bot? Insights from the Repairnator Project
How to Design a Program Repair Bot? Insights from the Repairnator Project
 
Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with server
 
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
 
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
 
Using Git as your VCS with Bioconductor
Using Git as your VCS with BioconductorUsing Git as your VCS with Bioconductor
Using Git as your VCS with Bioconductor
 
mloc.js 2014 - JavaScript and the browser as a platform for game development
mloc.js 2014 - JavaScript and the browser as a platform for game developmentmloc.js 2014 - JavaScript and the browser as a platform for game development
mloc.js 2014 - JavaScript and the browser as a platform for game development
 
Hyperledger 구조 분석
Hyperledger 구조 분석Hyperledger 구조 분석
Hyperledger 구조 분석
 
Phoenix: Sent 200 OK in 3 μs
Phoenix: Sent 200 OK in 3 μsPhoenix: Sent 200 OK in 3 μs
Phoenix: Sent 200 OK in 3 μs
 
Keeping Master Green at Scale
Keeping Master Green at ScaleKeeping Master Green at Scale
Keeping Master Green at Scale
 
Life of a Chromium Developer
Life of a Chromium DeveloperLife of a Chromium Developer
Life of a Chromium Developer
 

Recently uploaded

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 

Recently uploaded (20)

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 

Identifying Hotspots in Software Build Processes

  • 1. Identifying Hotspots in Software Build Processes Shane McIntosh Bram Adams Meiyappan Nagappan Ahmed E. Hassan @shane_mcintosh shanemcintosh@acm.org
  • 2. What is a build system? Source code !2
  • 3. What is a build system? Source code Deliverable !2
  • 4. Build systems describe how sources are translated into deliverables .c .o .cc .o .exe .tex .dvi .pdf .a .deb !3
  • 5. All builds are equal… (1) Think (2) Edit The developer’s work cycle (4) Test (3) Build !4
  • 6. …But some builds are more equal than others “ http://xkcd.com/303/ Why is the gtk build so abysmally slow? This hinders our ability to run gtk bots and keep the gtk build green. :( ” !5
  • 7. Refactoring can improve build performance deliverable1 del1.o del1.c deliverable2 library.a util1.o util2.o util1.c del2.o del2.c util2.c !6
  • 8. Refactoring can improve build performance deliverable1 del1.o del1.c deliverable2 library.a util1.o util2.o util1.c del2.o del2.c util2.c !6
  • 9. Refactoring can improve build performance deliverable1 del1.o del1.c deliverable2 library.a util1.o util2.o util1.c del2.o del2.c util2.c !6
  • 10. Refactoring can improve build performance deliverable1 del1.o del1.c deliverable2 library.a util1.o util2.o util1.c del2.o del2.c util2.c !6
  • 11. Refactoring can improve build performance deliverable1 del1.o del1.c deliverable2 library.a util1.o util2.o util1.c del2.o del2.c util2.c !6
  • 12. Refactoring can improve build performance deliverable1 deliverable2 Before refactoring:! 4 commands! del2.o del1.o library.a triggered del1.c del2.c util1.o util2.o util1.c util2.c !6
  • 13. Refactoring can improve build performance deliverable1 del1.o del1.c deliverable2 library.a util1.o util2.o util1.c del2.o del2.c util2.c !6
  • 14. Refactoring can improve build performance deliverable1 deliverable2 del1.o util1.o util2.o del2.o del1.c util1.c util2.c del2.c !7
  • 15. Refactoring can improve build performance deliverable1 deliverable2 del1.o util1.o util2.o del2.o del1.c util1.c util2.c del2.c !7
  • 16. Refactoring can improve build performance deliverable1 deliverable2 del1.o util1.o util2.o del2.o del1.c util1.c util2.c del2.c !7
  • 17. Refactoring can improve build performance deliverable1 deliverable2 del1.o util1.o util2.o del2.o del1.c util1.c util2.c del2.c !7
  • 18. Refactoring can improve build performance deliverable1 deliverable2 After refactoring:! 2 commands! del2.o del1.o util1.o util2.o triggered del1.c del2.c util1.c util2.c !7
  • 19. …But where should we focus refactoring effort? Files that rebuild the slowest? !8
  • 20. …But where should we focus refactoring effort? Files that rebuild the slowest? …but they may only rarely change! !8
  • 21. …But where should we focus refactoring effort? Files that rebuild the slowest? Files that change the most often? …but they may only rarely change! !8
  • 22. …But where should we focus refactoring effort? Files that rebuild the slowest? Files that change the most often? …but they may only rarely change! …but they may already be optimal! !8
  • 23. …But where should we focus refactoring effort? Files that rebuild the slowest? Files that change the most:often? ots …but they may only rarely change! …but they may already be optimal! otsp h ft e n uild ge o on b han cus nd c Fo ly a slow build at re es th il F !8
  • 25. MAKAO tool extracts build dependency graphs (1) Dependency Graph Construction (2) Dependency Graph Analysis (3) Build Hotspot Detection Design recovery and maintenance of build systems B. Adams, Herman Tromp, Kris De Schutter, Wolfgang De Meuter [ICSM 2007] !10
  • 26. The cost of traversing an edge is derived by timing its build command (1) Dependency Graph Construction (2) Dependency Graph Analysis (3) Build Hotspot Detection Median of 10 repetitions !11
  • 27. Mining frequently changing files from version control (1) Dependency Graph Construction Terminal $ git clone … … $ git checkout <some_tag> … $ git log --oneline <some_file> !12 (2) Dependency Graph Analysis (3) Build Hotspot Detection
  • 28. Quadrant plots highlight build hotspots Number of changes (1) Dependency Graph Construction (2) Dependency Graph Analysis (3) Build Hotspot Detection Rebuild cost !13
  • 29. Quadrant plots highlight build hotspots Number of changes (1) Dependency Graph Construction (2) Dependency Graph Analysis (3) Build Hotspot Detection Rebuild cost !13
  • 30. Quadrant plots highlight build hotspots Number of changes (1) Dependency Graph Construction (2) Dependency Graph Analysis (3) Build Hotspot Detection Rebuild cost !13
  • 31. Number of changes Quadrant plots highlight build hotspots factor Re e first! thes (1) Dependency Graph Construction (2) Dependency Graph Analysis (3) Build Hotspot Detection Rebuild cost !13
  • 32. Open source case studies! Thresholds ! Rebuild cost 90 seconds Number of changes ! Median ! !14
  • 33. Build dependency graph properties # Nodes # Edges 38,102 2,752,225 0 750,000 1,500,000 2,250,000 3,000,000 3,375 121,710 5,131 60,170 0 35,000 70,000 105,000 140,000 !15
  • 34. 1.00 ● ● ● ● ● ● ● ● Number of changes (Normalized) Normalized File Churn ● ● ● ● ● 0.25 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 65 hotspots! (7% of source files) ● ● ● ● 0.75 0.50 ● ● ● ● ● ●● ● ● ● ● ● Main culprits ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●● ● ● ● ●● ● ● ●● ●● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● glib/glib.h glib/glib-object.h ● ● ● ● ●● ●● ● ● ●● ●● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●●●●● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● 0 ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● 50 Max: 148 seconds ● ●●● ●● ● ● ● ● ● ● ●● ● Build Time ● ● ● ● ● 100 150 Rebuild cost (seconds) !16
  • 35. 1.00 ● ● ● ● ● ●● ● ● ● Number of changes (Normalized) Normalized File Churn ● ● ● ● ● ● 0.75 0.50 0.25 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●● ● ●● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ● ●●●● ● ● ● ● ● ● ● ● ●●● ● ● ●● ● ●● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ●● ● ● ●● ● ● ●● ●● ● ● ● ● ● ●●● ●● ● ● ● ● ●● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ●● ● ●● ● ● ●● ● ● ●● ● ● ●● ● ● ● ● ●● ●● ● ● ●● ● ● ●● ● ● ●● ● ●● ● ● ●● ● ● ● ● ● ●● ● ● ●● ● ●● ●● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ●● ●● ● ●● ● ● ● ● ● ● ● ●●● ●● ● ● ● ●● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●●● ● ●● ● ● ● ●● ●● ● ● ●● ● ●● ● ●● ●● ●● ● ● ● ● ● ● ● ●● ●● ●● ● ● ●● ● ●● ● ● ● ●● ● ● ● ●● ● ● ●● ●● ●●● ●● ● ●●● ●● ● ● ● ● ●● ●● ●● ● ● ● ●● ● ●● ●● ● ● 27 hotspots! (2% of source files) ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● Main culprits ● ● ● ● ● ● ● ● ● ● ● ● ● ● postgres.h access/htup.h access/genam.h access/xact.h utils/builtins.h ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ● ● ●●● ● ●●● ● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ● ●● ●● ●● ● ● ● ● ● ● ● ●● ● ● 0 Max: 191 seconds ● 50 100 Build Time (s) 150 200 Rebuild cost (seconds) !17
  • 36. 1.00 ● ● ● ● ● ● ● Number of changes (Normalized) Normalized File Churn ● 0.75 0.50 0.25 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ●● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ●● ●● ●● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ●●● ● ● ●● ● ●● ● ● ●● ● ● ● ● ● ●●●● ●● ● ●●●● ●● ●● ●● ● ● ●●● ●●● ● ●●● ● ●● ● ● ● ●●●● ●● ● ● ●●●● ● ●● ● ●● ● ●● ● ● ● ●●●●●●●● ● ●●● ●●●● ●●● ● ● ● ●● ● ●● ●● ● 732 hotspots! (8% of source files) ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ●● ● ●●● ● ● ●● ●● ● ● ●● ●● ●● ●● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ●● ● ●● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● Main culprits tmtm ● ● ●● ● ● ●● ● ● ● ●● ● ●● ●● ● ●● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ● ●●● ● ● ●● ●● ●● ● ● ●● ● ● ● ●●● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●●● ● ●● ● ● ●● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ●●●●●● ● ● ● ● ●● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ●●●● ●● ● ● ●● ●● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●●●● ●● ● ● ● ●●●●●●●●●● ● ● ●●● ● ●●●● ● ● ● ●●● ●●●● ● ●● ● ● ●● ● ●●● ●●● ● ●● ● ●● ● ●● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●●●●●●●● ● ● ● ●●●●●● ●● ● ●●● ●● ●● ●●●● ● ● ●●● ● ●● ●●● ● ● ●● ●●● ● ● ● ●●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● High hotspot! concentration qtbase/…/corelib qtxmlpatterns ●●●●●● ● ● ●●●● ● ●●●● ● ●●● ●●● ● 0 2000 4000 Build Time (s) 6000 8000 Max: 2hrs 19min Rebuild cost (seconds) !18
  • 37. General trends Transitive property of build hotspots 1 2 ... n-1 n hot.o hot.c !19
  • 38. General trends Transitive property of build hotspots 1 2 ... n-1 n hot.o hot.c !19
  • 39. General trends Transitive property of build hotspots 1 2 ... n-1 n hot.o hot.c x.h !19
  • 40. General trends Transitive property of build hotspots 1 2 ... n-1 n hot.o hot.c x.h !19
  • 43. 1 2 ... n-1 n General trends hot.o Transitive property of build hotspots hot.c x.h hub.h !20
  • 44. 1 2 ... n-1 n General trends hot.o Transitive property of build hotspots hot.c a.h b.h x.h y.h z.h hub.h !20
  • 45. 1 2 ... n-1 n General trends hot.o Transitive property of build hotspots hot.c a.h b.h x.h y.h z.h hub.h !20
  • 46. 1 2 ... n-1 n General trends hot.o Transitive property of build hotspots hot.c a.h b.h x.h y.h z.h hub.h !20
  • 47. 1 2 ... n-1 n General trends hot.o Transitive property of build hotspots hot.c a.h b.h x.h y.h z.h hub.h Limit internal use of “header file hubs” as much as possible! !20
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.