[Bug 275594] High CPU usage by arc_prune; analysis and fix

From: <bugzilla-noreply_at_freebsd.org>
Date: Tue, 02 Apr 2024 17:08:46 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=275594

--- Comment #104 from Mark Millard <marklmi26-fbsd@yahoo.com> ---
(In reply to Anton Saietskii from comment #102)

I'll note that rust builds are massive users of temporary disk space in wrkdir,
even for single-builder/single-make-job builds: I've seen nearly 30 GiByte and
have seen well over 20 GiBytes for a long time. When USE_TMPFS= effectively
includes wrkdir, this competes for RAM+SWAP via the TMPFS use. The highest
usage is towards the end (packaging).

Another issue is that historically when the builder completes, such TMPFS space
use stick around until/unless the specific builder starts another build.

I historically have provided lots of SWAP so that RAM need not cover such and
RAM+SWAP had lots of room.

But there is also the poudriere.conf technique of:

# List of package globs that are not allowed to use tmpfs for their WRKDIR
# Note that you *must* set TMPFS_BLACKLIST_TMPDIR
# EXAMPLE: TMPFS_BLACKLIST="rust"
TMPFS_BLACKLIST="rust"

# The host path where tmpfs-blacklisted packages can be built in.
# A temporary directory will be generated here and be null-mounted as the
# WRKDIR for any packages listed in TMPFS_BLACKLIST.
# EXAMPLE: TMPFS_BLACKLIST_TMPDIR=${BASEFS}/data/cache/tmp
TMPFS_BLACKLIST_TMPDIR=${BASEFS}/data/cache/tmp

that avoids the TMPFS based wrkdir space use just for rust. (Of course,
one needs the actual storage space in such cases.)

With rust avoiding TMPFS wrkdir use, I've observed llvm18 taking more
RAM+SWAP than rust, even with some llvm18 default options disabled.

(I do not have a list of packages with such large wrkdir space requirements
but would not be surprised if there are several more around, some possibly
not being compiler toolchains. But I do not normally build a wide variety
of large-builder software that are not compiler toolchain related.)

-- 
You are receiving this mail because:
You are the assignee for the bug.