ports-mgmt/poudriere-devel, lang/rust (for example), and USE_TMPFS that includes wrkdir (or yes)

Mark Millard marklmi at yahoo.com
Tue May 11 05:20:02 UTC 2021

I've been using USE_TMPFS=yes (so "wrkdir data") on
various systems, both ZFS (recently) and UFS
(generally, even now). Only one system builds rust
(in order for something else to be built), at least
so far.

An example of the wrkdirs tmpfs use for rust is
(UFS context):

# df -m | grep tmpfs
Filesystem 1M-blocks   Used  Avail Capacity  Mounted on
. . .
tmpfs         301422  17859 283563     6%    /usr/local/poudriere/data/.m/FBSDFSSDjail-default/01/wrkdirs
. . .

This was near the end but the maximum figure was probably
somewhat higher than the 17 GiByte+ figure above. The
context the example is from is for the only large capacity
build machine that I have access to, an amd64 context. I
have other build contexts as well, but, so far, none have
had to deal with building rust.

Rust likely would fit the 8 GiByte RAM + 24 GiByte swap
aarch64 build context with USE_TMPFS including wrkdir if
it was the only builder running at the time. But the
existing builds for the context allow 4 builders in
parallel, one per core. [This deals just fine with
llvm10, llvm11, llvm12, and, gcc10 (no bootstrap) being
what happens to build in parallel, even with USE_TMPFS
that includes wrkdir. Rust is just uses more space all
by itself.]

If I end up with something that requires rust for the
aarch64 builder context, is there a different technique
to deal with the tradeoff other than giving up on
USE_TMPFS spanning wrkdir for all other other
ports/builder-instances as well, presuming the same
media and partitioning (such as total swap space)?

Imaginary examples could be:

A) Tell poudriere that lang/rust is to be built by itself
   despite the general 4-builder context.

B) Tell poudriere that USE_TMPFS excludes wrkdir for
   lang/rust's specific builder.

C) . . . (good question) . . .

So far all I've come up with is explicitly building
lang/rust by itself first, a form of (A):

# poudriere bulk -jNAME -w lang/rust
# poudriere bulk -jNAME -w -f ~/origins/CA72-origins.txt

(Hopefully, reliably remembering to do so.)

Is there any better technique that I've not noticed?

To some extent here, lang/rust is being used an example
of a more general issue: Other ports could have similar
issues with attempted wrkdir-included USE_TMPFS use.

Note: If I build using WITH_DEBUG, the one system that
I have access to that can build such a lang/rust with
workdir included in USE_TMPFS shows over 130 GiBytes
in the tmpfs earn the end of the builder's activity.
(This is a amd64 context with 128 GiBytes of RAM and
192 GiBytes of swapping/paging space.)

Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)

More information about the freebsd-ports mailing list