| 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 | |
| } |