From ddd92caf18e829d45668e90b80bc5f031cb4d45d Mon Sep 17 00:00:00 2001 From: Raghavendra K T Date: Thu, 11 Jun 2015 16:56:03 +0530 Subject: [PATCH] Add the memory swappiness tuning support to libcontainer Signed-off-by: Raghavendra K T --- cgroups/fs/memory.go | 5 +++++ cgroups/fs/memory_test.go | 28 ++++++++++++++++++++++++++++ cgroups/systemd/apply_systemd.go | 6 ++++++ configs/cgroup.go | 3 +++ 4 files changed, 42 insertions(+) diff --git a/cgroups/fs/memory.go b/cgroups/fs/memory.go index 2e417877f..dccdee695 100644 --- a/cgroups/fs/memory.go +++ b/cgroups/fs/memory.go @@ -62,6 +62,11 @@ func (s *MemoryGroup) Set(path string, cgroup *configs.Cgroup) error { return err } } + if cgroup.MemorySwappiness >= 0 && cgroup.MemorySwappiness <= 100 { + if err := writeFile(path, "memory.swappiness", strconv.FormatInt(cgroup.MemorySwappiness, 10)); err != nil { + return err + } + } return nil } diff --git a/cgroups/fs/memory_test.go b/cgroups/fs/memory_test.go index 527cc0894..25cd5a1dc 100644 --- a/cgroups/fs/memory_test.go +++ b/cgroups/fs/memory_test.go @@ -113,6 +113,34 @@ func TestMemorySetKernelMemory(t *testing.T) { } } +func TestMemorySetMemorySwappinessDefault(t *testing.T) { + helper := NewCgroupTestUtil("memory", t) + defer helper.cleanup() + + const ( + swappinessBefore = 60 //deafult is 60 + swappinessAfter = 0 + ) + + helper.writeFileContents(map[string]string{ + "memory.swappiness": strconv.Itoa(swappinessBefore), + }) + + helper.CgroupData.c.Memory = swappinessAfter + memory := &MemoryGroup{} + if err := memory.Set(helper.CgroupPath, helper.CgroupData.c); err != nil { + t.Fatal(err) + } + + value, err := getCgroupParamUint(helper.CgroupPath, "memory.swappiness") + if err != nil { + t.Fatalf("Failed to parse memory.swappiness - %s", err) + } + if value != swappinessAfter { + t.Fatal("Got the wrong value, set memory.swappiness failed.") + } +} + func TestMemoryStats(t *testing.T) { helper := NewCgroupTestUtil("memory", t) defer helper.cleanup() diff --git a/cgroups/systemd/apply_systemd.go b/cgroups/systemd/apply_systemd.go index c139b02b4..fd7f680b5 100644 --- a/cgroups/systemd/apply_systemd.go +++ b/cgroups/systemd/apply_systemd.go @@ -482,6 +482,12 @@ func joinMemory(c *configs.Cgroup, pid int) error { return err } } + if c.MemorySwappiness >= 0 && c.MemorySwappiness <= 100 { + err = writeFile(path, "memory.swappiness", strconv.FormatInt(c.MemorySwappiness, 10)) + if err != nil { + return err + } + } return nil } diff --git a/configs/cgroup.go b/configs/cgroup.go index 88b2a71d8..140b530d6 100644 --- a/configs/cgroup.go +++ b/configs/cgroup.go @@ -87,6 +87,9 @@ type Cgroup struct { // Whether to disable OOM Killer OomKillDisable bool `json:"oom_kill_disable"` + // Tuning swappiness behaviour per cgroup + MemorySwappiness int64 `json:"memory_swappiness"` + // Set priority of network traffic for container NetPrioIfpriomap []*IfPrioMap `json:"net_prio_ifpriomap"`