update_linux.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package daemon // import "github.com/docker/docker/daemon"
  2. import (
  3. "time"
  4. "github.com/docker/docker/api/types/container"
  5. "github.com/docker/docker/libcontainerd"
  6. "github.com/opencontainers/runtime-spec/specs-go"
  7. )
  8. func toContainerdResources(resources container.Resources) *libcontainerd.Resources {
  9. var r libcontainerd.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. return &r
  44. }