Skip to content

Commit

Permalink
Merge pull request kubernetes#23143 from vishh/23113
Browse files Browse the repository at this point in the history
Auto commit by PR queue bot
(cherry picked from commit 78adb88)
  • Loading branch information
k8s-merge-robot authored and eparis committed Mar 24, 2016
1 parent 4647480 commit f237d0c
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 1 deletion.
1 change: 1 addition & 0 deletions docs/proposals/resource-qos.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ For each resource, containers can specify a resource request and limit, 0 <= req
### Compressible Resource Guarantees

- For now, we are only supporting CPU.
- Minimum CPU limit is 10 milli cores (`10m`). This a limitation of the Linux kernel.
- Containers are guaranteed to get the amount of CPU they request, they may or may not get additional CPU time (depending on the other jobs running).
- Excess CPU resources will be distributed based on the amount of CPU requested. For example, suppose container A requests for 60% of the CPU, and container B requests for 30% of the CPU. Suppose that both containers are trying to use as much CPU as they can. Then the extra 10% of CPU will be distributed to A and B in a 2:1 ratio (implementation discussed in later sections).
- Containers will be throttled if they exceed their limit. If limit is unspecified, then the containers can use excess CPU when available.
Expand Down
8 changes: 7 additions & 1 deletion pkg/kubelet/dockertools/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ const (
milliCPUToCPU = 1000

// 100000 is equivalent to 100ms
quotaPeriod = 100000
quotaPeriod = 100000
minQuotaPerod = 1000
)

// DockerInterface is an abstract interface for testability. It abstracts the interface of docker.Client.
Expand Down Expand Up @@ -317,6 +318,11 @@ func milliCPUToQuota(milliCPU int64) (quota int64, period int64) {
// we then convert your milliCPU to a value normalized over a period
quota = (milliCPU * quotaPeriod) / milliCPUToCPU

// quota needs to be a minimum of 1ms.
if quota < minQuotaPerod {
quota = minQuotaPerod
}

return
}

Expand Down
15 changes: 15 additions & 0 deletions pkg/kubelet/dockertools/docker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -839,6 +839,21 @@ func TestMilliCPUToQuota(t *testing.T) {
quota: int64(0),
period: int64(0),
},
{
input: int64(5),
quota: int64(1000),
period: int64(100000),
},
{
input: int64(9),
quota: int64(1000),
period: int64(100000),
},
{
input: int64(10),
quota: int64(1000),
period: int64(100000),
},
{
input: int64(200),
quota: int64(20000),
Expand Down

0 comments on commit f237d0c

Please sign in to comment.