From 71bbc6d5386112ae5418f57f4dea2feaee9dc9b8 Mon Sep 17 00:00:00 2001 From: lmdaly Date: Mon, 14 Jan 2019 03:28:22 +0000 Subject: [PATCH 1/4] Add Topology Manager Interfaces *Topology Manager *Policy --- pkg/kubelet/cm/topologymanager/policy.go | 25 +++++++++++ .../cm/topologymanager/topology_manager.go | 45 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 pkg/kubelet/cm/topologymanager/policy.go create mode 100644 pkg/kubelet/cm/topologymanager/topology_manager.go diff --git a/pkg/kubelet/cm/topologymanager/policy.go b/pkg/kubelet/cm/topologymanager/policy.go new file mode 100644 index 00000000000..f5f4974418a --- /dev/null +++ b/pkg/kubelet/cm/topologymanager/policy.go @@ -0,0 +1,25 @@ +/*Copyright 2019 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 topologymanager + +import ( + "k8s.io/kubernetes/pkg/kubelet/lifecycle" +) + +//Policy interface for Topology Manager Pod Admit Result +type Policy interface { + //Returns Policy Name + Name() string + //Returns Pod Admit Handler Response based on hints and policy type + CanAdmitPodResult(result TopologyHints) lifecycle.PodAdmitResult +} diff --git a/pkg/kubelet/cm/topologymanager/topology_manager.go b/pkg/kubelet/cm/topologymanager/topology_manager.go new file mode 100644 index 00000000000..84f75ff1bd8 --- /dev/null +++ b/pkg/kubelet/cm/topologymanager/topology_manager.go @@ -0,0 +1,45 @@ +/*Copyright 2019 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 topologymanager + +import ( + "github.com/golang/glog" + "k8s.io/api/core/v1" + "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/socketmask" + "k8s.io/kubernetes/pkg/kubelet/lifecycle" +) + +//Manager interface provides methods for Kubelet to manage pod topology hints +type Manager interface { + //Manager implements pod admit handler interface + lifecycle.PodAdmitHandler + //Adds a hint provider to manager to indicate the hint provider + //wants to be consoluted when making topology hints + AddHintProvider(HintProvider) + //Adds pod to Manager for tracking + AddPod(pod *v1.Pod, containerID string) error + //Removes pod from Manager tracking + RemovePod(containerID string) error + //Interface for storing pod topology hints + Store +} + +//Interface to be implemented by Hint Providers +type HintProvider interface { + GetTopologyHints(pod v1.Pod, container v1.Container) TopologyHints +} + +//Interface to allow Hint Providers to retrieve pod affinity +type Store interface { + GetAffinity(podUID string, containerName string) TopologyHints +} From e64c558a11d7cc160f8c75aecc67dab5b123331c Mon Sep 17 00:00:00 2001 From: lmdaly Date: Wed, 16 Jan 2019 04:33:43 +0000 Subject: [PATCH 2/4] Added BUILD files and updates to Boilerplates --- pkg/kubelet/cm/BUILD | 1 + pkg/kubelet/cm/topologymanager/BUILD | 30 +++++++++++++++++++ pkg/kubelet/cm/topologymanager/policy.go | 6 +++- .../cm/topologymanager/topology_manager.go | 18 ++++++++--- 4 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 pkg/kubelet/cm/topologymanager/BUILD diff --git a/pkg/kubelet/cm/BUILD b/pkg/kubelet/cm/BUILD index c2e456aa108..ba7d720b52c 100644 --- a/pkg/kubelet/cm/BUILD +++ b/pkg/kubelet/cm/BUILD @@ -167,6 +167,7 @@ filegroup( "//pkg/kubelet/cm/cpuset:all-srcs", "//pkg/kubelet/cm/devicemanager:all-srcs", "//pkg/kubelet/cm/topologymanager/socketmask:all-srcs", + "//pkg/kubelet/cm/topologymanager:all-srcs", "//pkg/kubelet/cm/util:all-srcs", ], tags = ["automanaged"], diff --git a/pkg/kubelet/cm/topologymanager/BUILD b/pkg/kubelet/cm/topologymanager/BUILD new file mode 100644 index 00000000000..162df55d5be --- /dev/null +++ b/pkg/kubelet/cm/topologymanager/BUILD @@ -0,0 +1,30 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "policy.go", + "topology_manager.go", + ], + importpath = "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager", + visibility = ["//visibility:public"], + deps = [ + "//pkg/kubelet/cm/topologymanager/socketmask:go_default_library", + "//pkg/kubelet/lifecycle:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/pkg/kubelet/cm/topologymanager/policy.go b/pkg/kubelet/cm/topologymanager/policy.go index f5f4974418a..5b9208c7072 100644 --- a/pkg/kubelet/cm/topologymanager/policy.go +++ b/pkg/kubelet/cm/topologymanager/policy.go @@ -1,8 +1,12 @@ -/*Copyright 2019 The Kubernetes Authors. +/* +Copyright 2019 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. diff --git a/pkg/kubelet/cm/topologymanager/topology_manager.go b/pkg/kubelet/cm/topologymanager/topology_manager.go index 84f75ff1bd8..b79254b07f9 100644 --- a/pkg/kubelet/cm/topologymanager/topology_manager.go +++ b/pkg/kubelet/cm/topologymanager/topology_manager.go @@ -1,8 +1,12 @@ -/*Copyright 2019 The Kubernetes Authors. +/* +Copyright 2019 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. @@ -13,7 +17,6 @@ limitations under the License. package topologymanager import ( - "github.com/golang/glog" "k8s.io/api/core/v1" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/socketmask" "k8s.io/kubernetes/pkg/kubelet/lifecycle" @@ -34,12 +37,19 @@ type Manager interface { Store } -//Interface to be implemented by Hint Providers +//HintProvider interface is to be implemented by Hint Providers type HintProvider interface { GetTopologyHints(pod v1.Pod, container v1.Container) TopologyHints } -//Interface to allow Hint Providers to retrieve pod affinity +//Store interface is to allow Hint Providers to retrieve pod affinity type Store interface { GetAffinity(podUID string, containerName string) TopologyHints } + +//TopologyHints is a struct containing Sokcet Affinity for a Pod +//and whether Affinity is true or false +type TopologyHints struct { + SocketAffinity []socketmask.SocketMask + Affinity bool +} From d99bac12e6d7e569c078692da057c2f0a6872433 Mon Sep 17 00:00:00 2001 From: Conor Nolan Date: Fri, 10 May 2019 11:58:21 +0100 Subject: [PATCH 3/4] Update Remove/AddPod to Container (#26) More intuitive TopologyHints --- pkg/kubelet/cm/topologymanager/policy.go | 2 +- .../cm/topologymanager/topology_manager.go | 16 +++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/pkg/kubelet/cm/topologymanager/policy.go b/pkg/kubelet/cm/topologymanager/policy.go index 5b9208c7072..ac5bfa443e7 100644 --- a/pkg/kubelet/cm/topologymanager/policy.go +++ b/pkg/kubelet/cm/topologymanager/policy.go @@ -25,5 +25,5 @@ type Policy interface { //Returns Policy Name Name() string //Returns Pod Admit Handler Response based on hints and policy type - CanAdmitPodResult(result TopologyHints) lifecycle.PodAdmitResult + CanAdmitPodResult(admit bool) lifecycle.PodAdmitResult } diff --git a/pkg/kubelet/cm/topologymanager/topology_manager.go b/pkg/kubelet/cm/topologymanager/topology_manager.go index b79254b07f9..8c1cf9fb799 100644 --- a/pkg/kubelet/cm/topologymanager/topology_manager.go +++ b/pkg/kubelet/cm/topologymanager/topology_manager.go @@ -30,26 +30,24 @@ type Manager interface { //wants to be consoluted when making topology hints AddHintProvider(HintProvider) //Adds pod to Manager for tracking - AddPod(pod *v1.Pod, containerID string) error + AddContainer(pod *v1.Pod, containerID string) error //Removes pod from Manager tracking - RemovePod(containerID string) error + RemoveContainer(containerID string) error //Interface for storing pod topology hints Store } //HintProvider interface is to be implemented by Hint Providers type HintProvider interface { - GetTopologyHints(pod v1.Pod, container v1.Container) TopologyHints + GetTopologyHints(pod v1.Pod, container v1.Container) ([]TopologyHint, bool) } //Store interface is to allow Hint Providers to retrieve pod affinity type Store interface { - GetAffinity(podUID string, containerName string) TopologyHints + GetAffinity(podUID string, containerName string) TopologyHint } -//TopologyHints is a struct containing Sokcet Affinity for a Pod -//and whether Affinity is true or false -type TopologyHints struct { - SocketAffinity []socketmask.SocketMask - Affinity bool +// TopologyHint is a struct containing Socket Mask for a Pod +type TopologyHint struct { + SocketAffinity socketmask.SocketMask } From c1a4457573502c49e43ce7922bfe6d2b31d1671a Mon Sep 17 00:00:00 2001 From: lmdaly Date: Wed, 29 May 2019 02:21:51 +0100 Subject: [PATCH 4/4] Update Bazel files to include SocketMask --- pkg/kubelet/cm/BUILD | 1 - pkg/kubelet/cm/topologymanager/BUILD | 5 ++++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/kubelet/cm/BUILD b/pkg/kubelet/cm/BUILD index ba7d720b52c..14078151500 100644 --- a/pkg/kubelet/cm/BUILD +++ b/pkg/kubelet/cm/BUILD @@ -166,7 +166,6 @@ filegroup( "//pkg/kubelet/cm/cpumanager:all-srcs", "//pkg/kubelet/cm/cpuset:all-srcs", "//pkg/kubelet/cm/devicemanager:all-srcs", - "//pkg/kubelet/cm/topologymanager/socketmask:all-srcs", "//pkg/kubelet/cm/topologymanager:all-srcs", "//pkg/kubelet/cm/util:all-srcs", ], diff --git a/pkg/kubelet/cm/topologymanager/BUILD b/pkg/kubelet/cm/topologymanager/BUILD index 162df55d5be..cdd0dbce856 100644 --- a/pkg/kubelet/cm/topologymanager/BUILD +++ b/pkg/kubelet/cm/topologymanager/BUILD @@ -24,7 +24,10 @@ filegroup( filegroup( name = "all-srcs", - srcs = [":package-srcs"], + srcs = [ + ":package-srcs", + "//pkg/kubelet/cm/topologymanager/socketmask:all-srcs", + ], tags = ["automanaged"], visibility = ["//visibility:public"], )