The dynamic link model is much faster for incremental builds. We can make all of the non-windows waterfall ! builders use --link-model=dynamic. Any pushing builders that are currently ! builders can simply be duplicated to be * builders, so they will still exist, but they won't be part of the patch workflow.
Our current list of ! and * builders is as follows:
- ! Enterprise RHEL 6.2
- ! Enterprise Windows
- ! Linux DEBUG
- ! Shared Library Enterprise Ubuntu 16.04 (Clang)
- ! {A,UB}SAN Enterprise Ubuntu 18.04 DEBUG
- * Enterprise Clang Tidy
- * Enterprise RHEL 7.0
- * Shared Library Enterprise Ubuntu 16.04
- * Shared Library Ubuntu 16.04 (Clang)
- * Ubuntu 16.04 DEBUG
- * Windows DEBUG
- * macOS DEBUG
This particular mix meets several properties. When considering only the ! builders, we have:
- Community vs Enterprise
- Windows and Linux
- Shared and Static
- DEBUG and Production
- GCC, MSVC, and Clang
- AUBSAN vs non-instrumented.
When the * builders are included, we get even more coverage, including
- MacOS / Xcode clang
- GCC shared library
- Windows DEBUG
There are probably a few other variations as well that aren't called out here.
By switching over to dynamic, we can reduce to the following list:
- ! Enterprise Windows
- ! Shared Library Enterprise RHEL 6.2
- ! Shared Library Linux DEBUG
- ! Shared Library {A,UB}SAN Enterprise Ubuntu 18.04 DEBUG
- * Enterprise Clang Tidy
- * Enterprise RHEL 6.2
- * Enterprise RHEL 7.0
- * Shared Library macOS DEBUG
- * Shared Library Ubuntu 16.04 DEBUG
- * Windows DEBUG
The most important thing to note here is that the old ! Enterprise RHEL 6.2 has been duplicated to * Enterprise RHEL 6.2, since we can't push the artifacts from the new ! Shared Library Enterprise RHEL 6.2 builder.
A careful review of this shows that we have essentially the same coverage in the ! set:
- Community vs Enterprise, because ! Shared Library Linux DEBUG is not an enterprise builder.
- Windows and Linux, by inspection
- Shared and Static, since the Windows build is still static
- DEBUG and Production, since two of the ! builders are DEBUG
- GCC, MSVC, and Clang, since Windows is MSVC, the SAN builder is clang, and the RHEL 6.2 builder is GCC.
- AUBSAN vs non-instrumented, by inspection.
The remaining * builders cover the same cases as before. As an additional benefit, we will be able to remove the old special case dynamic builders that ran no tests, because now the primary builders in ! will be dynamic.
Overall, this change should greatly reduce the time spent waiting on compile and link tasks in both the waterfall and the patch workflows.
- depends on
-
SERVER-48272 Reduce startup time for dynamically linked server binaries and shell
- Closed
- is related to
-
SERVER-48730 Loading core dump on spawn host with gdb isn't reading debug symbols from shared objects automatically
- Closed