From 1a9b640e0d3e6916bff9cd7dd8ab435a70c6a0e8 Mon Sep 17 00:00:00 2001 From: Qiang Huang Date: Wed, 10 Dec 2014 16:53:43 -0800 Subject: [PATCH] add support to set MemorySwap Signed-off-by: Qiang Huang --- daemon/create.go | 3 +++ runconfig/parse.go | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/daemon/create.go b/daemon/create.go index f9d986491f..5095e1347f 100644 --- a/daemon/create.go +++ b/daemon/create.go @@ -29,6 +29,9 @@ func (daemon *Daemon) ContainerCreate(job *engine.Job) engine.Status { job.Errorf("Your kernel does not support swap limit capabilities. Limitation discarded.\n") config.MemorySwap = -1 } + if config.Memory > 0 && config.MemorySwap > 0 && config.MemorySwap < config.Memory { + return job.Errorf("Minimum memoryswap limit should larger than memory limit, see usage.\n") + } var hostConfig *runconfig.HostConfig if job.EnvExists("HostConfig") { diff --git a/runconfig/parse.go b/runconfig/parse.go index 0d682f35d3..91dd895d7c 100644 --- a/runconfig/parse.go +++ b/runconfig/parse.go @@ -53,6 +53,7 @@ func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSe flEntrypoint = cmd.String([]string{"#entrypoint", "-entrypoint"}, "", "Overwrite the default ENTRYPOINT of the image") flHostname = cmd.String([]string{"h", "-hostname"}, "", "Container host name") flMemoryString = cmd.String([]string{"m", "-memory"}, "", "Memory limit (format: , where unit = b, k, m or g)") + flMemorySwap = cmd.String([]string{"-memory-swap"}, "", "Total memory usage (memory + swap), set '-1' to disable swap (format: , where unit = b, k, m or g)") flUser = cmd.String([]string{"u", "-user"}, "", "Username or UID") flWorkingDir = cmd.String([]string{"w", "-workdir"}, "", "Working directory inside the container") flCpuShares = cmd.Int64([]string{"c", "-cpu-shares"}, 0, "CPU shares (relative weight)") @@ -136,6 +137,15 @@ func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSe flMemory = parsedMemory } + var MemorySwap int64 + if *flMemorySwap != "" { + parsedMemorySwap, err := units.RAMInBytes(*flMemorySwap) + if err != nil { + return nil, nil, cmd, err + } + MemorySwap = parsedMemorySwap + } + var binds []string // add any bind targets to the list of container volumes for bind := range flVolumes.GetMap() { @@ -261,6 +271,7 @@ func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSe NetworkDisabled: !*flNetwork, OpenStdin: *flStdin, Memory: flMemory, + MemorySwap: MemorySwap, CpuShares: *flCpuShares, Cpuset: *flCpuset, AttachStdin: attachStdin,