An experiment building two devel/electron* in parallel vs. in sequence, prerequisite packages already in place in the package repository
Mark Millard <[email protected]> Sat, 11 Jul 2026 07:46:42 -0700
| Newsgroups | gmane.os.freebsd.devel.ports |
|---|---|
| Message-ID | <[email protected]> |
This is partially prompted by a report on discord of "will spend more
time in DISK_WAIT than actually building" and that, therefore, using
MUTUALLY_EXCLUSIVE_BUILD_PACKAGES was better. I suspected that the type
of storage media was notably involved in such results, though the
details were not given. These tests used a PCIe Optane media.
Note: In no way does this experiment deal with the issues involved in
building 35,000+ port packages overall, something that the official
build servers have to be configured to deal with.
Comparison/contrast of build times for electron39 and electron42
(after prerequisites) built 2 ways (both via poudriere-devel use):
) one builder active at a time, building one electron* at a time
(One way of doing with is via MUTUALLY_EXCLUSIVE_BUILD_PACKAGES)
) two builders active at the same time, both electron*'s building
(they must not be in MUTUALLY_EXCLUSIVE_BUILD_PACKAGES)
2 Parallel builders:
. . .
[00:00:09] [29] [00:00:00] Building devel/electron39 |
electron39-39.8.10_2
[00:00:09] [30] [00:00:00] Building devel/electron42 | electron42-42.5.1
[02:28:06] [29] [02:27:57] Finished devel/electron39 |
electron39-39.8.10_2: Success
[02:57:44] [30] [02:57:35] Finished devel/electron42 |
electron42-42.5.1: Success
. . .
[02:57:56] [main-ZNV4-bulk_a-alt] [2026-07-10_16h59m46s] [committing]
Time: 02:57:54
Queued: 133 Inspected: 131 Ignored: 0 Built: 2 Failed: 0
Skipped: 0 Fetched: 0 Remaining: 0
[02:57:56] Logs: . . .
[02:57:56] Cleaning up
[02:57:56] Stopping up to 32 builders
[02:57:56] Unmounting file systems
Note: MaxObs is short for: Maximum Observed
Each Load average, MaxObs: 77.67, 65.09, 64.87
13255Mi MaxObsUsed(SwapUsed)
So: (192*1024+13255) MiBytes == 209863 MiBytes, i.e., a little under 205
GiBytes for (RAM+SWAP) usage.
Note: the entries in TMPFS_BLACKLIST do not eliminate all tmpfs use:
8.12 GiB and 8.20 GiB were reported.
Only one builder:
. . .
[00:00:15] [01] [00:00:00] Building devel/electron39 |
electron39-39.8.10_2
[01:14:07] [01] [01:13:52] Finished devel/electron39 |
electron39-39.8.10_2: Success
[01:14:17] [01] [00:00:00] Building devel/electron42 | electron42-42.5.1
[02:57:13] [01] [01:42:56] Finished devel/electron42 |
electron42-42.5.1: Success
Each Load average, MaxObs: 47.91, 33.03, 32.80
27276Ki MaxObsUsed(SwapUsed) NOTE: Swap was still in use after prior
bulk run: not new
41913Mi MaxObs(Act+Lndry+SwapUsed)
110606Mi MaxObs(A+Wir+L+SU), 125285Mi (A+W+L+SU+InAct)
So: (125285/1024) GiBytes is somewhat under 123 GiBytes (RAM+SWAP)
For reference:
7950X3D with 192 GiBytes of RAM and 512 GiBytes of SWAP, so
704 GiBytes RAM+SWAP. 16 SMT cores, so 32 FreeBSD OS CPUs.
The only in use media is a PCIe Optane (SSDPED1D015TAY):
# gpart show -pl /dev/nda2
. . .
534528 1073741824 nda2p2 OptBswp364 (512G)
1074276352 1845493760 nda2p3 OptBzfs (880G)
. . .
The electron*'s are listed in the TMPFS_BACKLIST (as is a lot more).
USE_TMFS=all was set as well.
ALLOW_MAKE_JOBS= with no MAKE_JOBS_NUMBER_LIMIT or the like
explicitly set. So: effectively 32 per builder (when ports
respect such limits anyway).
The poudriere-devel jail is a personal non-debug build of main
(WITH_MALLOC_PRODUCTION in use). The booted non-debug kernel is from
upstream pkgbase main. The booted world is from upstream pkgbase main,
and, so, is a debug build of the world.
No use of ccache or the like.
Note: Starting with an empty repository, it took a little under 1 hr 57
min to build the prerequisite port packages (parallel build with up to
32 builders allowed to be active, ALLOW_MAKE_JOBS in use, as above),
making the overall time somewhat under 5 hours.
--
===
Mark Millard
marklmi at yahoo.com