code: func (m *managerImpl) Start(diskInfoProvider DiskInfoProvider, podFunc ActivePodsFunc, podCleanedUpFunc PodCleanedUpFunc, monitoringInterval time.Duration) {
  	thresholdHandler := func(message string) {
  		klog.Infof(message)
  		m.synchronize(diskInfoProvider, podFunc)
  	}
  	if m.config.KernelMemcgNotification {
  		for _, threshold := range m.config.Thresholds {
  			if threshold.Signal == evictionapi.SignalMemoryAvailable || threshold.Signal == evictionapi.SignalAllocatableMemoryAvailable {
  				notifier, err := NewMemoryThresholdNotifier(threshold, m.config.PodCgroupRoot, &CgroupNotifierFactory{}, thresholdHandler)
  				if err != nil {
  					klog.Warningf("eviction manager: failed to create memory threshold notifier: %v", err)
  				} else {
  					go notifier.Start()
  					m.thresholdNotifiers = append(m.thresholdNotifiers, notifier)
  				}
  			}
  		}
  	}
  	// start the eviction manager monitoring
  	go func() {
  		for {
  			if evictedPods := m.synchronize(diskInfoProvider, podFunc); evictedPods != nil {
  				klog.Infof("eviction manager: pods %s evicted, waiting for pod to be cleaned up", format.Pods(evictedPods))
  				m.waitForPodsCleanup(podCleanedUpFunc, evictedPods)
  			} else {
  				time.Sleep(monitoringInterval)
  			}
  		}
  	}()
  }
docs: // Start starts the control loop to observe and response to low compute resources.