From 5540a6c7f72af8d6e03b3f8ae3a71ab3e55f95e6 Mon Sep 17 00:00:00 2001 From: Arthur Petukhovsky Date: Mon, 17 Feb 2025 21:07:46 +0000 Subject: [PATCH] neonvm: Add Guest.MemhpAutoMovableRatio (#1271) Allow to override default movable ratio that is set in neonvm-controller. related to https://github.com/neondatabase/cloud/issues/23865 --- neonvm/apis/neonvm/v1/virtualmachine_types.go | 6 +++++- neonvm/apis/neonvm/v1/zz_generated.deepcopy.go | 5 +++++ neonvm/config/crd/bases/vm.neon.tech_virtualmachines.yaml | 6 ++++++ pkg/neonvm/controllers/vm_controller.go | 8 +++++++- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/neonvm/apis/neonvm/v1/virtualmachine_types.go b/neonvm/apis/neonvm/v1/virtualmachine_types.go index 6e2f0f29f..d93386bf0 100644 --- a/neonvm/apis/neonvm/v1/virtualmachine_types.go +++ b/neonvm/apis/neonvm/v1/virtualmachine_types.go @@ -240,7 +240,11 @@ const ( type Guest struct { // +optional KernelImage *string `json:"kernelImage,omitempty"` - + // Set the maximum MOVABLE:KERNEL memory ratio in %. + // Kernel default is 301%. + // See https://docs.kernel.org/admin-guide/mm/memory-hotplug.html + // +optional + MemhpAutoMovableRatio *string `json:"memhpAutoMovableRatio,omitempty"` // +optional AppendKernelCmdline *string `json:"appendKernelCmdline,omitempty"` diff --git a/neonvm/apis/neonvm/v1/zz_generated.deepcopy.go b/neonvm/apis/neonvm/v1/zz_generated.deepcopy.go index 5c5e3a0c5..53679f640 100644 --- a/neonvm/apis/neonvm/v1/zz_generated.deepcopy.go +++ b/neonvm/apis/neonvm/v1/zz_generated.deepcopy.go @@ -156,6 +156,11 @@ func (in *Guest) DeepCopyInto(out *Guest) { *out = new(string) **out = **in } + if in.MemhpAutoMovableRatio != nil { + in, out := &in.MemhpAutoMovableRatio, &out.MemhpAutoMovableRatio + *out = new(string) + **out = **in + } if in.AppendKernelCmdline != nil { in, out := &in.AppendKernelCmdline, &out.AppendKernelCmdline *out = new(string) diff --git a/neonvm/config/crd/bases/vm.neon.tech_virtualmachines.yaml b/neonvm/config/crd/bases/vm.neon.tech_virtualmachines.yaml index ee4171001..e79496843 100644 --- a/neonvm/config/crd/bases/vm.neon.tech_virtualmachines.yaml +++ b/neonvm/config/crd/bases/vm.neon.tech_virtualmachines.yaml @@ -2729,6 +2729,12 @@ spec: type: array kernelImage: type: string + memhpAutoMovableRatio: + description: |- + Set the maximum MOVABLE:KERNEL memory ratio in %. + Kernel default is 301%. + See https://docs.kernel.org/admin-guide/mm/memory-hotplug.html + type: string memorySlotSize: anyOf: - type: integer diff --git a/pkg/neonvm/controllers/vm_controller.go b/pkg/neonvm/controllers/vm_controller.go index 6eeefb2e8..54fdc8bb0 100644 --- a/pkg/neonvm/controllers/vm_controller.go +++ b/pkg/neonvm/controllers/vm_controller.go @@ -1422,10 +1422,16 @@ func podSpec( if config.DisableRunnerCgroup { cmd = append(cmd, "-skip-cgroup-management") } + + memhpAutoMovableRatio := config.MemhpAutoMovableRatio + if specValue := vm.Spec.Guest.MemhpAutoMovableRatio; specValue != nil { + memhpAutoMovableRatio = *specValue + } + cmd = append( cmd, "-qemu-disk-cache-settings", config.QEMUDiskCacheSettings, - "-memhp-auto-movable-ratio", config.MemhpAutoMovableRatio, + "-memhp-auto-movable-ratio", memhpAutoMovableRatio, ) // put these last, so that the earlier args are easier to see (because these // can get quite large)