mirror of
https://github.com/kubernetes-sigs/node-feature-discovery.git
synced 2024-12-14 11:57:51 +00:00
nfd-topology-updater: Detect E/P cores and expose through attributes
Signed-off-by: Oleg Zhurakivskyy <oleg.zhurakivskyy@intel.com>
This commit is contained in:
parent
86d2809b77
commit
2946157c6f
2 changed files with 41 additions and 0 deletions
|
@ -22,6 +22,7 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
|
|
||||||
|
@ -42,6 +43,7 @@ import (
|
||||||
"sigs.k8s.io/node-feature-discovery/pkg/resourcemonitor"
|
"sigs.k8s.io/node-feature-discovery/pkg/resourcemonitor"
|
||||||
"sigs.k8s.io/node-feature-discovery/pkg/topologypolicy"
|
"sigs.k8s.io/node-feature-discovery/pkg/topologypolicy"
|
||||||
"sigs.k8s.io/node-feature-discovery/pkg/utils"
|
"sigs.k8s.io/node-feature-discovery/pkg/utils"
|
||||||
|
"sigs.k8s.io/node-feature-discovery/pkg/utils/hostpath"
|
||||||
"sigs.k8s.io/node-feature-discovery/pkg/utils/kubeconf"
|
"sigs.k8s.io/node-feature-discovery/pkg/utils/kubeconf"
|
||||||
"sigs.k8s.io/node-feature-discovery/pkg/version"
|
"sigs.k8s.io/node-feature-discovery/pkg/version"
|
||||||
"sigs.k8s.io/yaml"
|
"sigs.k8s.io/yaml"
|
||||||
|
@ -337,6 +339,32 @@ func (w *nfdTopologyUpdater) updateNodeResourceTopology(zoneInfo v1alpha2.ZoneLi
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Discover E/P cores
|
||||||
|
func discoverCpuCores() v1alpha2.AttributeList {
|
||||||
|
attrList := v1alpha2.AttributeList{}
|
||||||
|
|
||||||
|
cpusPathGlob := hostpath.SysfsDir.Path("sys/devices/cpu_*/cpus")
|
||||||
|
cpuPaths, err := filepath.Glob(cpusPathGlob)
|
||||||
|
if err != nil {
|
||||||
|
klog.ErrorS(err, "error reading cpu entries", "cpusPathGlob", cpusPathGlob)
|
||||||
|
return attrList
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, entry := range cpuPaths {
|
||||||
|
cpus, err := os.ReadFile(entry)
|
||||||
|
if err != nil {
|
||||||
|
klog.ErrorS(err, "error reading cpu entry file", "entry", entry)
|
||||||
|
} else {
|
||||||
|
attrList = append(attrList, v1alpha2.AttributeInfo{
|
||||||
|
Name: filepath.Base(filepath.Dir(entry)),
|
||||||
|
Value: strings.TrimSpace(string(cpus)),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return attrList
|
||||||
|
}
|
||||||
|
|
||||||
func (w *nfdTopologyUpdater) updateNRTTopologyManagerInfo(nrt *v1alpha2.NodeResourceTopology) error {
|
func (w *nfdTopologyUpdater) updateNRTTopologyManagerInfo(nrt *v1alpha2.NodeResourceTopology) error {
|
||||||
policy, scope, err := w.detectTopologyPolicyAndScope()
|
policy, scope, err := w.detectTopologyPolicyAndScope()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -349,6 +377,9 @@ func (w *nfdTopologyUpdater) updateNRTTopologyManagerInfo(nrt *v1alpha2.NodeReso
|
||||||
updateAttributes(&nrt.Attributes, tmAttributes)
|
updateAttributes(&nrt.Attributes, tmAttributes)
|
||||||
nrt.TopologyPolicies = deprecatedTopologyPolicies
|
nrt.TopologyPolicies = deprecatedTopologyPolicies
|
||||||
|
|
||||||
|
attrList := discoverCpuCores()
|
||||||
|
updateAttributes(&nrt.Attributes, attrList)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -198,6 +198,16 @@ func (s *cpuSource) GetLabels() (source.FeatureLabels, error) {
|
||||||
labels["coprocessor.nx_gzip"] = v
|
labels["coprocessor.nx_gzip"] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, err := os.ReadFile(hostpath.SysfsDir.Path("sys/devices/cpu_atom/cpus"))
|
||||||
|
if err == nil {
|
||||||
|
labels["cpu_atom"] = true
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = os.ReadFile(hostpath.SysfsDir.Path("sys/devices/cpu_core/cpus"))
|
||||||
|
if err == nil {
|
||||||
|
labels["cpu_core"] = true
|
||||||
|
}
|
||||||
|
|
||||||
return labels, nil
|
return labels, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue