From 01d1d8f23fa41663dceaf0e80475389247404ff4 Mon Sep 17 00:00:00 2001 From: Connor Doyle Date: Fri, 25 Aug 2017 12:33:29 -0700 Subject: [PATCH] Added in-memory CPU manager state. --- pkg/kubelet/cm/cpumanager/state/state_mem.go | 90 ++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 pkg/kubelet/cm/cpumanager/state/state_mem.go diff --git a/pkg/kubelet/cm/cpumanager/state/state_mem.go b/pkg/kubelet/cm/cpumanager/state/state_mem.go new file mode 100644 index 0000000000..751b1726aa --- /dev/null +++ b/pkg/kubelet/cm/cpumanager/state/state_mem.go @@ -0,0 +1,90 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package state + +import ( + "sync" + + "github.com/golang/glog" + "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" +) + +type stateMemory struct { + sync.RWMutex + assignments map[string]cpuset.CPUSet + defaultCPUSet cpuset.CPUSet +} + +var _ State = &stateMemory{} + +// NewMemoryState creates new State for keeping track of cpu/pod assignment +func NewMemoryState() State { + glog.Infof("[cpumanager] initializing new in-memory state store") + return &stateMemory{ + assignments: map[string]cpuset.CPUSet{}, + defaultCPUSet: cpuset.NewCPUSet(), + } +} + +func (s *stateMemory) GetCPUSet(containerID string) (cpuset.CPUSet, bool) { + s.RLock() + defer s.RUnlock() + + res, ok := s.assignments[containerID] + return res.Clone(), ok +} + +func (s *stateMemory) GetDefaultCPUSet() cpuset.CPUSet { + s.RLock() + defer s.RUnlock() + + return s.defaultCPUSet.Clone() +} + +func (s *stateMemory) GetCPUSetOrDefault(containerID string) cpuset.CPUSet { + s.RLock() + defer s.RUnlock() + + if res, ok := s.GetCPUSet(containerID); ok { + return res + } + return s.GetDefaultCPUSet() +} + +func (s *stateMemory) SetCPUSet(containerID string, cset cpuset.CPUSet) { + s.Lock() + defer s.Unlock() + + s.assignments[containerID] = cset + glog.Infof("[cpumanager] updated desired cpuset (container id: %s, cpuset: \"%s\")", containerID, cset) +} + +func (s *stateMemory) SetDefaultCPUSet(cset cpuset.CPUSet) { + s.Lock() + defer s.Unlock() + + s.defaultCPUSet = cset + glog.Infof("[cpumanager] updated default cpuset: \"%s\"", cset) +} + +func (s *stateMemory) Delete(containerID string) { + s.Lock() + defer s.Unlock() + + delete(s.assignments, containerID) + glog.V(2).Infof("[cpumanager] deleted cpuset assignment (container id: %s)", containerID) +}