update_linux.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package daemon // import "github.com/docker/docker/daemon"
  2. import (
  3. "time"
  4. "github.com/docker/docker/api/types/container"
  5. libcontainerdtypes "github.com/docker/docker/libcontainerd/types"
  6. specs "github.com/opencontainers/runtime-spec/specs-go"
  7. )
  8. func toContainerdResources(resources container.Resources) *libcontainerdtypes.Resources {
  9. var r libcontainerdtypes.Resources
  10. r.BlockIO = &specs.LinuxBlockIO{
  11. Weight: &resources.BlkioWeight,
  12. }
  13. shares := uint64(resources.CPUShares)
  14. r.CPU = &specs.LinuxCPU{
  15. Shares: &shares,
  16. Cpus: resources.CpusetCpus,
  17. Mems: resources.CpusetMems,
  18. }
  19. var (
  20. period uint64
  21. quota int64
  22. )
  23. if resources.NanoCPUs != 0 {
  24. period = uint64(100 * time.Millisecond / time.Microsecond)
  25. quota = resources.NanoCPUs * int64(period) / 1e9
  26. }
  27. if quota == 0 && resources.CPUQuota != 0 {
  28. quota = resources.CPUQuota
  29. }
  30. if period == 0 && resources.CPUPeriod != 0 {
  31. period = uint64(resources.CPUPeriod)
  32. }
  33. r.CPU.Period = &period
  34. r.CPU.Quota = &quota
  35. r.Memory = &specs.LinuxMemory{
  36. Limit: &resources.Memory,
  37. Reservation: &resources.MemoryReservation,
  38. Kernel: &resources.KernelMemory,
  39. }
  40. if resources.MemorySwap > 0 {
  41. r.Memory.Swap = &resources.MemorySwap
  42. }
  43. r.Pids = getPidsLimit(resources)
  44. return &r
  45. }