1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-07 13:14:51 +00:00
freebsd/etc
Jilles Tjoelker eaac4bffc7 rc.subr: Optimize repeated sourcing.
When /etc/rc runs all /etc/rc.d scripts, it has already loaded /etc/rc.subr
but each /etc/rc.d script sources it again (since /etc/rc.d scripts must
also work when started stand-alone).

Therefore, if rc.subr is already loaded, return so sh need not parse the
rest of the file.

A second effect is that there is no longer a compound command around most of
rc.subr. This reduces memory usage while sh is loading rc.subr for the first
time (but this memory is free()d once rc.subr is loaded).

For purposes of porting this to other systems, I do not recommend porting
this to systems with shells that do not have the change to the return
special builtin like in r255215 (before FreeBSD 10.0-RELEASE). This change
ensures that return in the top level of a dot script returns from the dot
script, even if the dot script was sourced from a function.

A comparison of CPU time on an amd64 bhyve virtual machine from a times
command added near the end of /etc/rc, all four values summed:

x orig1
+ quickreturn
+--------------------------------------------------------------------------+
|  +    +              +                             x    x               x|
||______M__A_________|                             |______M___A__________| |
+--------------------------------------------------------------------------+
    N           Min           Max        Median           Avg        Stddev
x   3         1.704         1.802         1.726         1.744   0.051419841
+   3         1.467         1.559         1.487     1.5043333   0.048387326
Difference at 95.0% confidence
	-0.239667 +/- 0.113163
	-13.7424% +/- 6.48873%
	(Student's t, pooled s = 0.0499266)
2017-06-11 19:06:07 +00:00
..
autofs Enable automounting of exFAT media. 2017-05-04 19:16:36 +00:00
bluetooth
casper
cron.d Conditionally handle the crontab entry for atrun(8) 2017-05-18 06:33:55 +00:00
defaults Remove NATM configuration bits and assorted NATM and ATM remnants. 2017-04-25 21:59:34 +00:00
devd Sort REALTEK section and remove duplicate entry for RTL8192CU. 2017-01-24 03:00:22 +00:00
etc.aarch64
etc.amd64
etc.arm
etc.i386
etc.mips
etc.powerpc
etc.riscv
etc.sparc64
gss
mail
mtree Add tests for ln(1) 2017-06-08 19:09:55 +00:00
newsyslog.conf.d Handle the logfiles in newsyslog and syslogd conditionally, based on 2017-05-13 03:10:50 +00:00
ntp Revert r298887 (spelling fix) and remove $FreeBSD$ because text changes 2016-08-25 02:40:14 +00:00
pam.d Conditionally install /etc/pam.d/ftp* and /etc/pam.d/telnetd 2017-04-14 06:42:46 +00:00
periodic Improve time-since-last-scrub calculation. 2017-05-20 16:47:00 +00:00
pkg
rc.d crashinfo: add "batch" mode and use it during boot 2017-06-01 21:23:04 +00:00
root
sendmail Move /etc/ to SRCTOP 2017-03-12 18:58:55 +00:00
syslog.d Handle the logfiles in newsyslog and syslogd conditionally, based on 2017-05-13 03:10:50 +00:00
amd.map
apmd.conf
auto_master Stop appending "noatime" in the autofs -media map, and instead add it 2016-09-20 04:52:01 +00:00
blacklistd.conf Add basic blacklist build support 2016-06-02 19:06:04 +00:00
crontab Conditionally handle the crontab entry for atrun(8) 2017-05-18 06:33:55 +00:00
csh.cshrc
csh.login
csh.logout
ddb.conf
devd.conf Update devd.conf for ports change 421360 2017-02-27 15:32:56 +00:00
devfs.conf
dhclient.conf
disktab
fbtab
freebsd-update.conf
ftpusers
gettytab
group Fix regression introduced on r293801. 2016-01-27 06:28:56 +00:00
hosts
hosts.allow
hosts.equiv
hosts.lpd
inetd.conf Add an example inetd(8) entry for the Prometheus sysctl exporter. 2016-12-21 08:32:20 +00:00
libalias.conf
libmap.conf
login.access
login.conf Fix handling of umtxp resource limit in sh(1)/ulimit(1), limits(1), add 2016-03-12 14:54:34 +00:00
mac.conf
Makefile Remove groff from base 2017-06-07 23:00:34 +00:00
Makefile.depend
man.alias
master.passwd Capitalize "LDAP" in the description field of the _ypldap entry. 2016-05-10 12:47:36 +00:00
minfree
motd
netconfig
netstart Remove NATM configuration bits and assorted NATM and ATM remnants. 2017-04-25 21:59:34 +00:00
network.subr Remove NATM configuration bits and assorted NATM and ATM remnants. 2017-04-25 21:59:34 +00:00
networks
newsyslog.conf Handle the logfiles in newsyslog and syslogd conditionally, based on 2017-05-13 03:10:50 +00:00
nls.alias
nscd.conf
nsmb.conf
nsswitch.conf Implement an NSS backend for netgroups and add getnetgrent_r(3). 2016-06-09 01:28:44 +00:00
ntp.conf Update ntp.conf to use the ntpd pool feature. 2017-01-02 15:19:22 +00:00
opieaccess
pccard_ether Do not try to recreate wlan(4) interface if it already exists. 2016-12-04 15:58:34 +00:00
pf.os
phones
portsnap.conf Now that the portsnap buildbox is generating the raw bits for INDEX-12, 2016-08-14 05:18:38 +00:00
printcap
profile
protocols etc: minor spelling fixes. 2016-05-01 16:43:22 +00:00
rc Use checkyesno instead of rolling my own.. 2016-10-23 18:00:09 +00:00
rc.bsdextended
rc.firewall
rc.initdiskless etc: minor spelling fixes. 2016-05-01 16:43:22 +00:00
rc.resume
rc.sendmail
rc.shutdown
rc.subr rc.subr: Optimize repeated sourcing. 2017-06-11 19:06:07 +00:00
rc.suspend
regdomain.xml
remote
rpc
services Add an example inetd(8) entry for the Prometheus sysctl exporter. 2016-12-21 08:32:20 +00:00
shells
snmpd.config Move the mibII module up so uncommenting the bridge module works 2017-01-07 09:03:40 +00:00
sysctl.conf
syslog.conf Handle the logfiles in newsyslog and syslogd conditionally, based on 2017-05-13 03:10:50 +00:00
termcap.small