1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Merge pull request #551 from jpetazzo/471-cpu-limit

+ Runtime: implement "-c" option to allocate a number of CPU shares to a container
This commit is contained in:
Guillaume J. Charmes 2013-05-13 11:59:09 -07:00
commit edc7c092d9
8 changed files with 22 additions and 2 deletions

View file

@ -38,6 +38,9 @@ func (builder *Builder) mergeConfig(userConf, imageConf *Config) {
if userConf.MemorySwap == 0 { if userConf.MemorySwap == 0 {
userConf.MemorySwap = imageConf.MemorySwap userConf.MemorySwap = imageConf.MemorySwap
} }
if userConf.CpuShares == 0 {
userConf.CpuShares = imageConf.CpuShares
}
if userConf.PortSpecs == nil || len(userConf.PortSpecs) == 0 { if userConf.PortSpecs == nil || len(userConf.PortSpecs) == 0 {
userConf.PortSpecs = imageConf.PortSpecs userConf.PortSpecs = imageConf.PortSpecs
} }

View file

@ -413,6 +413,7 @@ func TestAttachDisconnect(t *testing.T) {
container, err := NewBuilder(runtime).Create( container, err := NewBuilder(runtime).Create(
&Config{ &Config{
Image: GetTestImage(runtime).Id, Image: GetTestImage(runtime).Id,
CpuShares: 1000,
Memory: 33554432, Memory: 33554432,
Cmd: []string{"/bin/cat"}, Cmd: []string{"/bin/cat"},
OpenStdin: true, OpenStdin: true,

View file

@ -56,6 +56,7 @@ type Config struct {
User string User string
Memory int64 // Memory limit (in bytes) Memory int64 // Memory limit (in bytes)
MemorySwap int64 // Total memory usage (memory + swap); set `-1' to disable swap MemorySwap int64 // Total memory usage (memory + swap); set `-1' to disable swap
CpuShares int64 // CPU shares (relative weight vs. other containers)
AttachStdin bool AttachStdin bool
AttachStdout bool AttachStdout bool
AttachStderr bool AttachStderr bool
@ -91,6 +92,8 @@ func ParseRun(args []string, capabilities *Capabilities) (*Config, *flag.FlagSet
*flMemory = 0 *flMemory = 0
} }
flCpuShares := cmd.Int64("c", 0, "CPU shares (relative weight)")
var flPorts ListOpts var flPorts ListOpts
cmd.Var(&flPorts, "p", "Expose a container's port to the host (use 'docker port' to see the actual mapping)") cmd.Var(&flPorts, "p", "Expose a container's port to the host (use 'docker port' to see the actual mapping)")
@ -137,6 +140,7 @@ func ParseRun(args []string, capabilities *Capabilities) (*Config, *flag.FlagSet
Tty: *flTty, Tty: *flTty,
OpenStdin: *flStdin, OpenStdin: *flStdin,
Memory: *flMemory, Memory: *flMemory,
CpuShares: *flCpuShares,
AttachStdin: flAttach.Get("stdin"), AttachStdin: flAttach.Get("stdin"),
AttachStdout: flAttach.Get("stdout"), AttachStdout: flAttach.Get("stdout"),
AttachStderr: flAttach.Get("stderr"), AttachStderr: flAttach.Get("stderr"),

View file

@ -390,6 +390,7 @@ func TestStart(t *testing.T) {
&Config{ &Config{
Image: GetTestImage(runtime).Id, Image: GetTestImage(runtime).Id,
Memory: 33554432, Memory: 33554432,
CpuShares: 1000,
Cmd: []string{"/bin/cat"}, Cmd: []string{"/bin/cat"},
OpenStdin: true, OpenStdin: true,
}, },
@ -1063,12 +1064,17 @@ func TestLXCConfig(t *testing.T) {
memMin := 33554432 memMin := 33554432
memMax := 536870912 memMax := 536870912
mem := memMin + rand.Intn(memMax-memMin) mem := memMin + rand.Intn(memMax-memMin)
// CPU shares as well
cpuMin := 100
cpuMax := 10000
cpu := cpuMin + rand.Intn(cpuMax-cpuMin)
container, err := NewBuilder(runtime).Create(&Config{ container, err := NewBuilder(runtime).Create(&Config{
Image: GetTestImage(runtime).Id, Image: GetTestImage(runtime).Id,
Cmd: []string{"/bin/true"}, Cmd: []string{"/bin/true"},
Hostname: "foobar", Hostname: "foobar",
Memory: int64(mem), Memory: int64(mem),
CpuShares: int64(cpu),
}, },
) )
if err != nil { if err != nil {

View file

@ -16,6 +16,7 @@ Full -run example::
{"Hostname": "", {"Hostname": "",
"User": "", "User": "",
"CpuShares": 0,
"Memory": 0, "Memory": 0,
"MemorySwap": 0, "MemorySwap": 0,
"PortSpecs": ["22", "80", "443"], "PortSpecs": ["22", "80", "443"],

View file

@ -9,6 +9,7 @@
Run a command in a new container Run a command in a new container
-a=map[]: Attach to stdin, stdout or stderr. -a=map[]: Attach to stdin, stdout or stderr.
-c=0: CPU shares (relative weight)
-d=false: Detached mode: leave the container running in the background -d=false: Detached mode: leave the container running in the background
-e=[]: Set environment variables -e=[]: Set environment variables
-h="": Container host name -h="": Container host name

View file

@ -96,6 +96,9 @@ lxc.cgroup.memory.soft_limit_in_bytes = {{.Config.Memory}}
lxc.cgroup.memory.memsw.limit_in_bytes = {{$memSwap}} lxc.cgroup.memory.memsw.limit_in_bytes = {{$memSwap}}
{{end}} {{end}}
{{end}} {{end}}
{{if .Config.CpuShares}}
lxc.cgroup.cpu.shares = {{.Config.CpuShares}}
{{end}}
` `
var LxcTemplateCompiled *template.Template var LxcTemplateCompiled *template.Template

View file

@ -507,6 +507,7 @@ func CompareConfig(a, b *Config) bool {
a.User != b.User || a.User != b.User ||
a.Memory != b.Memory || a.Memory != b.Memory ||
a.MemorySwap != b.MemorySwap || a.MemorySwap != b.MemorySwap ||
a.CpuShares != b.CpuShares ||
a.OpenStdin != b.OpenStdin || a.OpenStdin != b.OpenStdin ||
a.Tty != b.Tty { a.Tty != b.Tty {
return false return false