diff --git a/pkg/kubelet/cm/topologymanager/topology_manager.go b/pkg/kubelet/cm/topologymanager/topology_manager.go index 8b288aa6dec..6fb2f9e2442 100644 --- a/pkg/kubelet/cm/topologymanager/topology_manager.go +++ b/pkg/kubelet/cm/topologymanager/topology_manager.go @@ -18,6 +18,7 @@ package topologymanager import ( "fmt" + "time" cadvisorapi "github.com/google/cadvisor/info/v1" "k8s.io/api/core/v1" @@ -209,9 +210,12 @@ func (m *manager) RemoveContainer(containerID string) error { func (m *manager) Admit(attrs *lifecycle.PodAdmitAttributes) lifecycle.PodAdmitResult { klog.InfoS("Topology Admit Handler") - metrics.TopologyManagerAdmissionRequestsTotal.Inc() pod := attrs.Pod - return m.scope.Admit(pod) + startTime := time.Now() + podAdmitResult := m.scope.Admit(pod) + metrics.TopologyManagerAdmissionDuration.Observe(float64(time.Since(startTime).Milliseconds())) + + return podAdmitResult } diff --git a/pkg/kubelet/metrics/metrics.go b/pkg/kubelet/metrics/metrics.go index bb3e16ced99..04e37c6d7d1 100644 --- a/pkg/kubelet/metrics/metrics.go +++ b/pkg/kubelet/metrics/metrics.go @@ -94,6 +94,7 @@ const ( // Metrics to track the Topology manager behavior TopologyManagerAdmissionRequestsTotalKey = "topology_manager_admission_requests_total" TopologyManagerAdmissionErrorsTotalKey = "topology_manager_admission_errors_total" + TopologyManagerAdmissionDurationKey = "topology_manager_admission_duration_ms" // Values used in metric labels Container = "container" @@ -573,6 +574,17 @@ var ( StabilityLevel: metrics.ALPHA, }, ) + + // TopologyManagerAdmissionDuration is a Histogram that tracks the duration (in seconds) to serve a pod admission request. + TopologyManagerAdmissionDuration = metrics.NewHistogram( + &metrics.HistogramOpts{ + Subsystem: KubeletSubsystem, + Name: TopologyManagerAdmissionDurationKey, + Help: "Duration in milliseconds to serve a pod admission request.", + Buckets: metrics.ExponentialBuckets(.05, 2, 15), + StabilityLevel: metrics.ALPHA, + }, + ) ) var registerMetrics sync.Once @@ -626,6 +638,7 @@ func Register(collectors ...metrics.StableCollector) { legacyregistry.MustRegister(CPUManagerPinningErrorsTotal) legacyregistry.MustRegister(TopologyManagerAdmissionRequestsTotal) legacyregistry.MustRegister(TopologyManagerAdmissionErrorsTotal) + legacyregistry.MustRegister(TopologyManagerAdmissionDuration) for _, collector := range collectors { legacyregistry.CustomMustRegister(collector)