func libcontainerConfigToContainerSpec(config *libcontainer.Config, mi *info.MachineInfo) *info.ContainerSpec { spec := new(info.ContainerSpec) spec.Memory = new(info.MemorySpec) spec.Memory.Limit = math.MaxUint64 spec.Memory.SwapLimit = math.MaxUint64 if config.Cgroups.Memory > 0 { spec.Memory.Limit = uint64(config.Cgroups.Memory) } if config.Cgroups.MemorySwap > 0 { spec.Memory.SwapLimit = uint64(config.Cgroups.MemorySwap) } // Get CPU info spec.Cpu = new(info.CpuSpec) spec.Cpu.Limit = 1024 if config.Cgroups.CpuShares != 0 { spec.Cpu.Limit = uint64(config.Cgroups.CpuShares) } if config.Cgroups.CpusetCpus == "" { // All cores are active. spec.Cpu.Mask = fmt.Sprintf("0-%d", mi.NumCores-1) } else { spec.Cpu.Mask = config.Cgroups.CpusetCpus } return spec }
func libcontainerConfigToContainerSpec(config *libcontainer.Container, mi *info.MachineInfo) *info.ContainerSpec { spec := new(info.ContainerSpec) spec.Memory = new(info.MemorySpec) spec.Memory.Limit = math.MaxUint64 spec.Memory.SwapLimit = math.MaxUint64 if config.Cgroups.Memory > 0 { spec.Memory.Limit = uint64(config.Cgroups.Memory) } if config.Cgroups.MemorySwap > 0 { spec.Memory.SwapLimit = uint64(config.Cgroups.MemorySwap) } // Get CPU info spec.Cpu = new(info.CpuSpec) spec.Cpu.Limit = 1024 if config.Cgroups.CpuShares != 0 { spec.Cpu.Limit = uint64(config.Cgroups.CpuShares) } n := (mi.NumCores + 63) / 64 spec.Cpu.Mask.Data = make([]uint64, n) for i := 0; i < n; i++ { spec.Cpu.Mask.Data[i] = math.MaxUint64 } // TODO(vmarmol): Get CPUs from config.Cgroups.CpusetCpus return spec }
func dockerConfigToContainerSpec(config *dockerContainerSpec, mi *info.MachineInfo) *info.ContainerSpec { spec := new(info.ContainerSpec) spec.Memory = new(info.MemorySpec) spec.Memory.Limit = math.MaxUint64 spec.Memory.SwapLimit = math.MaxUint64 if config.Config.Memory > 0 { spec.Memory.Limit = uint64(config.Config.Memory) } if config.Config.MemorySwap > 0 { spec.Memory.SwapLimit = uint64(config.Config.MemorySwap - config.Config.Memory) } if mi != nil { spec.Cpu = new(info.CpuSpec) spec.Cpu.Limit = math.MaxUint64 n := mi.NumCores / 64 if mi.NumCores%64 > 0 { n++ } spec.Cpu.Mask.Data = make([]uint64, n) for i := 0; i < n; i++ { spec.Cpu.Mask.Data[i] = math.MaxUint64 } } return spec }
func (self *rawContainerHandler) GetSpec() (*info.ContainerSpec, error) { spec := new(info.ContainerSpec) // The raw driver assumes unified hierarchy containers. // Get machine info. mi, err := self.machineInfoFactory.GetMachineInfo() if err != nil { return nil, err } // CPU. cpuRoot, ok := self.cgroupSubsystems.mountPoints["cpu"] if ok { cpuRoot = path.Join(cpuRoot, self.name) if utils.FileExists(cpuRoot) { spec.Cpu = new(info.CpuSpec) spec.Cpu.Limit = readInt64(cpuRoot, "cpu.shares") } } // Cpu Mask. // This will fail for non-unified hierarchies. We'll return the whole machine mask in that case. cpusetRoot, ok := self.cgroupSubsystems.mountPoints["cpuset"] if ok { if spec.Cpu == nil { spec.Cpu = new(info.CpuSpec) } cpusetRoot = path.Join(cpusetRoot, self.name) if utils.FileExists(cpusetRoot) { spec.Cpu.Mask = readString(cpusetRoot, "cpuset.cpus") if spec.Cpu.Mask == "" { spec.Cpu.Mask = fmt.Sprintf("0-%d", mi.NumCores-1) } } } // Memory. memoryRoot, ok := self.cgroupSubsystems.mountPoints["memory"] if ok { memoryRoot = path.Join(memoryRoot, self.name) if utils.FileExists(memoryRoot) { spec.Memory = new(info.MemorySpec) spec.Memory.Limit = readInt64(memoryRoot, "memory.limit_in_bytes") spec.Memory.SwapLimit = readInt64(memoryRoot, "memory.memsw.limit_in_bytes") } } return spec, nil }
func (self *rawContainerHandler) GetSpec() (*info.ContainerSpec, error) { spec := new(info.ContainerSpec) // The raw driver assumes unified hierarchy containers. // CPU. cpuRoot, ok := self.cgroupSubsystems.mountPoints["cpu"] if ok { cpuRoot = filepath.Join(cpuRoot, self.name) if utils.FileExists(cpuRoot) { // Get machine info. mi, err := self.machineInfoFactory.GetMachineInfo() if err != nil { return nil, err } spec.Cpu = new(info.CpuSpec) spec.Cpu.Limit = readInt64(cpuRoot, "cpu.shares") // TODO(vmarmol): Get CPUs from config.Cgroups.CpusetCpus n := (mi.NumCores + 63) / 64 spec.Cpu.Mask.Data = make([]uint64, n) for i := 0; i < n; i++ { spec.Cpu.Mask.Data[i] = math.MaxUint64 } } } // Memory. memoryRoot, ok := self.cgroupSubsystems.mountPoints["memory"] if ok { memoryRoot = filepath.Join(memoryRoot, self.name) if utils.FileExists(memoryRoot) { spec.Memory = new(info.MemorySpec) spec.Memory.Limit = readInt64(memoryRoot, "memory.limit_in_bytes") spec.Memory.SwapLimit = readInt64(memoryRoot, "memory.limit_in_bytes") } } return spec, nil }
func protobufToContainerSpec(pspec *ContainerSpec) *info.ContainerSpec { ret := new(info.ContainerSpec) if pspec.GetCpu() != nil { cpuspec := new(info.CpuSpec) cpuspec.Limit = pspec.GetCpu().GetLimit() cpuspec.MaxLimit = pspec.GetCpu().GetMaxLimit() if pspec.GetCpu().GetMask() != nil { cpuspec.Mask.Data = pspec.GetCpu().GetMask().GetData() } ret.Cpu = cpuspec } if pspec.GetMemory() != nil { pmem := pspec.GetMemory() memspec := new(info.MemorySpec) memspec.Limit = uint64(pmem.GetLimit()) memspec.Reservation = uint64(pmem.GetReservation()) memspec.SwapLimit = uint64(pmem.GetSwapLimit()) ret.Memory = memspec } return ret }