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