| package daemon // import "github.com/docker/docker/daemon" |
| |
| import ( |
| "time" |
| |
| "github.com/docker/docker/api/types/container" |
| libcontainerdtypes "github.com/docker/docker/libcontainerd/types" |
| specs "github.com/opencontainers/runtime-spec/specs-go" |
| ) |
| |
| func toContainerdResources(resources container.Resources) *libcontainerdtypes.Resources { |
| var r libcontainerdtypes.Resources |
| |
| if resources.BlkioWeight != 0 { |
| r.BlockIO = &specs.LinuxBlockIO{ |
| Weight: &resources.BlkioWeight, |
| } |
| } |
| |
| cpu := specs.LinuxCPU{ |
| Cpus: resources.CpusetCpus, |
| Mems: resources.CpusetMems, |
| } |
| if resources.CPUShares != 0 { |
| shares := uint64(resources.CPUShares) |
| cpu.Shares = &shares |
| } |
| |
| var ( |
| period uint64 |
| quota int64 |
| ) |
| if resources.NanoCPUs != 0 { |
| period = uint64(100 * time.Millisecond / time.Microsecond) |
| quota = resources.NanoCPUs * int64(period) / 1e9 |
| } |
| if quota == 0 && resources.CPUQuota != 0 { |
| quota = resources.CPUQuota |
| } |
| if period == 0 && resources.CPUPeriod != 0 { |
| period = uint64(resources.CPUPeriod) |
| } |
| |
| if period != 0 { |
| cpu.Period = &period |
| } |
| if quota != 0 { |
| cpu.Quota = "a |
| } |
| |
| if cpu != (specs.LinuxCPU{}) { |
| r.CPU = &cpu |
| } |
| |
| var memory specs.LinuxMemory |
| if resources.Memory != 0 { |
| memory.Limit = &resources.Memory |
| } |
| if resources.MemoryReservation != 0 { |
| memory.Reservation = &resources.MemoryReservation |
| } |
| if resources.KernelMemory != 0 { //nolint:staticcheck // ignore SA1019: memory.Kernel is deprecated: kernel-memory limits are not supported in cgroups v2, and were obsoleted in [kernel v5.4]. This field should no longer be used, as it may be ignored by runtimes. |
| memory.Kernel = &resources.KernelMemory //nolint:staticcheck // ignore SA1019: memory.Kernel is deprecated: kernel-memory limits are not supported in cgroups v2, and were obsoleted in [kernel v5.4]. This field should no longer be used, as it may be ignored by runtimes. |
| } |
| if resources.MemorySwap > 0 { |
| memory.Swap = &resources.MemorySwap |
| } |
| |
| if memory != (specs.LinuxMemory{}) { |
| r.Memory = &memory |
| } |
| |
| r.Pids = getPidsLimit(resources) |
| return &r |
| } |