Module Name: src Committed By: martin Date: Tue May 14 11:33:43 UTC 2019
Modified Files: src/distrib/sets/lists/etc [netbsd-8]: mi src/etc/defaults [netbsd-8]: rc.conf src/etc/mtree [netbsd-8]: special src/etc/rc.d [netbsd-8]: Makefile src/share/man/man5 [netbsd-8]: rc.conf.5 src/usr.sbin/postinstall [netbsd-8]: postinstall Added Files: src/etc/rc.d [netbsd-8]: smtoff Log Message: Pull up following revision(s) (requested by maxv in ticket #1265): etc/rc.d/smtoff: revision 1.1 etc/rc.d/smtoff: revision 1.2 distrib/sets/lists/etc/mi: revision 1.258 etc/rc.d/smtoff: revision 1.3 etc/rc.d/smtoff: revision 1.4 etc/defaults/rc.conf: revision 1.148 etc/rc.d/Makefile: revision 1.103 usr.sbin/postinstall/postinstall: revision 1.226 etc/rc.d/Makefile: revision 1.104 etc/mtree/special: revision 1.167 share/man/man5/rc.conf.5: revision 1.180 Add smtoff, an rc.d script that disables Simultaneous Multi-Threading. It parses the output of cpuctl, and executes "cpuctl offline" for each CPU that has SmtID!=0. The default is "smtoff=NO", which means that SMT remains enabled. Restructure code a little. Use quoting everywhere possibly useful (always the right way, except in the few cases where it is wrong...) Avoid using cut & grep (from /usr/bin) so script could run before /usr is mounted (pity cpuctl is in /usr/sbin ...). Use sysctl -n rather than attempting to parse its output. install rc.d No change... Previous log message should have said: Install rc.d/smtoff I should know better! Don't rely upon the way the shell implements pipes. Skip the "error" printf from GetSmtId() as there is no easy portable way to avoid it occurring (there are complicated ways) - but we don't need it, there is no logical difference between "error" and "" so just use the latter (if we get an ID, good, if there is nothing, then there is none - saying 'error' does not mean anything.) Remove comment, since there is no parsing anymore. To generate a diff of this commit: cvs rdiff -u -r1.247 -r1.247.2.1 src/distrib/sets/lists/etc/mi cvs rdiff -u -r1.139 -r1.139.6.1 src/etc/defaults/rc.conf cvs rdiff -u -r1.160 -r1.160.4.1 src/etc/mtree/special cvs rdiff -u -r1.95 -r1.95.6.1 src/etc/rc.d/Makefile cvs rdiff -u -r0 -r1.4.2.2 src/etc/rc.d/smtoff cvs rdiff -u -r1.166 -r1.166.6.1 src/share/man/man5/rc.conf.5 cvs rdiff -u -r1.214.4.1 -r1.214.4.2 src/usr.sbin/postinstall/postinstall Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/etc/mi diff -u src/distrib/sets/lists/etc/mi:1.247 src/distrib/sets/lists/etc/mi:1.247.2.1 --- src/distrib/sets/lists/etc/mi:1.247 Sun May 21 15:28:38 2017 +++ src/distrib/sets/lists/etc/mi Tue May 14 11:33:42 2019 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.247 2017/05/21 15:28:38 riastradh Exp $ +# $NetBSD: mi,v 1.247.2.1 2019/05/14 11:33:42 martin Exp $ # # Note: end-user configuration files that are moved to another location # should not be marked "obsolete"; they should just be removed from @@ -283,6 +283,7 @@ ./etc/rc.d/screenblank etc-sys-rc ./etc/rc.d/sdpd etc-obsolete obsolete ./etc/rc.d/securelevel etc-sys-rc +./etc/rc.d/smtoff etc-sys-rc ./etc/rc.d/sshd etc-secsh-rc ./etc/rc.d/staticroute etc-sys-rc ./etc/rc.d/swap1 etc-sys-rc Index: src/etc/defaults/rc.conf diff -u src/etc/defaults/rc.conf:1.139 src/etc/defaults/rc.conf:1.139.6.1 --- src/etc/defaults/rc.conf:1.139 Sat Jan 7 20:00:33 2017 +++ src/etc/defaults/rc.conf Tue May 14 11:33:42 2019 @@ -1,4 +1,4 @@ -# $NetBSD: rc.conf,v 1.139 2017/01/07 20:00:33 christos Exp $ +# $NetBSD: rc.conf,v 1.139.6.1 2019/05/14 11:33:42 martin Exp $ # # /etc/defaults/rc.conf -- # default configuration of /etc/rc.conf @@ -380,6 +380,9 @@ random_seed=YES # Creating / updating of man page index on boot makemandb=YES +# Disable Simultaneous Multi-Threading +smtoff=NO + # blacklist daemon, needs npf blacklistd=NO Index: src/etc/mtree/special diff -u src/etc/mtree/special:1.160 src/etc/mtree/special:1.160.4.1 --- src/etc/mtree/special:1.160 Mon Feb 20 13:45:43 2017 +++ src/etc/mtree/special Tue May 14 11:33:43 2019 @@ -1,4 +1,4 @@ -# $NetBSD: special,v 1.160 2017/02/20 13:45:43 christos Exp $ +# $NetBSD: special,v 1.160.4.1 2019/05/14 11:33:43 martin Exp $ # @(#)special 8.2 (Berkeley) 1/23/94 # # This file may be overwritten on upgrades. @@ -281,6 +281,7 @@ ./etc/rc.d/savecore type=file mode=0555 ./etc/rc.d/screenblank type=file mode=0555 ./etc/rc.d/securelevel type=file mode=0555 +./etc/rc.d/smtoff type=file mode=0555 ./etc/rc.d/sshd type=file mode=0555 ./etc/rc.d/staticroute type=file mode=0555 ./etc/rc.d/swap1 type=file mode=0555 Index: src/etc/rc.d/Makefile diff -u src/etc/rc.d/Makefile:1.95 src/etc/rc.d/Makefile:1.95.6.1 --- src/etc/rc.d/Makefile:1.95 Thu Jan 5 14:39:09 2017 +++ src/etc/rc.d/Makefile Tue May 14 11:33:42 2019 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.95 2017/01/05 14:39:09 christos Exp $ +# $NetBSD: Makefile,v 1.95.6.1 2019/05/14 11:33:42 martin Exp $ .include <bsd.own.mk> @@ -35,7 +35,7 @@ CONFIGFILES=\ racoon rpcbind raidframe raidframeparity random_seed rarpd \ rbootd resize_root rndctl root route6d routed rtadvd \ rtclocaltime rwho \ - savecore screenblank securelevel sshd \ + savecore screenblank securelevel smtoff sshd \ staticroute swap1 swap2 sysctl sysdb syslogd \ timed tpctl ttys \ veriexec virecover wdogctl wpa_supplicant wscons wsmoused \ Index: src/share/man/man5/rc.conf.5 diff -u src/share/man/man5/rc.conf.5:1.166 src/share/man/man5/rc.conf.5:1.166.6.1 --- src/share/man/man5/rc.conf.5:1.166 Sat Dec 17 07:44:59 2016 +++ src/share/man/man5/rc.conf.5 Tue May 14 11:33:43 2019 @@ -1,4 +1,4 @@ -.\" $NetBSD: rc.conf.5,v 1.166 2016/12/17 07:44:59 maya Exp $ +.\" $NetBSD: rc.conf.5,v 1.166.6.1 2019/05/14 11:33:43 martin Exp $ .\" .\" Copyright (c) 1996 Matthew R. Green .\" All rights reserved. @@ -55,7 +55,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd December 17, 2016 +.Dd May 14, 2019 .Dt RC.CONF 5 .Os .Sh NAME @@ -621,6 +621,9 @@ A string. Flags to pass to the .Nm veriexecctl command. +.It Sy smtoff +Boolean value. +Disables SMT (Simultaneous Multi-Threading). .El .Ss Networking startup .Bl -tag -width net_interfaces Index: src/usr.sbin/postinstall/postinstall diff -u src/usr.sbin/postinstall/postinstall:1.214.4.1 src/usr.sbin/postinstall/postinstall:1.214.4.2 --- src/usr.sbin/postinstall/postinstall:1.214.4.1 Mon Jul 10 13:06:45 2017 +++ src/usr.sbin/postinstall/postinstall Tue May 14 11:33:43 2019 @@ -1,6 +1,6 @@ #!/bin/sh # -# $NetBSD: postinstall,v 1.214.4.1 2017/07/10 13:06:45 martin Exp $ +# $NetBSD: postinstall,v 1.214.4.2 2019/05/14 11:33:43 martin Exp $ # # Copyright (c) 2002-2015 The NetBSD Foundation, Inc. # All rights reserved. @@ -1457,6 +1457,7 @@ rwho savecore screenblank securelevel +smtoff sshd staticroute swap1 Added files: Index: src/etc/rc.d/smtoff diff -u /dev/null src/etc/rc.d/smtoff:1.4.2.2 --- /dev/null Tue May 14 11:33:43 2019 +++ src/etc/rc.d/smtoff Tue May 14 11:33:42 2019 @@ -0,0 +1,99 @@ +#!/bin/sh +# +# $NetBSD: smtoff,v 1.4.2.2 2019/05/14 11:33:42 martin Exp $ +# +# Public Domain. +# + +# PROVIDE: smtoff +# REQUIRE: root bootconf mountcritlocal tty + +$_rc_subr_loaded . /etc/rc.subr + +name="smtoff" +rcvar=$name + +start_cmd="smtoff_start" +stop_cmd="smtoff_stop" + +# ------------------------------------------------------------------------------ + +# +# The format of the output is: +# +# ... +# cpu0: SMT ID 1 +# ... +# +# Return the value. +# +GetSmtId() { + cpuctl identify "$1" | + while read cpuN smt id N junk + do + test -n "$junk" && continue + + case "${smt} ${id}" in + 'SMT ID') + case "$N" in + [0-9]|[1-9][0-9]|[1-9][0-9]*[0-9]) + printf %s "$N" + return + ;; + esac + ;; + esac + done +} + +CountCPUs() { + sysctl -n hw.ncpu +} + +# ------------------------------------------------------------------------------ + +# +# Disable SMT. We skip cpu0. +# +smtoff_start() +{ + ncpus=$(CountCPUs) + i=1 + + while [ "$i" -lt "$ncpus" ] + do + smtid=$(GetSmtId "$i" 2>/dev/null) + + case "$smtid" in + '') # Didn't get the ID? Then maybe no SMT. + ;; + + 0) # The first thread is never disabled. + ;; + + *) + cpuctl offline "$i" + ;; + esac + + i=$(($i+1)) + done +} + +# +# Enable SMT. We basically turn on each CPU. +# +smtoff_stop() +{ + ncpus=$(CountCPUs) + i=1 + + while [ "$i" -lt "$ncpus" ] + do + cpuctl online "$i" + i=$(($i+1)) + done +} + +load_rc_config $name +run_rc_command "$1"