Merge pull request #871 from ConnorDoyle/update-cpu-manager-proposal-interfaces
Updated interface sketches to match implementation
This commit is contained in:
commit
090854c414
|
@ -65,7 +65,7 @@ This new method is invoked from two places in the CPU manager: during each
|
||||||
call to `RegisterContainer` and also periodically from a separate
|
call to `RegisterContainer` and also periodically from a separate
|
||||||
reconciliation loop.
|
reconciliation loop.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
_CPU Manager block diagram. `Policy`, `State`, and `Topology` types are
|
_CPU Manager block diagram. `Policy`, `State`, and `Topology` types are
|
||||||
factored out of the CPU Manager to promote reuse and to make it easier
|
factored out of the CPU Manager to promote reuse and to make it easier
|
||||||
|
@ -119,6 +119,7 @@ type Manager interface {
|
||||||
Start()
|
Start()
|
||||||
RegisterContainer(p *Pod, c *Container, containerID string) error
|
RegisterContainer(p *Pod, c *Container, containerID string) error
|
||||||
UnregisterContainer(containerID string) error
|
UnregisterContainer(containerID string) error
|
||||||
|
IsUnderCPUPresure() bool
|
||||||
State() state.Reader
|
State() state.Reader
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,11 +128,12 @@ type Policy interface {
|
||||||
Start(s state.State)
|
Start(s state.State)
|
||||||
RegisterContainer(s State, pod *Pod, container *Container, containerID string) error
|
RegisterContainer(s State, pod *Pod, container *Container, containerID string) error
|
||||||
UnregisterContainer(s State, containerID string) error
|
UnregisterContainer(s State, containerID string) error
|
||||||
|
IsUnderCPUPresure() bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type CPUSet map[int]struct{} // set operations and parsing/formatting helpers
|
type CPUSet map[int]struct{} // set operations and parsing/formatting helpers
|
||||||
|
|
||||||
type CPUTopology TBD
|
type CPUTopology // convenient type for querying and filtering CPUs
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Configuring the CPU Manager
|
#### Configuring the CPU Manager
|
||||||
|
@ -329,6 +331,15 @@ func (p *dynamicPolicy) UnregisterContainer(s State, containerID string) error {
|
||||||
directly from the shared pool, is too simplistic.
|
directly from the shared pool, is too simplistic.
|
||||||
1. Mitigation: defer supporting this until a new policy tailored for
|
1. Mitigation: defer supporting this until a new policy tailored for
|
||||||
use with `isolcpus` can be added.
|
use with `isolcpus` can be added.
|
||||||
|
1. CPU exhaustion. Terminology: a no-CPU pod is defined here as having
|
||||||
|
at least one container with no or zero-valued CPU request. If all available
|
||||||
|
CPUs are allocated exclusively, additional steps must be taken to remove
|
||||||
|
any no-CPU pods from the node. In addition, the system must prevent further
|
||||||
|
no-CPU pods from being bound to the node.
|
||||||
|
1. Mitigation: Introduce a new CPUPressure node condition. This
|
||||||
|
condition causes any no-CPU pods to fail scheduler predicates for this
|
||||||
|
node and also fail node-level admission checks. Also evict no-CPU pods
|
||||||
|
when CPUPressure occurs.
|
||||||
|
|
||||||
## Implementation roadmap
|
## Implementation roadmap
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue