Permalink
Browse files

appliance: Pass "quiet" option to kernel when !verbose.

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).
  • Loading branch information...
1 parent 1df34fd commit ed739e71f634b363c3cf6a0a4eca559eaae7f7b3 @rwmjones rwmjones committed Mar 17, 2016
Showing with 5 additions and 2 deletions.
  1. +2 −2 src/launch.c
  2. +3 −0 src/proto.c
View
@@ -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=" : "",
View
@@ -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)

0 comments on commit ed739e7

Please sign in to comment.