mirror of https://github.com/docker/cli.git
Add `--cpus` flag to control cpu resources
This fix tries to address the proposal raised in 27921 and add `--cpus` flag for `docker run/create`. Basically, `--cpus` will allow user to specify a number (possibly partial) about how many CPUs the container will use. For example, on a 2-CPU system `--cpus 1.5` means the container will take 75% (1.5/2) of the CPU share. This fix adds a `NanoCPUs` field to `HostConfig` since swarmkit alreay have a concept of NanoCPUs for tasks. The `--cpus` flag will translate the number into reused `NanoCPUs` to be consistent. This fix adds integration tests to cover the changes. Related docs (`docker run` and Remote APIs) have been updated. This fix fixes 27921. Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
This commit is contained in:
parent
9ba2472a0b
commit
d93d09acaa
|
@ -35,6 +35,7 @@ Options:
|
||||||
--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
|
--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
|
||||||
--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
|
--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
|
||||||
-c, --cpu-shares int CPU shares (relative weight)
|
-c, --cpu-shares int CPU shares (relative weight)
|
||||||
|
--cpus NanoCPUs Number of CPUs (default 0.000)
|
||||||
--cpu-rt-period int Limit the CPU real-time period in microseconds
|
--cpu-rt-period int Limit the CPU real-time period in microseconds
|
||||||
--cpu-rt-runtime int Limit the CPU real-time runtime in microseconds
|
--cpu-rt-runtime int Limit the CPU real-time runtime in microseconds
|
||||||
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
|
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
|
||||||
|
|
|
@ -33,6 +33,7 @@ Options:
|
||||||
--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
|
--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
|
||||||
--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
|
--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
|
||||||
-c, --cpu-shares int CPU shares (relative weight)
|
-c, --cpu-shares int CPU shares (relative weight)
|
||||||
|
--cpus NanoCPUs Number of CPUs (default 0.000)
|
||||||
--cpu-rt-period int Limit the CPU real-time period in microseconds
|
--cpu-rt-period int Limit the CPU real-time period in microseconds
|
||||||
--cpu-rt-runtime int Limit the CPU real-time runtime in microseconds
|
--cpu-rt-runtime int Limit the CPU real-time runtime in microseconds
|
||||||
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
|
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
|
||||||
|
|
|
@ -686,6 +686,7 @@ container:
|
||||||
| `--memory-reservation=""` | Memory soft limit (format: `<number>[<unit>]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`. |
|
| `--memory-reservation=""` | Memory soft limit (format: `<number>[<unit>]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`. |
|
||||||
| `--kernel-memory=""` | Kernel memory limit (format: `<number>[<unit>]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`. Minimum is 4M. |
|
| `--kernel-memory=""` | Kernel memory limit (format: `<number>[<unit>]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`. Minimum is 4M. |
|
||||||
| `-c`, `--cpu-shares=0` | CPU shares (relative weight) |
|
| `-c`, `--cpu-shares=0` | CPU shares (relative weight) |
|
||||||
|
| `--cpus=0.000` | Number of CPUs. Number is a fractional number. 0.000 means no limit. |
|
||||||
| `--cpu-period=0` | Limit the CPU CFS (Completely Fair Scheduler) period |
|
| `--cpu-period=0` | Limit the CPU CFS (Completely Fair Scheduler) period |
|
||||||
| `--cpuset-cpus=""` | CPUs in which to allow execution (0-3, 0,1) |
|
| `--cpuset-cpus=""` | CPUs in which to allow execution (0-3, 0,1) |
|
||||||
| `--cpuset-mems=""` | Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. |
|
| `--cpuset-mems=""` | Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. |
|
||||||
|
@ -970,6 +971,13 @@ Examples:
|
||||||
|
|
||||||
If there is 1 CPU, this means the container can get 50% CPU worth of run-time every 50ms.
|
If there is 1 CPU, this means the container can get 50% CPU worth of run-time every 50ms.
|
||||||
|
|
||||||
|
In addition to use `--cpu-period` and `--cpu-quota` for setting CPU period constraints,
|
||||||
|
it is possible to specify `--cpus` with a float number to achieve the same purpose.
|
||||||
|
For example, if there is 1 CPU, then `--cpus=0.5` will achieve the same result as
|
||||||
|
setting `--cpu-period=50000` and `--cpu-quota=25000` (50% CPU).
|
||||||
|
|
||||||
|
The default value for `--cpus` is `0.000`, which means there is no limit.
|
||||||
|
|
||||||
For more information, see the [CFS documentation on bandwidth limiting](https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt).
|
For more information, see the [CFS documentation on bandwidth limiting](https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt).
|
||||||
|
|
||||||
### Cpuset constraint
|
### Cpuset constraint
|
||||||
|
|
|
@ -19,6 +19,7 @@ docker-create - Create a new container
|
||||||
[**--cpu-quota**[=*0*]]
|
[**--cpu-quota**[=*0*]]
|
||||||
[**--cpu-rt-period**[=*0*]]
|
[**--cpu-rt-period**[=*0*]]
|
||||||
[**--cpu-rt-runtime**[=*0*]]
|
[**--cpu-rt-runtime**[=*0*]]
|
||||||
|
[**--cpus**[=*0.0*]]
|
||||||
[**--cpuset-cpus**[=*CPUSET-CPUS*]]
|
[**--cpuset-cpus**[=*CPUSET-CPUS*]]
|
||||||
[**--cpuset-mems**[=*CPUSET-MEMS*]]
|
[**--cpuset-mems**[=*CPUSET-MEMS*]]
|
||||||
[**--device**[=*[]*]]
|
[**--device**[=*[]*]]
|
||||||
|
@ -154,6 +155,9 @@ two memory nodes.
|
||||||
|
|
||||||
The sum of all runtimes across containers cannot exceed the amount allotted to the parent cgroup.
|
The sum of all runtimes across containers cannot exceed the amount allotted to the parent cgroup.
|
||||||
|
|
||||||
|
**--cpus**=0.0
|
||||||
|
Number of CPUs. The default is *0.0*.
|
||||||
|
|
||||||
**--device**=[]
|
**--device**=[]
|
||||||
Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc:rwm)
|
Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc:rwm)
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ docker-run - Run a command in a new container
|
||||||
[**--cpu-quota**[=*0*]]
|
[**--cpu-quota**[=*0*]]
|
||||||
[**--cpu-rt-period**[=*0*]]
|
[**--cpu-rt-period**[=*0*]]
|
||||||
[**--cpu-rt-runtime**[=*0*]]
|
[**--cpu-rt-runtime**[=*0*]]
|
||||||
|
[**--cpus**[=*0.0*]]
|
||||||
[**--cpuset-cpus**[=*CPUSET-CPUS*]]
|
[**--cpuset-cpus**[=*CPUSET-CPUS*]]
|
||||||
[**--cpuset-mems**[=*CPUSET-MEMS*]]
|
[**--cpuset-mems**[=*CPUSET-MEMS*]]
|
||||||
[**-d**|**--detach**]
|
[**-d**|**--detach**]
|
||||||
|
@ -208,6 +209,9 @@ to the quota you specify.
|
||||||
|
|
||||||
The sum of all runtimes across containers cannot exceed the amount allotted to the parent cgroup.
|
The sum of all runtimes across containers cannot exceed the amount allotted to the parent cgroup.
|
||||||
|
|
||||||
|
**--cpus**=0.0
|
||||||
|
Number of CPUs. The default is *0.0* which means no limit.
|
||||||
|
|
||||||
**-d**, **--detach**=*true*|*false*
|
**-d**, **--detach**=*true*|*false*
|
||||||
Detached mode: run the container in the background and print the new container ID. The default is *false*.
|
Detached mode: run the container in the background and print the new container ID. The default is *false*.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue