Add ctr support for CPUMax and CPUShares
Adds CPU.Maximum and CPU.Shares support to the ctr cmdline for testing Signed-off-by: Justin Terry <jlterry@amazon.com>
This commit is contained in:
parent
0f5d4ff0ff
commit
227156dac6
@ -21,9 +21,18 @@ import (
|
||||
)
|
||||
|
||||
func init() {
|
||||
ContainerFlags = append(ContainerFlags, cli.Uint64Flag{
|
||||
ContainerFlags = append(ContainerFlags,
|
||||
cli.Uint64Flag{
|
||||
Name: "cpu-count",
|
||||
Usage: "number of CPUs available to the container",
|
||||
},
|
||||
cli.Uint64Flag{
|
||||
Name: "cpu-shares",
|
||||
Usage: "The relative number of CPU shares given to the container relative to other workloads. Between 0 and 10,000.",
|
||||
},
|
||||
cli.Uint64Flag{
|
||||
Name: "cpu-max",
|
||||
Usage: "The number of processor cycles threads in a container can use per 10,000 cycles. Set to a percentage times 100. Between 1 and 10,000",
|
||||
}, cli.StringSliceFlag{
|
||||
Name: "device",
|
||||
Usage: "identifier of a device to add to the container (e.g. class://5B45201D-F2F2-4F3B-85BB-30FF1F953599)",
|
||||
|
@ -143,6 +143,14 @@ func NewContainer(ctx gocontext.Context, client *containerd.Client, context *cli
|
||||
if ccount != 0 {
|
||||
opts = append(opts, oci.WithWindowsCPUCount(ccount))
|
||||
}
|
||||
cshares := context.Uint64("cpu-shares")
|
||||
if cshares != 0 {
|
||||
opts = append(opts, oci.WithWindowsCPUShares(uint16(cshares)))
|
||||
}
|
||||
cmax := context.Uint64("cpu-max")
|
||||
if cmax != 0 {
|
||||
opts = append(opts, oci.WithWindowsCPUMaximum(uint16(cmax)))
|
||||
}
|
||||
for _, dev := range context.StringSlice("device") {
|
||||
parts := strings.Split(dev, "://")
|
||||
if len(parts) != 2 {
|
||||
|
@ -83,6 +83,10 @@ func setResources(s *Spec) {
|
||||
s.Linux.Resources = &specs.LinuxResources{}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// nolint
|
||||
func setResourcesWindows(s *Spec) {
|
||||
if s.Windows != nil {
|
||||
if s.Windows.Resources == nil {
|
||||
s.Windows.Resources = &specs.WindowsResources{}
|
||||
@ -98,6 +102,11 @@ func setCPU(s *Spec) {
|
||||
s.Linux.Resources.CPU = &specs.LinuxCPU{}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// nolint
|
||||
func setCPUWindows(s *Spec) {
|
||||
setResourcesWindows(s)
|
||||
if s.Windows != nil {
|
||||
if s.Windows.Resources.CPU == nil {
|
||||
s.Windows.Resources.CPU = &specs.WindowsCPUResources{}
|
||||
|
@ -31,17 +31,32 @@ import (
|
||||
// `count` specified.
|
||||
func WithWindowsCPUCount(count uint64) SpecOpts {
|
||||
return func(_ context.Context, _ Client, _ *containers.Container, s *Spec) error {
|
||||
if s.Windows.Resources == nil {
|
||||
s.Windows.Resources = &specs.WindowsResources{}
|
||||
}
|
||||
if s.Windows.Resources.CPU == nil {
|
||||
s.Windows.Resources.CPU = &specs.WindowsCPUResources{}
|
||||
}
|
||||
setCPUWindows(s)
|
||||
s.Windows.Resources.CPU.Count = &count
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithWindowsCPUShares sets the `Windows.Resources.CPU.Shares` section to the
|
||||
// `shares` specified.
|
||||
func WithWindowsCPUShares(shares uint16) SpecOpts {
|
||||
return func(_ context.Context, _ Client, _ *containers.Container, s *Spec) error {
|
||||
setCPUWindows(s)
|
||||
s.Windows.Resources.CPU.Shares = &shares
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithWindowsCPUMaximum sets the `Windows.Resources.CPU.Maximum` section to the
|
||||
// `max` specified.
|
||||
func WithWindowsCPUMaximum(max uint16) SpecOpts {
|
||||
return func(_ context.Context, _ Client, _ *containers.Container, s *Spec) error {
|
||||
setCPUWindows(s)
|
||||
s.Windows.Resources.CPU.Maximum = &max
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithWindowsIgnoreFlushesDuringBoot sets `Windows.IgnoreFlushesDuringBoot`.
|
||||
func WithWindowsIgnoreFlushesDuringBoot() SpecOpts {
|
||||
return func(_ context.Context, _ Client, _ *containers.Container, s *Spec) error {
|
||||
|
Loading…
Reference in New Issue
Block a user