mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Add minimum limit for memory reservation
Kernel has no limit for memory reservation, but in different kernel versions, the default behavior is different. On kernel 3.13, docker run --rm --memory-reservation 1k busybox cat /sys/fs/cgroup/memory/memory.soft_limit_in_bytes the output would be 4096, but on kernel 4.1, the output is 0. Since we have minimum limit for memory and kernel memory, we can have this limit for memory reservation as well, to make the behavior consistent. Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
This commit is contained in:
parent
fc9912fd00
commit
50a6181005
2 changed files with 8 additions and 0 deletions
|
@ -355,6 +355,9 @@ func verifyContainerResources(resources *containertypes.Resources, sysInfo *sysi
|
|||
logrus.Warnf("Your kernel does not support memory soft limit capabilities. Limitation discarded.")
|
||||
resources.MemoryReservation = 0
|
||||
}
|
||||
if resources.MemoryReservation > 0 && resources.MemoryReservation < linuxMinMemory {
|
||||
return warnings, fmt.Errorf("Minimum memory reservation allowed is 4MB")
|
||||
}
|
||||
if resources.Memory > 0 && resources.MemoryReservation > 0 && resources.Memory < resources.MemoryReservation {
|
||||
return warnings, fmt.Errorf("Minimum memory limit should be larger than memory reservation limit, see usage")
|
||||
}
|
||||
|
|
|
@ -583,6 +583,11 @@ func (s *DockerSuite) TestRunWithMemoryReservationInvalid(c *check.C) {
|
|||
c.Assert(err, check.NotNil)
|
||||
expected := "Minimum memory limit should be larger than memory reservation limit"
|
||||
c.Assert(strings.TrimSpace(out), checker.Contains, expected, check.Commentf("run container should fail with invalid memory reservation"))
|
||||
|
||||
out, _, err = dockerCmdWithError("run", "--memory-reservation", "1k", "busybox", "true")
|
||||
c.Assert(err, check.NotNil)
|
||||
expected = "Minimum memory reservation allowed is 4MB"
|
||||
c.Assert(strings.TrimSpace(out), checker.Contains, expected, check.Commentf("run container should fail with invalid memory reservation"))
|
||||
}
|
||||
|
||||
func (s *DockerSuite) TestStopContainerSignal(c *check.C) {
|
||||
|
|
Loading…
Add table
Reference in a new issue