aboutsummaryrefslogtreecommitdiffstats
path: root/meson/docs/markdown/ARM-performance-test.md
diff options
context:
space:
mode:
Diffstat (limited to 'meson/docs/markdown/ARM-performance-test.md')
-rw-r--r--meson/docs/markdown/ARM-performance-test.md81
1 files changed, 81 insertions, 0 deletions
diff --git a/meson/docs/markdown/ARM-performance-test.md b/meson/docs/markdown/ARM-performance-test.md
new file mode 100644
index 000000000..4be6e4aab
--- /dev/null
+++ b/meson/docs/markdown/ARM-performance-test.md
@@ -0,0 +1,81 @@
+# Arm performance test
+
+Performance differences in build systems become more apparent on
+slower platforms. To examine this difference we compared the
+performance of Meson with GNU Autotools. We took the GLib software
+project and rewrote its build setup with Meson. GLib was chosen
+because it is a relatively large C code base which requires lots of
+low level configuration.
+
+The Meson version of the build system is not fully equivalent to the
+original Autotools one. It does not do all the same configuration
+steps and does not build all the same targets. The biggest missing
+piece being internationalisation support with Gettext. However it does
+configure the system enough to build all C source and run all unit
+tests.
+
+All measurements were done on a Nexus 4 smart phone running the latest
+Ubuntu touch image (updated on September 9th 2013).
+
+Measurements
+------
+
+The first thing we measured was the time it took to run the configure step.
+
+![GLib config time](images/glib_conf.png)
+
+Meson takes roughly 20 seconds whereas Autotools takes 220. This is a
+difference of one order of magnitude. Autotools' time contains both
+autogen and configure. Again it should be remembered that Meson does
+not do all the configure steps that Autotools does. It does do about
+90% of them and it takes just 10% of the time to do it.
+
+Then we measured the build times. Two parallel compilation processes
+were used for both systems.
+
+![GLib build time](images/glib_build.png)
+
+On desktop machines Ninja based build systems are 10-20% faster than
+Make based ones. On this platform the difference grows to 50%. The
+difference is probably caused by Make's inefficient disk access
+patterns. Ninja is better at keeping both cores running all the time
+which yields impressive performance improvements.
+
+![GLib no-op time](images/glib_empty.png)
+
+Next we measured the "empty build" case. That is, how long does it
+take for the build system to detect that no changes need to be
+made. This is one of the most important metrics of build systems
+because it places a hard limit on how fast you can iterate on your
+code. Autotools takes 14 seconds to determine that no work needs to be
+done. Meson (or, rather, Ninja) takes just one quarter of a second.
+
+![GLib link time](images/glib_link.png)
+
+One step which takes quite a lot of time is linking. A common case is
+that you are working on a library and there are tens of small test
+executables that link to it. Even if the compilation step would be
+fast, relinking all of the test executables takes time. It is common
+for people to manually compile only one test application with a
+command such as `make sometest` rather than rebuild everything.
+
+Meson has an optimization for this case. Whenever a library is
+rebuilt, Meson inspects the ABI it exports. If it has not changed,
+Meson will skip all relinking steps as unnecessary. The difference
+this makes can be clearly seen in the chart above. In that test the
+source was fully built, then the file `glib/gbytes.c` was touched to
+force the rebuild of the base glib shared library. As can be seen,
+Autotools then relinks all test executables that link with glib. Since
+Meson can detect that the ABI is the same it can skip those steps. The
+end result being that Meson is almost one hundred times faster on this
+very common use case.
+
+Conclusions
+-----
+
+One of the main drawbacks of C and C++ compared to languages such as
+Java are long compilation times. However at least some of the blame
+can be found in the build tools used rather than the languages
+themselves or their compilers. Choosing proper tools can bring C and
+C++ compilation very close to instantaneous rebuilds. This has a
+direct impact on programmer productivity.