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:
commit
edc7c092d9
8 changed files with 22 additions and 2 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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"),
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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"],
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
1
utils.go
1
utils.go
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue