Prefer scheddebug over netlink for cpu load.

This commit is contained in:
Rohit Jnagal 2015-01-26 20:44:12 +00:00
parent fbe23b0863
commit db3d840a9d

View File

@ -37,18 +37,18 @@ type CpuLoadReader interface {
}
func New() (CpuLoadReader, error) {
// First try to create a netlink based load reader.
reader, err := netlink.New()
if err == nil {
glog.Info("Using a netlink-based load reader")
return reader, nil
}
glog.V(1).Infof("failed to create a netlink-based cpu load read: %v", err)
// Netlink based load reader doesn't work inside namespaces. Fall back to using scheddebug.
// First try to create a scheddebug based load reader.
schedReader, schedErr := scheddebug.New()
if schedErr != nil {
if schedErr == nil {
glog.Info("Using a sched debug based load reader")
return schedReader, nil
}
glog.V(1).Infof("failed to create a scheddebug-based cpu load reader: %v", schedErr)
// netlink gives us more data than scheddebug, but it doesn't work inside network namespaces. It also needs to be hierarchical.
reader, err := netlink.New()
if err != nil {
return nil, fmt.Errorf("failed to create any cpu load reader - netlink based (%v), scheddebug based (%v)", err, schedErr)
}
glog.Info("Using a sched debug based load reader")
return schedReader, nil
glog.Info("Using a netlink-based load reader")
return reader, nil
}