[Libguestfs] [PATCH 1/3] appliance: Pass "quiet" option to kernel when !verbose.

Richard W.M. Jones rjones at redhat.com
Thu Mar 17 10:08:41 UTC 2016


The quiet option suppresses kernel messages.  On my laptop it improves
appliance boot times by about 40% (3.5s -> 2.5s).

The emulated UART is slow and has a fixed, small FIFO (16 bytes).  But
it has the advantage of being a simple ISA device which is available
very early in boot, thus enabling us to diagnose early boot problems.
So the aim is to reduce our usage of this UART on fast paths.

Of course when we are in verbose mode, we should not add this flag
because we want to see all the messages.

This change is not entirely invisible:

(1) Progress messages use the "Linux version ..." string from kernel
output in order to determine part of where we are in the boot process.
This string will no longer be detected.  We should probably use a BIOS
message or maybe drop this altogether.  I have added a comment to the
code.

(2) It is possible for programs to be listening for
GUESTFS_EVENT_APPLIANCE events, and they will see fewer messages now
(although what kernel messages programs see is never defined).
---
 src/launch.c | 4 ++--
 src/proto.c  | 3 +++
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/launch.c b/src/launch.c
index 958d4b3..074ac6f 100644
--- a/src/launch.c
+++ b/src/launch.c
@@ -351,7 +351,7 @@ guestfs_int_appliance_command_line (guestfs_h *g, const char *appliance_dev,
      " cgroup_disable=memory"   /* saves us about 5 MB of RAM */
      "%s"                       /* root=appliance_dev */
      " %s"                      /* selinux */
-     "%s"                       /* verbose */
+     " %s"                      /* quiet/verbose */
      "%s"                       /* network */
      " TERM=%s"                 /* TERM environment variable */
      "%s%s"                     /* handle identifier */
@@ -362,7 +362,7 @@ guestfs_int_appliance_command_line (guestfs_h *g, const char *appliance_dev,
      lpj_s,
      root,
      g->selinux ? "selinux=1 enforcing=0" : "selinux=0",
-     g->verbose ? " guestfs_verbose=1" : "",
+     g->verbose ? "guestfs_verbose=1" : "quiet",
      g->enable_network ? " guestfs_network=1" : "",
      term ? term : "linux",
      STRNEQ (g->identifier, "") ? " guestfs_identifier=" : "",
diff --git a/src/proto.c b/src/proto.c
index 5213856..df7be89 100644
--- a/src/proto.c
+++ b/src/proto.c
@@ -129,6 +129,9 @@ guestfs_int_log_message_callback (guestfs_h *g, const char *buf, size_t len)
     const char *sentinel;
     size_t slen;
 
+    /* Since 2016-03, if !verbose, then we add the "quiet" flag to the
+     * kernel, so the following sentinel will never be produced. XXX
+     */
     sentinel = "Linux version"; /* kernel up */
     slen = strlen (sentinel);
     if (memmem (buf, len, sentinel, slen) != NULL)
-- 
2.5.0




More information about the Libguestfs mailing list