git: 7457840230c5 - main - loader: Set twiddle globaldiv to 16 by default

Colin Percival cperciva at FreeBSD.org
Tue Sep 28 22:24:17 UTC 2021


The branch main has been updated by cperciva:

URL: https://cgit.FreeBSD.org/src/commit/?id=7457840230c5a470ee5df8abed6ab59c4d008a45

commit 7457840230c5a470ee5df8abed6ab59c4d008a45
Author:     Colin Percival <cperciva at FreeBSD.org>
AuthorDate: 2021-09-28 18:39:59 +0000
Commit:     Colin Percival <cperciva at FreeBSD.org>
CommitDate: 2021-09-28 22:24:02 +0000

    loader: Set twiddle globaldiv to 16 by default
    
    Booting FreeBSD on an EC2 c5.xlarge instance, the loader "twiddles"
    810 times over the course of 510 ms, a rate of 1.59 kHz. Even accepting
    that many systems are slower than this particular VM and will take
    longer to boot (especially if using spinning-rust disks), this seems
    like an unhelpfully large amount of twiddling when compared to the
    ~60 Hz frame rate of many displays; printing the twiddles also consumes
    roughly 10% of the boot time on the aforementioned VM.
    
    Setting the default globaldiv to 16 dramatically reduces the time spent
    printing twiddles to the console while still twiddling at roughly 100
    Hz; this should be ample even for systems which take longer to boot and
    consequently twiddle slower.
    
    Note that this can adjusted via the twiddle_divisor variable in
    loader.conf, but that file is not processed until nearly halfway
    through the loader's runtime.
    
    Reviewed by:    allanjude, jrtc27, kevans
    MFC after:      1 week
    Sponsored by:   https://www.patreon.com/cperciva
    Differential Revision:  <https://reviews.freebsd.org/D32163>
---
 stand/common/console.c     | 2 +-
 stand/defaults/loader.conf | 3 ++-
 stand/libsa/twiddle.c      | 2 +-
 stand/man/loader.8         | 3 ++-
 stand/man/loader_simp.8    | 3 ++-
 5 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/stand/common/console.c b/stand/common/console.c
index 7886f9386c14..ff864276f96c 100644
--- a/stand/common/console.c
+++ b/stand/common/console.c
@@ -56,7 +56,7 @@ cons_probe(void)
 	TSENTER();
 
 	/* We want a callback to install the new value when this var changes. */
-	env_setenv("twiddle_divisor", EV_VOLATILE, "1", twiddle_set,
+	env_setenv("twiddle_divisor", EV_VOLATILE, "16", twiddle_set,
 	    env_nounset);
 
 	/* Do all console probes */
diff --git a/stand/defaults/loader.conf b/stand/defaults/loader.conf
index 7bca621e6703..6feb909d708a 100644
--- a/stand/defaults/loader.conf
+++ b/stand/defaults/loader.conf
@@ -111,7 +111,8 @@ module_blacklist="drm drm2 radeonkms i915kms amdgpu"	# Loader module blacklist
 #tftp.blksize="1428"		# Set the RFC 2348 TFTP block size.
 				# If the TFTP server does not support RFC 2348,
 				# the block size is set to 512. Valid: (8,9007)
-#twiddle_divisor="1"		# >1 means slow down the progress indicator.
+#twiddle_divisor="16"		# >16 slows down the progress indicator;
+				# <16 speeds up the progress indicator.
 
 ###  Kernel settings  ########################################
 # The following boot_ variables are enabled by setting them to any value.
diff --git a/stand/libsa/twiddle.c b/stand/libsa/twiddle.c
index 7565295fa1a3..60022e4c8167 100644
--- a/stand/libsa/twiddle.c
+++ b/stand/libsa/twiddle.c
@@ -42,7 +42,7 @@ __FBSDID("$FreeBSD$");
 
 /* Extra functions from NetBSD standalone printf.c */
 
-static u_int globaldiv;
+static u_int globaldiv = 16;
 
 void
 twiddle(u_int callerdiv)
diff --git a/stand/man/loader.8 b/stand/man/loader.8
index e658b41f8338..c606068941a7 100644
--- a/stand/man/loader.8
+++ b/stand/man/loader.8
@@ -644,7 +644,8 @@ Throttles the output of the
 I/O progress indicator displayed while loading the kernel and modules.
 This is useful on slow serial consoles where the time spent waiting for
 these characters to be written can add up to many seconds.
-The default is 1 (full speed); a value of 2 spins half as fast, and so on.
+The default is 16; a value of 32 spins half as fast,
+while a value of 8 spins twice as fast.
 .It Va vm.kmem_size
 Sets the size of kernel memory (bytes).
 This overrides the value determined when the kernel was compiled.
diff --git a/stand/man/loader_simp.8 b/stand/man/loader_simp.8
index 689996f244fd..ba0ba76e8f88 100644
--- a/stand/man/loader_simp.8
+++ b/stand/man/loader_simp.8
@@ -624,7 +624,8 @@ Throttles the output of the
 I/O progress indicator displayed while loading the kernel and modules.
 This is useful on slow serial consoles where the time spent waiting for
 these characters to be written can add up to many seconds.
-The default is 1 (full speed); a value of 2 spins half as fast, and so on.
+The default is 16; a value of 32 spins half as fast,
+while a value of 8 spins twice as fast.
 .It Va vm.kmem_size
 Sets the size of kernel memory (bytes).
 This overrides the value determined when the kernel was compiled.


More information about the dev-commits-src-all mailing list