From b6b0addd5eec25f950aacaadc786b79356932b3b Mon Sep 17 00:00:00 2001 From: Cameron Baird Date: Tue, 28 Jan 2025 21:23:52 +0000 Subject: [PATCH] config: add hypervisor_loglevel Implement HypervisorLoglevel config option for clh. Signed-off-by: Cameron Baird --- src/runtime/config/configuration-clh.toml.in | 5 +++++ src/runtime/pkg/katautils/config-settings.go.in | 1 + src/runtime/pkg/katautils/config.go | 16 ++++++++++++++++ src/runtime/pkg/katautils/config_test.go | 1 + src/runtime/virtcontainers/clh.go | 5 +++-- src/runtime/virtcontainers/hypervisor.go | 4 ++++ 6 files changed, 30 insertions(+), 2 deletions(-) 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 0378fead38..28809ca742 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 addd426013..b2fe14d323 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" ) @@ -126,6 +129,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"` @@ -545,6 +549,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 @@ -962,6 +974,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, @@ -1094,6 +1107,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, @@ -1248,6 +1262,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, @@ -1469,6 +1484,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 cad5e85d74..1e3ab54aa6 100644 --- a/src/runtime/virtcontainers/hypervisor.go +++ b/src/runtime/virtcontainers/hypervisor.go @@ -601,6 +601,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