diff --git a/src/runtime/config/configuration-clh.toml.in b/src/runtime/config/configuration-clh.toml.in index efbb9bfac4..204b2fb700 100644 --- a/src/runtime/config/configuration-clh.toml.in +++ b/src/runtime/config/configuration-clh.toml.in @@ -205,6 +205,11 @@ block_device_driver = "virtio-blk" # Default false #enable_debug = true +# This option specifies the loglevel of the hypervisor +# +# Default 1 +#hypervisor_loglevel = 1 + # Enable hot-plugging of VFIO devices to a root-port. # The default setting is "no-port" #hot_plug_vfio = "root-port" diff --git a/src/runtime/pkg/katautils/config-settings.go.in b/src/runtime/pkg/katautils/config-settings.go.in index df8e9bd636..55438f5007 100644 --- a/src/runtime/pkg/katautils/config-settings.go.in +++ b/src/runtime/pkg/katautils/config-settings.go.in @@ -63,6 +63,7 @@ const defaultVCPUCount uint32 = 1 const defaultMaxVCPUCount uint32 = 0 const defaultMemSize uint32 = 2048 // MiB const defaultMemSlots uint32 = 10 +const defaultHypervisorLoglevel uint32 = 1 const defaultMemOffset uint64 = 0 // MiB const defaultVirtioMem bool = false const defaultBridgesCount uint32 = 1 diff --git a/src/runtime/pkg/katautils/config.go b/src/runtime/pkg/katautils/config.go index 1946c71cae..648b40435d 100644 --- a/src/runtime/pkg/katautils/config.go +++ b/src/runtime/pkg/katautils/config.go @@ -61,6 +61,9 @@ const ( maxPCIeRootPorts uint32 = 16 maxPCIeSwitchPorts uint32 = 16 + // the maximum valid loglevel for the hypervisor + maxHypervisorLoglevel uint32 = 3 + errInvalidHypervisorPrefix = "configuration file contains invalid hypervisor section" ) @@ -125,6 +128,7 @@ type hypervisor struct { NetRateLimiterBwOneTimeBurst int64 `toml:"net_rate_limiter_bw_one_time_burst"` NetRateLimiterOpsMaxRate int64 `toml:"net_rate_limiter_ops_max_rate"` NetRateLimiterOpsOneTimeBurst int64 `toml:"net_rate_limiter_ops_one_time_burst"` + HypervisorLoglevel uint32 `toml:"hypervisor_loglevel"` VirtioFSCacheSize uint32 `toml:"virtio_fs_cache_size"` VirtioFSQueueSize uint32 `toml:"virtio_fs_queue_size"` DefaultMaxVCPUs uint32 `toml:"default_maxvcpus"` @@ -516,6 +520,14 @@ func (h hypervisor) defaultBridges() uint32 { return h.DefaultBridges } +func (h hypervisor) defaultHypervisorLoglevel() uint32 { + if h.HypervisorLoglevel > maxHypervisorLoglevel { + return maxHypervisorLoglevel + } + + return h.HypervisorLoglevel +} + func (h hypervisor) defaultVirtioFSCache() string { if h.VirtioFSCache == "" { return defaultVirtioFSCacheMode @@ -927,6 +939,7 @@ func newQemuHypervisorConfig(h hypervisor) (vc.HypervisorConfig, error) { SharedFS: sharedFS, VirtioFSDaemon: h.VirtioFSDaemon, VirtioFSDaemonList: h.VirtioFSDaemonList, + HypervisorLoglevel: h.defaultHypervisorLoglevel(), VirtioFSCacheSize: h.VirtioFSCacheSize, VirtioFSCache: h.defaultVirtioFSCache(), VirtioFSQueueSize: h.VirtioFSQueueSize, @@ -1059,6 +1072,7 @@ func newClhHypervisorConfig(h hypervisor) (vc.HypervisorConfig, error) { SharedFS: sharedFS, VirtioFSDaemon: h.VirtioFSDaemon, VirtioFSDaemonList: h.VirtioFSDaemonList, + HypervisorLoglevel: h.defaultHypervisorLoglevel(), VirtioFSCacheSize: h.VirtioFSCacheSize, VirtioFSCache: h.VirtioFSCache, MemPrealloc: h.MemPrealloc, @@ -1213,6 +1227,7 @@ func newStratovirtHypervisorConfig(h hypervisor) (vc.HypervisorConfig, error) { SharedFS: sharedFS, VirtioFSDaemon: h.VirtioFSDaemon, VirtioFSDaemonList: h.VirtioFSDaemonList, + HypervisorLoglevel: h.defaultHypervisorLoglevel(), VirtioFSCacheSize: h.VirtioFSCacheSize, VirtioFSCache: h.defaultVirtioFSCache(), VirtioFSExtraArgs: h.VirtioFSExtraArgs, @@ -1434,6 +1449,7 @@ func GetDefaultHypervisorConfig() vc.HypervisorConfig { GuestHookPath: defaultGuestHookPath, VhostUserStorePath: defaultVhostUserStorePath, VhostUserDeviceReconnect: defaultVhostUserDeviceReconnect, + HypervisorLoglevel: defaultHypervisorLoglevel, VirtioFSCache: defaultVirtioFSCacheMode, DisableImageNvdimm: defaultDisableImageNvdimm, RxRateLimiterMaxRate: defaultRxRateLimiterMaxRate, diff --git a/src/runtime/pkg/katautils/config_test.go b/src/runtime/pkg/katautils/config_test.go index 22267b755b..714cba9c77 100644 --- a/src/runtime/pkg/katautils/config_test.go +++ b/src/runtime/pkg/katautils/config_test.go @@ -570,6 +570,7 @@ func TestMinimalRuntimeConfig(t *testing.T) { Msize9p: defaultMsize9p, GuestHookPath: defaultGuestHookPath, VhostUserStorePath: defaultVhostUserStorePath, + HypervisorLoglevel: defaultHypervisorLoglevel, VirtioFSCache: defaultVirtioFSCacheMode, BlockDeviceAIO: defaultBlockDeviceAIO, DisableGuestSeLinux: defaultDisableGuestSeLinux, diff --git a/src/runtime/virtcontainers/clh.go b/src/runtime/virtcontainers/clh.go index aa16fecaeb..cbb9460dfe 100644 --- a/src/runtime/virtcontainers/clh.go +++ b/src/runtime/virtcontainers/clh.go @@ -1362,7 +1362,7 @@ func (clh *cloudHypervisor) launchClh() error { } args := []string{cscAPIsocket, clh.state.apiSocket} - if clh.config.Debug { + if clh.config.Debug && clh.config.HypervisorLoglevel > 0 { // Cloud hypervisor log levels // 'v' occurrences increase the level //0 => Warn @@ -1382,7 +1382,8 @@ func (clh *cloudHypervisor) launchClh() error { // output. For further details, see the discussion on: // // https://github.com/kata-containers/kata-containers/pull/2751 - args = append(args, "-v") + verbosityString := fmt.Sprintf("-%s", strings.Repeat("v", int(clh.config.HypervisorLoglevel))) + args = append(args, verbosityString) } // Enable the `seccomp` feature from Cloud Hypervisor by default diff --git a/src/runtime/virtcontainers/hypervisor.go b/src/runtime/virtcontainers/hypervisor.go index 3bc5367d56..8297301645 100644 --- a/src/runtime/virtcontainers/hypervisor.go +++ b/src/runtime/virtcontainers/hypervisor.go @@ -597,6 +597,10 @@ type HypervisorConfig struct { // enable debug output where available. Debug bool + // HypervisorLoglevel determines the level of logging emitted + // from the hypervisor. Accepts values 0-3. + HypervisorLoglevel uint32 + // MemPrealloc specifies if the memory should be pre-allocated MemPrealloc bool