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,11 +21,20 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
ContainerFlags = append(ContainerFlags, cli.Uint64Flag{
|
ContainerFlags = append(ContainerFlags,
|
||||||
Name: "cpu-count",
|
cli.Uint64Flag{
|
||||||
Usage: "number of CPUs available to the container",
|
Name: "cpu-count",
|
||||||
}, cli.StringSliceFlag{
|
Usage: "number of CPUs available to the container",
|
||||||
Name: "device",
|
},
|
||||||
Usage: "identifier of a device to add to the container (e.g. class://5B45201D-F2F2-4F3B-85BB-30FF1F953599)",
|
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 {
|
if ccount != 0 {
|
||||||
opts = append(opts, oci.WithWindowsCPUCount(ccount))
|
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") {
|
for _, dev := range context.StringSlice("device") {
|
||||||
parts := strings.Split(dev, "://")
|
parts := strings.Split(dev, "://")
|
||||||
if len(parts) != 2 {
|
if len(parts) != 2 {
|
||||||
|
@ -83,6 +83,10 @@ func setResources(s *Spec) {
|
|||||||
s.Linux.Resources = &specs.LinuxResources{}
|
s.Linux.Resources = &specs.LinuxResources{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// nolint
|
||||||
|
func setResourcesWindows(s *Spec) {
|
||||||
if s.Windows != nil {
|
if s.Windows != nil {
|
||||||
if s.Windows.Resources == nil {
|
if s.Windows.Resources == nil {
|
||||||
s.Windows.Resources = &specs.WindowsResources{}
|
s.Windows.Resources = &specs.WindowsResources{}
|
||||||
@ -98,6 +102,11 @@ func setCPU(s *Spec) {
|
|||||||
s.Linux.Resources.CPU = &specs.LinuxCPU{}
|
s.Linux.Resources.CPU = &specs.LinuxCPU{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// nolint
|
||||||
|
func setCPUWindows(s *Spec) {
|
||||||
|
setResourcesWindows(s)
|
||||||
if s.Windows != nil {
|
if s.Windows != nil {
|
||||||
if s.Windows.Resources.CPU == nil {
|
if s.Windows.Resources.CPU == nil {
|
||||||
s.Windows.Resources.CPU = &specs.WindowsCPUResources{}
|
s.Windows.Resources.CPU = &specs.WindowsCPUResources{}
|
||||||
|
@ -31,17 +31,32 @@ import (
|
|||||||
// `count` specified.
|
// `count` specified.
|
||||||
func WithWindowsCPUCount(count uint64) SpecOpts {
|
func WithWindowsCPUCount(count uint64) SpecOpts {
|
||||||
return func(_ context.Context, _ Client, _ *containers.Container, s *Spec) error {
|
return func(_ context.Context, _ Client, _ *containers.Container, s *Spec) error {
|
||||||
if s.Windows.Resources == nil {
|
setCPUWindows(s)
|
||||||
s.Windows.Resources = &specs.WindowsResources{}
|
|
||||||
}
|
|
||||||
if s.Windows.Resources.CPU == nil {
|
|
||||||
s.Windows.Resources.CPU = &specs.WindowsCPUResources{}
|
|
||||||
}
|
|
||||||
s.Windows.Resources.CPU.Count = &count
|
s.Windows.Resources.CPU.Count = &count
|
||||||
return nil
|
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`.
|
// WithWindowsIgnoreFlushesDuringBoot sets `Windows.IgnoreFlushesDuringBoot`.
|
||||||
func WithWindowsIgnoreFlushesDuringBoot() SpecOpts {
|
func WithWindowsIgnoreFlushesDuringBoot() SpecOpts {
|
||||||
return func(_ context.Context, _ Client, _ *containers.Container, s *Spec) error {
|
return func(_ context.Context, _ Client, _ *containers.Container, s *Spec) error {
|
||||||
|
Loading…
Reference in New Issue
Block a user