Module Name:    src
Committed By:   maxv
Date:           Sat May 11 19:31:04 UTC 2019

Modified Files:
        src/distrib/sets/lists/etc: mi
        src/etc/defaults: rc.conf
        src/etc/mtree: special
        src/share/man/man5: rc.conf.5
        src/usr.sbin/postinstall: postinstall
Added Files:
        src/etc/rc.d: smtoff

Log Message:
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.


To generate a diff of this commit:
cvs rdiff -u -r1.257 -r1.258 src/distrib/sets/lists/etc/mi
cvs rdiff -u -r1.147 -r1.148 src/etc/defaults/rc.conf
cvs rdiff -u -r1.166 -r1.167 src/etc/mtree/special
cvs rdiff -u -r0 -r1.1 src/etc/rc.d/smtoff
cvs rdiff -u -r1.179 -r1.180 src/share/man/man5/rc.conf.5
cvs rdiff -u -r1.225 -r1.226 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.257 src/distrib/sets/lists/etc/mi:1.258
--- src/distrib/sets/lists/etc/mi:1.257	Thu Apr 25 08:56:21 2019
+++ src/distrib/sets/lists/etc/mi	Sat May 11 19:31:03 2019
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.257 2019/04/25 08:56:21 roy Exp $
+# $NetBSD: mi,v 1.258 2019/05/11 19:31:03 maxv Exp $
 #
 # Note: end-user configuration files that are moved to another location
 #	should not be marked "obsolete"; they should just be removed from
@@ -299,6 +299,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.147 src/etc/defaults/rc.conf:1.148
--- src/etc/defaults/rc.conf:1.147	Sat Jan 12 17:38:36 2019
+++ src/etc/defaults/rc.conf	Sat May 11 19:31:03 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: rc.conf,v 1.147 2019/01/12 17:38:36 roy Exp $
+#	$NetBSD: rc.conf,v 1.148 2019/05/11 19:31:03 maxv Exp $
 #
 # /etc/defaults/rc.conf --
 #	default configuration of /etc/rc.conf
@@ -385,6 +385,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.166 src/etc/mtree/special:1.167
--- src/etc/mtree/special:1.166	Sat May  4 08:26:51 2019
+++ src/etc/mtree/special	Sat May 11 19:31:03 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: special,v 1.166 2019/05/04 08:26:51 mrg Exp $
+#	$NetBSD: special,v 1.167 2019/05/11 19:31:03 maxv Exp $
 #	@(#)special	8.2 (Berkeley) 1/23/94
 #
 # This file may be overwritten on upgrades.
@@ -286,6 +286,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/share/man/man5/rc.conf.5
diff -u src/share/man/man5/rc.conf.5:1.179 src/share/man/man5/rc.conf.5:1.180
--- src/share/man/man5/rc.conf.5:1.179	Sat Oct 20 08:47:03 2018
+++ src/share/man/man5/rc.conf.5	Sat May 11 19:31:03 2019
@@ -1,4 +1,4 @@
-.\"	$NetBSD: rc.conf.5,v 1.179 2018/10/20 08:47:03 wiz Exp $
+.\"	$NetBSD: rc.conf.5,v 1.180 2019/05/11 19:31:03 maxv 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 October 19, 2018
+.Dd May 11, 2019
 .Dt RC.CONF 5
 .Os
 .Sh NAME
@@ -673,6 +673,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.225 src/usr.sbin/postinstall/postinstall:1.226
--- src/usr.sbin/postinstall/postinstall:1.225	Thu Apr 11 14:45:58 2019
+++ src/usr.sbin/postinstall/postinstall	Sat May 11 19:31:03 2019
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $NetBSD: postinstall,v 1.225 2019/04/11 14:45:58 martin Exp $
+# $NetBSD: postinstall,v 1.226 2019/05/11 19:31:03 maxv Exp $
 #
 # Copyright (c) 2002-2015 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -1473,6 +1473,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.1
--- /dev/null	Sat May 11 19:31:04 2019
+++ src/etc/rc.d/smtoff	Sat May 11 19:31:03 2019
@@ -0,0 +1,101 @@
+#!/bin/sh
+#
+# $NetBSD: smtoff,v 1.1 2019/05/11 19:31:03 maxv 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() {
+	smtid=$(cpuctl identify $1 | grep "SMT ID" | cut -d " " -f 4)
+	case $smtid in
+		[0-9]*)
+			echo "$smtid" ;;
+		*)
+			echo "error" ;;
+	esac
+}
+
+#
+# The format of the output is:
+#
+#     hw.ncpu = 80
+#
+# Return the value.
+#
+CountCPUs() {
+	ncpus=$(sysctl hw.ncpu | cut -d " " -f 3)
+	echo "$ncpus"
+}
+
+# ------------------------------------------------------------------------------
+
+#
+# Disable SMT. We skip cpu0.
+#
+smtoff_start()
+{
+	ncpus=$(CountCPUs)
+	i=1
+
+	while [ $i -lt $ncpus ]
+	do
+		smtid=$(GetSmtId "$i")
+
+		# Didn't get the ID? Then maybe no SMT.
+		if [ "$smtid" = "error" ]; then
+			i=$(($i+1))
+			continue
+		fi
+
+		# The first thread is never disabled.
+		if [ $smtid -eq 0 ]; then
+			i=$(($i+1))
+			continue
+		fi
+
+		cmd="cpuctl offline $i"
+		$cmd
+		i=$(($i+1))
+	done
+}
+
+#
+# Enable SMT. We basically turn on each CPU.
+#
+smtoff_stop()
+{
+	ncpus=$(CountCPUs)
+	i=1
+
+	while [ $i -lt $ncpus ]
+	do
+		cmd="cpuctl online $i"
+		$cmd
+		i=$(($i+1))
+	done
+}
+
+load_rc_config $name
+run_rc_command "$1"

Reply via email to