Although I have identified the fact that takes an extraordinary amount of time, the point is, the command should not be evaluating all facts when it is requested a single fact.
Facter 3.14 is 80x slower compared to facter 2.x. when requesting a single fact. Analysis indicates that all facts are processed and evaluated, not only the ones requested. The facter command should evaluate only those facts requested (and dependencies) on the command line.
---—
From facter 2.4.6 {code} time facter -p operatingsystem RedHat
real 0m0.754s user 0m0.525s sys 0m0.075s {code} From 3.14.24: {code} # time facter -p operatingsystem RedHat
real 0m8.166s user 0m6.533s sys 0m1.084s {code} v3.14, without `-p`... {code} RedHat
real 0m0.207s user 0m0.182s sys 0m0.025s {code} v3.14, with -p but non-root: {code} 2022-10-07 14:22:42.150228 WARN puppetlabs.facter - skipping external facts for "/home/XXXX/.puppetlabs/opt/puppet/cache/facts.d": No such file or directory RedHat
real 0m1.115s user 0m0.969s sys 0m0.131s {code}
Using Ruby (as root) to retrieve core fact: {code} time /opt/puppetlabs/puppet/bin/ruby -rfacter -e 'p Facter.value("operatingsystem");' "RedHat"
real 0m0.105s user 0m0.091s sys 0m0.014s {code} Using facter -p (as root) evaluating a "fast" puppet-sync fact: {code} # time facter -p service_provider systemd
real 0m8.297s user 0m6.534s sys 0m1.175s {code} Using ruby directly to retrieve puppet-sync'd fact: {code} # export FACTERLIB=/opt/puppetlabs/puppet/cache/lib/facter; time /opt/puppetlabs/puppet/bin/ruby -rfacter -e 'p Facter.value("service_provider");' "systemd"