From 5010e3a368406f4a650def0cf787d9a6b422c9f1 Mon Sep 17 00:00:00 2001 From: Liam Merwick Date: Thu, 30 Jul 2020 14:57:39 +0100 Subject: [PATCH 1/3] vendor: update govmm Bring support for '--no-reboot' QEMU parameter (intel/govmm#131) shortlog: qemu: Add NoReboot config Knob for qemuParams Signed-off-by: Liam Merwick --- src/runtime/go.mod | 2 +- src/runtime/go.sum | 2 ++ src/runtime/vendor/github.com/intel/govmm/qemu/qemu.go | 7 +++++++ src/runtime/vendor/modules.txt | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/runtime/go.mod b/src/runtime/go.mod index 8a84ef9916..f2953bf03e 100644 --- a/src/runtime/go.mod +++ b/src/runtime/go.mod @@ -32,7 +32,7 @@ require ( github.com/gogo/googleapis v1.4.0 // indirect github.com/gogo/protobuf v1.3.1 github.com/hashicorp/go-multierror v1.0.0 - github.com/intel/govmm v0.0.0-20200724170648-af9e34b91ae9 + github.com/intel/govmm v0.0.0-20200728135209-6c3315ba8a42 github.com/mdlayher/vsock v0.0.0-20191108225356-d9c65923cb8f github.com/opencontainers/image-spec v1.0.1 // indirect github.com/opencontainers/runc v1.0.0-rc9.0.20200102164712-2b52db75279c diff --git a/src/runtime/go.sum b/src/runtime/go.sum index 3ff36b9adf..c9415f25f1 100644 --- a/src/runtime/go.sum +++ b/src/runtime/go.sum @@ -166,6 +166,8 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/intel/govmm v0.0.0-20200724170648-af9e34b91ae9 h1:GSRnVLRNweZV3f8Vo3vtMlPsuzvpj57Gj7Y7TkGVO6U= github.com/intel/govmm v0.0.0-20200724170648-af9e34b91ae9/go.mod h1:QKGWoQtjvkvFtzP6ybiM3lxUHqf83Sv3oLqyELUKH4g= +github.com/intel/govmm v0.0.0-20200728135209-6c3315ba8a42 h1:Yu3/MlZl/kKE0Ipgio/KVorMIrjeHTVOG4+9WAddgOQ= +github.com/intel/govmm v0.0.0-20200728135209-6c3315ba8a42/go.mod h1:QKGWoQtjvkvFtzP6ybiM3lxUHqf83Sv3oLqyELUKH4g= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= diff --git a/src/runtime/vendor/github.com/intel/govmm/qemu/qemu.go b/src/runtime/vendor/github.com/intel/govmm/qemu/qemu.go index 4716595cd7..d5a01c87a8 100644 --- a/src/runtime/vendor/github.com/intel/govmm/qemu/qemu.go +++ b/src/runtime/vendor/github.com/intel/govmm/qemu/qemu.go @@ -2122,6 +2122,9 @@ type Knobs struct { // Realtime will enable realtime QEMU Realtime bool + + // Exit instead of rebooting + NoReboot bool } // IOThread allows IO to be performed on a separate thread. @@ -2457,6 +2460,10 @@ func (config *Config) appendKnobs() { config.qemuParams = append(config.qemuParams, "-nographic") } + if config.Knobs.NoReboot { + config.qemuParams = append(config.qemuParams, "--no-reboot") + } + if config.Knobs.Daemonize { config.qemuParams = append(config.qemuParams, "-daemonize") } diff --git a/src/runtime/vendor/modules.txt b/src/runtime/vendor/modules.txt index c7d0715550..5b25ac7e72 100644 --- a/src/runtime/vendor/modules.txt +++ b/src/runtime/vendor/modules.txt @@ -222,7 +222,7 @@ github.com/hashicorp/errwrap # github.com/hashicorp/go-multierror v1.0.0 ## explicit github.com/hashicorp/go-multierror -# github.com/intel/govmm v0.0.0-20200724170648-af9e34b91ae9 +# github.com/intel/govmm v0.0.0-20200728135209-6c3315ba8a42 ## explicit github.com/intel/govmm/qemu # github.com/konsorten/go-windows-terminal-sequences v1.0.1 From 5726926201b601211862e982066f4a6816547578 Mon Sep 17 00:00:00 2001 From: Liam Merwick Date: Thu, 30 Jul 2020 14:59:30 +0100 Subject: [PATCH 2/3] qemu: Add test for qemuConfig Knobs Add TestQemuKnobs unit test to validate parameters passed to QEMU. Signed-off-by: Liam Merwick --- src/runtime/virtcontainers/qemu_test.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/runtime/virtcontainers/qemu_test.go b/src/runtime/virtcontainers/qemu_test.go index 9d13988d4f..430a5419dd 100644 --- a/src/runtime/virtcontainers/qemu_test.go +++ b/src/runtime/virtcontainers/qemu_test.go @@ -187,6 +187,23 @@ func TestQemuMemoryTopology(t *testing.T) { assert.Exactly(memory, expectedOut) } +func TestQemuKnobs(t *testing.T) { + assert := assert.New(t) + + sandbox, err := createQemuSandboxConfig() + assert.NoError(err) + + q := &qemu{ + store: sandbox.newStore, + } + err = q.createSandbox(context.Background(), sandbox.id, NetworkNamespace{}, &sandbox.config.HypervisorConfig) + assert.NoError(err) + + assert.Equal(q.qemuConfig.Knobs.NoUserConfig, true) + assert.Equal(q.qemuConfig.Knobs.NoDefaults, true) + assert.Equal(q.qemuConfig.Knobs.NoGraphic, true) +} + func testQemuAddDevice(t *testing.T, devInfo interface{}, devType deviceType, expected []govmmQemu.Device) { assert := assert.New(t) q := &qemu{ From c15ef219e521a1f23de8bef57b273c9a632c0dab Mon Sep 17 00:00:00 2001 From: Liam Merwick Date: Thu, 30 Jul 2020 15:01:47 +0100 Subject: [PATCH 3/3] qemu: Set govmmQemu NoReboot config Knob The Kata architecture does not support rebooting VMs (the lifecycle being start/exec/kill) and if a VM is killed (e.g. using sysrq-trigger), the VM does not exit fully and other layers do not notice the state change. Set the NoReboot config Knob so that govmmQemu.LaunchQemu() runs QEMU with the --no-reboot command-line option. Fixes: #2866 Signed-off-by: Liam Merwick --- src/runtime/virtcontainers/qemu.go | 1 + src/runtime/virtcontainers/qemu_test.go | 1 + 2 files changed, 2 insertions(+) diff --git a/src/runtime/virtcontainers/qemu.go b/src/runtime/virtcontainers/qemu.go index 74b83c1bdd..f1a3cb1d57 100644 --- a/src/runtime/virtcontainers/qemu.go +++ b/src/runtime/virtcontainers/qemu.go @@ -481,6 +481,7 @@ func (q *qemu) createSandbox(ctx context.Context, id string, networkNS NetworkNa NoUserConfig: true, NoDefaults: true, NoGraphic: true, + NoReboot: true, Daemonize: true, MemPrealloc: q.config.MemPrealloc, HugePages: q.config.HugePages, diff --git a/src/runtime/virtcontainers/qemu_test.go b/src/runtime/virtcontainers/qemu_test.go index 430a5419dd..15e4de64c1 100644 --- a/src/runtime/virtcontainers/qemu_test.go +++ b/src/runtime/virtcontainers/qemu_test.go @@ -202,6 +202,7 @@ func TestQemuKnobs(t *testing.T) { assert.Equal(q.qemuConfig.Knobs.NoUserConfig, true) assert.Equal(q.qemuConfig.Knobs.NoDefaults, true) assert.Equal(q.qemuConfig.Knobs.NoGraphic, true) + assert.Equal(q.qemuConfig.Knobs.NoReboot, true) } func testQemuAddDevice(t *testing.T, devInfo interface{}, devType deviceType, expected []govmmQemu.Device) {