From 8276db2ebe5a9d7124287d208413aac93c3e59ac Mon Sep 17 00:00:00 2001 From: Serge Logvinov Date: Thu, 2 Dec 2021 19:01:29 +0200 Subject: [PATCH] feat: add memory.min param It helps to configure memory.min cgroup parameter. Signed-off-by: Serge Logvinov --- v2/manager.go | 5 +++++ v2/memory.go | 7 +++++++ v2/memoryv2_test.go | 2 ++ 3 files changed, 14 insertions(+) diff --git a/v2/manager.go b/v2/manager.go index c08d9a7d..240a0ad0 100644 --- a/v2/manager.go +++ b/v2/manager.go @@ -761,6 +761,11 @@ func NewSystemd(slice, group string, pid int, resources *Resources) (*Manager, e properties = append(properties, newSystemdProperty("PIDs", []uint32{uint32(pid)})) } + if resources.Memory != nil && resources.Memory.Min != nil && *resources.Memory.Min != 0 { + properties = append(properties, + newSystemdProperty("MemoryMin", uint64(*resources.Memory.Min))) + } + if resources.Memory != nil && resources.Memory.Max != nil && *resources.Memory.Max != 0 { properties = append(properties, newSystemdProperty("MemoryMax", uint64(*resources.Memory.Max))) diff --git a/v2/memory.go b/v2/memory.go index 72f94b73..6f4733be 100644 --- a/v2/memory.go +++ b/v2/memory.go @@ -18,6 +18,7 @@ package v2 type Memory struct { Swap *int64 + Min *int64 Max *int64 Low *int64 High *int64 @@ -30,6 +31,12 @@ func (r *Memory) Values() (o []Value) { value: *r.Swap, }) } + if r.Min != nil { + o = append(o, Value{ + filename: "memory.min", + value: *r.Min, + }) + } if r.Max != nil { o = append(o, Value{ filename: "memory.max", diff --git a/v2/memoryv2_test.go b/v2/memoryv2_test.go index 58703a95..ada7c641 100644 --- a/v2/memoryv2_test.go +++ b/v2/memoryv2_test.go @@ -56,6 +56,7 @@ func TestSystemdCgroupMemoryController(t *testing.T) { group := fmt.Sprintf("testing-memory-%d.scope", os.Getpid()) res := Resources{ Memory: &Memory{ + Min: pointerInt64(16384), Max: pointerInt64(629145600), }, } @@ -63,5 +64,6 @@ func TestSystemdCgroupMemoryController(t *testing.T) { if err != nil { t.Fatal("failed to init new cgroup systemd manager: ", err) } + checkFileContent(t, c.path, "memory.min", "16384") checkFileContent(t, c.path, "memory.max", "629145600") }