On Dec 9, 2025, at 17:15, Mark Millard <[email protected]> wrote:
> On Dec 9, 2025, at 12:32, Mark Millard <[email protected]> wrote:
>
>> On Dec 9, 2025, at 07:22, Rozhuk Ivan <[email protected]> wrote:
>>
>>> On Mon, 8 Dec 2025 09:23:52 -0800
>>> Mark Millard <[email protected]> wrote:
>>>
>>>> But, as of yet, I've no good evidence for blaming
>>>> jemalloc as a major contributor to those timing
>>>> ratios --or for blaming any other specific part
>>>> of 15.0 .
>>>
>>> If you want to bench jmalloc - there is another ways to do that without
>>> building something.
>>> Try to find some sythetic benchmarks.
>>> Also jmalloc can be build without OS rebuild and linked with bench.
>>>
>>> This 2 things can reduce time to tests, but it will eliminate OS integation
>>> factors.
>>> Run same bench on different OS may give more info.
>>>
>>
>> [I've eliminated direct Email to most everyone
>> for this reply. There is not even minor new
>> technical content.]
>>
>> At this point I'm more likely to explore if I
>> get similar ratios as ampere[13] do for some
>> port-package builds that have the large ratios on
>> ampere[13]. There are examples that are not as
>> overall time consuming for ampere[13] as what I've
>> already referenced (but are still non-trivial for
>> the time taken). As stands, I do not have a good
>> reproduce-the-issue context, much less one with
>> build time frames I'd be willing to deal with in
>> my environment.
>
> Time-ratios similar to the ampere[13] ones for
> 15.0 vs. 14.3 (or 13.5) were easily repeatable
> on the Microsoft Windows Dev Kit 2023 for doing
> poudriere builds of the examples that I tried.
>
> port-package builds tested for below: devel/cmake-core
> TMPFS_BLACKLIST empty
> ALLOW_MAKE_JOBS= in use (no explicit MAKE_JOBS_NUMBER like restrictions)
> UFS context (except for what USE_TMPFS=all does in poudriere)
> The below did not update /usr/ports/distfiles/ .
>
> This does some exploration of USE_TMPFS=no vs.
> USE_TMPFS=all as well, starting with
> USE_TMPFS=no .
>
> Listed in the sequence executed, first time
> runs shown first:
>
>
> USE_TMPFS=no . . .
> (Note: The first times had other port-packages to build first.)
>
> 15.0 poudriere jail:
> [00:37:37] [01] [00:12:30] Finished devel/cmake-core | cmake-core-3.31.9:
> Success
>
> 14.3 poudriere jail:
> [00:28:26] [01] [00:09:38] Finished devel/cmake-core | cmake-core-3.31.9:
> Success
>
> Approx. 1.30 time ratio (15.0's 12:30 / 14.3's 9:38)
>
>
> USE_TMPFS=all (no tmpfs black list) . . .
>
> 14.3 poudriere jail:
> [00:09:32] [03] [00:09:24] Finished devel/cmake-core | cmake-core-3.31.9:
> Success
>
> 15.0 poudriere jail:
> [00:12:45] [03] [00:12:34] Finished devel/cmake-core | cmake-core-3.31.9:
> Success
>
> Approx. 1.34 time ratio (15.0's/14.3's)
>
>
> The following also prefixed the poudriere bulk -C command
> with: time -l
>
> 15.0 poudriere jail:
> [00:12:36] [04] [00:12:25] Finished devel/cmake-core | cmake-core-3.31.9:
> Success
> . . .
> 757.10 real 4613.06 user 251.09 sys
> 866580 maximum resident set size
> 131 average shared memory size
> 27 average unshared data size
> 234 average unshared stack size
> 31148816 page reclaims
> 0 page faults
> 0 swaps
> 14 block input operations
> 36 block output operations
> 37061 messages sent
> 33671 messages received
> 1758 signals received
> 143987 voluntary context switches
> 167515 involuntary context switches
>
> 14.3 poudriere jail:
> [00:09:23] [01] [00:09:15] Finished devel/cmake-core | cmake-core-3.31.9:
> Success
> . . .
> 564.48 real 3449.89 user 204.14 sys
> 822900 maximum resident set size
> 64692 average shared memory size
> 791 average unshared data size
> 235 average unshared stack size
> 28153497 page reclaims
> 0 page faults
> 0 swaps
> 9 block input operations
> 12 block output operations
> 34180 messages sent
> 31539 messages received
> 1758 signals received
> 131899 voluntary context switches
> 132775 involuntary context switches
>
> Approx. 1.34 time ratio (15.0's/14.3's)
>
>
> USE_TMPFS=no . . . (again)
>
> 15.0 poudriere jail:
> [00:13:01] [04] [00:12:27] Finished devel/cmake-core | cmake-core-3.31.9:
> Success
> . . .
> 784.89 real 4596.42 user 257.12 sys
> 866600 maximum resident set size
> 128 average shared memory size
> 25 average unshared data size
> 234 average unshared stack size
> 31194466 page reclaims
> 2371 page faults
> 0 swaps
> 3573 block input operations
> 6687 block output operations
> 37643 messages sent
> 33840 messages received
> 1756 signals received
> 241548 voluntary context switches
> 304249 involuntary context switches
>
> 14.3 poudriere jail:
> [00:09:49] [04] [00:09:18] Finished devel/cmake-core | cmake-core-3.31.9:
> Success
> . . .
> 592.83 real 3446.18 user 207.61 sys
> 823880 maximum resident set size
> 64712 average shared memory size
> 787 average unshared data size
> 236 average unshared stack size
> 28176650 page reclaims
> 2374 page faults
> 0 swaps
> 3481 block input operations
> 5148 block output operations
> 34521 messages sent
> 31580 messages received
> 1758 signals received
> 218881 voluntary context switches
> 255193 involuntary context switches
>
> Approx. 1.34 time ratio (15.0's/14.3's)
>
>
> Only some port-packages have time-ratios
> near 1.34. For example, building lang/gcc15
> does not on ampere[13]: closer to 1.1 as
> I remember. (For the most part, lang/gcc15
> does most of its own building based on a
> smaller amount of clang-built code
> to bootstrap.)
>
>
> For reference:
>
> # poudriere jail -l
> JAILNAME VERSION OSVERSION ARCH METHOD
> TIMESTAMP PATH
> release14-aarch64 14.3-RELEASE-p6 1403000 arm64.aarch64 ftp-archive
> 2025-12-09 12:54:06 /usr/local/poudriere/jails/release14-aarch64
> . . .
> release-aarch64 15.0-RELEASE 1500068 aarch64 pkgbase
> 2025-12-06 11:34:39 /usr/local/poudriere/jails/release-aarch64
> . . .
>
> # ~/fbsd-based-on-what-commit.sh -C /usr/ports
> bb7b77417165 (HEAD -> main, freebsd/main, freebsd/HEAD) www/hurl: update
> 7.0.0 -> 7.1.0
> Author: Rodrigo Osorio <[email protected]>
> Commit: Rodrigo Osorio <[email protected]>
> CommitDate: 2025-11-28 23:11:52 +0000
> branch: main
> merge-base: bb7b774171651eea0dc56376c225fe976231daa5
> merge-base: CommitDate: 2025-11-28 23:11:52 +0000
> n726888 (--first-parent --count for merge-base)
>
> # uname -apKU
> FreeBSD aarch64-main-pbase 16.0-CURRENT FreeBSD 16.0-CURRENT
> main-n281922-4872b48b175c GENERIC-NODEBUG arm64 aarch64 1600004 1600004
>
> (That last was an official pkgbase distribution.)
14.3-STABLE does not have jemalloc 5.3.0 or libsys
but performs like 15.0-RELEASE, not 14.3-RELEASE
for the aarch64 devel/cmake-core build tests.
But 14.3-STABLE does have:
# ldd /usr/local/poudriere/jails/official14-aarch64/usr/bin/cc
/usr/local/poudriere/jails/official14-aarch64/usr/bin/cc:
libprivateclang.so.19 => /usr/lib/libprivateclang.so.19 (0x732e0d600000)
libprivatellvm.so.19 => /usr/lib/libprivatellvm.so.19 (0x732e12600000)
. . .
while 14.3-RELEASE does not.
(Another data point is that lang/gcc15 does not have
nearly as large of a time-ratio vs. 14.3-RELEASE
in the data from ampere[13] .)
Details from the Microsoft Dev Kit 2023 experiments
. . .
I've collected a sequence for a new poudriere jail
to compare/contrast with:
# poudriere jail -l
JAILNAME VERSION OSVERSION ARCH METHOD
TIMESTAMP PATH
. . .
official14-aarch64 14.3-STABLE 1403506 arm64.aarch64 freebsdci
2025-12-09 18:24:20 /usr/local/poudriere/jails/official14-aarch64
. . .
(ampere[13] do not have examples of recent 14.3-STABLE builds at this point.)
USE_TMPFS=no . . .
(Note: The first times had other port-packages to build first.
But the system still has the cached the file system data.)
stable/14 poudriere jail:
[00:36:29] [01] [00:12:31] Finished devel/cmake-core | cmake-core-3.31.9:
Success
So: 12:31 is far more like 15.0-RELEASE
USE_TMPFS=all . . .
stable/14 poudriere jail:
[00:12:21] [07] [00:12:10] Finished devel/cmake-core | cmake-core-3.31.9:
Success
. . .
742.70 real 4586.53 user 248.37 sys
864996 maximum resident set size
133 average shared memory size
24 average unshared data size
235 average unshared stack size
30958626 page reclaims
0 page faults
0 swaps
456 block input operations
80 block output operations
35920 messages sent
33223 messages received
1760 signals received
140580 voluntary context switches
164112 involuntary context switches
So: 12:10 is far more like 15.0-RELEASE
stable/14 poudriere jail (again):
[00:12:30] [08] [00:12:19] Finished devel/cmake-core | cmake-core-3.31.9:
Success
. . .
751.98 real 4604.85 user 251.40 sys
866056 maximum resident set size
125 average shared memory size
21 average unshared data size
235 average unshared stack size
30976603 page reclaims
0 page faults
0 swaps
20 block input operations
11 block output operations
36297 messages sent
33327 messages received
1761 signals received
144213 voluntary context switches
166975 involuntary context switches
So: 12:19 is far more like 15.0-RELEASE
USE_TMPFS=no . . .
(Note: The first times had other port-packages to build first.)
stable/14 poudriere jail:
[00:13:16] [05] [00:12:49] Finished devel/cmake-core | cmake-core-3.31.9:
Success
. . .
799.95 real 4626.06 user 261.49 sys
865940 maximum resident set size
134 average shared memory size
24 average unshared data size
235 average unshared stack size
31110419 page reclaims
2380 page faults
0 swaps
3577 block input operations
6262 block output operations
37253 messages sent
33801 messages received
1758 signals received
236161 voluntary context switches
312615 involuntary context switches
So: 12:49 is far more like 15.0-RELEASE
(Nice to have a known repeatable context to try
variations with.)
===
Mark Millard
marklmi at yahoo.com