mirror of
https://github.com/kubernetes-sigs/node-feature-discovery.git
synced 2024-12-14 11:57:51 +00:00
source: perform all sysfs discovery under host sysfs
Be consistent and do all sysfs based feature discovery under the same sysfs directory.
This commit is contained in:
parent
248859c64d
commit
67d7887949
8 changed files with 23 additions and 24 deletions
|
@ -19,15 +19,10 @@ package cpu
|
|||
import (
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"path"
|
||||
|
||||
"sigs.k8s.io/node-feature-discovery/source"
|
||||
)
|
||||
|
||||
const (
|
||||
cpuDevicesBaseDir = "/sys/bus/cpu/devices"
|
||||
)
|
||||
|
||||
// Configuration file options
|
||||
type cpuidConfig struct {
|
||||
AttributeBlacklist []string `json:"attributeBlacklist,omitempty"`
|
||||
|
@ -137,14 +132,15 @@ func (s Source) Discover() (source.Features, error) {
|
|||
|
||||
// Check if any (online) CPUs have thread siblings
|
||||
func haveThreadSiblings() (bool, error) {
|
||||
files, err := ioutil.ReadDir(cpuDevicesBaseDir)
|
||||
|
||||
files, err := ioutil.ReadDir(source.SysfsDir.Path("bus/cpu/devices"))
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
for _, file := range files {
|
||||
// Try to read siblings from topology
|
||||
siblings, err := ioutil.ReadFile(path.Join(cpuDevicesBaseDir, file.Name(), "topology/thread_siblings_list"))
|
||||
siblings, err := ioutil.ReadFile(source.SysfsDir.Path("bus/cpu/devices", file.Name(), "topology/thread_siblings_list"))
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
|
|
@ -20,11 +20,11 @@ import (
|
|||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"sigs.k8s.io/node-feature-discovery/pkg/cpuid"
|
||||
"sigs.k8s.io/node-feature-discovery/source"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -38,13 +38,14 @@ func discoverSSTBF() (bool, error) {
|
|||
nominalBaseFrequency := int(freqInfo.EAX)
|
||||
|
||||
// Loop over all CPUs in the system
|
||||
files, err := ioutil.ReadDir(cpuDevicesBaseDir)
|
||||
files, err := ioutil.ReadDir(source.SysfsDir.Path("bus/cpu/devices"))
|
||||
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
for _, file := range files {
|
||||
// Try to read effective base frequency of each cpu in the system
|
||||
filePath := path.Join(cpuDevicesBaseDir, file.Name(), "cpufreq/base_frequency")
|
||||
filePath := source.SysfsDir.Path("bus/cpu/devices", file.Name(), "cpufreq/base_frequency")
|
||||
data, err := ioutil.ReadFile(filePath)
|
||||
if os.IsNotExist(err) {
|
||||
// Ignore missing file and continue to check other CPUs
|
||||
|
|
|
@ -20,6 +20,8 @@ import (
|
|||
"fmt"
|
||||
"io/ioutil"
|
||||
"runtime"
|
||||
|
||||
"sigs.k8s.io/node-feature-discovery/source"
|
||||
)
|
||||
|
||||
// Discover p-state related features such as turbo boost.
|
||||
|
@ -31,7 +33,7 @@ func detectPstate() (map[string]string, error) {
|
|||
}
|
||||
|
||||
// Only looking for turbo boost for now...
|
||||
bytes, err := ioutil.ReadFile("/sys/devices/system/cpu/intel_pstate/no_turbo")
|
||||
bytes, err := ioutil.ReadFile(source.SysfsDir.Path("devices/system/cpu/intel_pstate/no_turbo"))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("can't detect whether turbo boost is enabled: %s", err.Error())
|
||||
}
|
||||
|
|
|
@ -22,6 +22,8 @@ import (
|
|||
"log"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
"sigs.k8s.io/node-feature-discovery/source"
|
||||
)
|
||||
|
||||
type PciDeviceInfo map[string]string
|
||||
|
@ -72,10 +74,10 @@ func readPciDevInfo(devPath string, deviceAttrSpec map[string]bool) (PciDeviceIn
|
|||
// "class" attribute is considered mandatory.
|
||||
// DetectPci() will fail if the retrieval of a mandatory attribute fails.
|
||||
func DetectPci(deviceAttrSpec map[string]bool) (map[string][]PciDeviceInfo, error) {
|
||||
const basePath = "/sys/bus/pci/devices/"
|
||||
sysfsBasePath := source.SysfsDir.Path("bus/pci/devices")
|
||||
devInfo := make(map[string][]PciDeviceInfo)
|
||||
|
||||
devices, err := ioutil.ReadDir(basePath)
|
||||
devices, err := ioutil.ReadDir(sysfsBasePath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -84,7 +86,7 @@ func DetectPci(deviceAttrSpec map[string]bool) (map[string][]PciDeviceInfo, erro
|
|||
|
||||
// Iterate over devices
|
||||
for _, device := range devices {
|
||||
info, err := readPciDevInfo(path.Join(basePath, device.Name()), deviceAttrSpec)
|
||||
info, err := readPciDevInfo(path.Join(sysfsBasePath, device.Name()), deviceAttrSpec)
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
continue
|
||||
|
|
|
@ -32,7 +32,7 @@ func (s Source) Discover() (source.Features, error) {
|
|||
features := source.Features{}
|
||||
|
||||
// Check if any iommu devices are available
|
||||
devices, err := ioutil.ReadDir("/sys/class/iommu/")
|
||||
devices, err := ioutil.ReadDir(source.SysfsDir.Path("class/iommu/"))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Failed to check for IOMMU support: %v", err)
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ func (s Source) Discover() (source.Features, error) {
|
|||
func isNuma() (bool, error) {
|
||||
// Find out how many nodes are online
|
||||
// Multiple nodes is a sign of NUMA
|
||||
bytes, err := ioutil.ReadFile("/sys/devices/system/node/online")
|
||||
bytes, err := ioutil.ReadFile(source.SysfsDir.Path("devices/system/node/online"))
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ func detectNvdimm() (map[string]bool, error) {
|
|||
features := make(map[string]bool)
|
||||
|
||||
// Check presence of physical devices
|
||||
devices, err := ioutil.ReadDir("/sys/class/nd/")
|
||||
devices, err := ioutil.ReadDir(source.SysfsDir.Path("class/nd"))
|
||||
if err == nil {
|
||||
if len(devices) > 0 {
|
||||
features["present"] = true
|
||||
|
@ -93,7 +93,7 @@ func detectNvdimm() (map[string]bool, error) {
|
|||
}
|
||||
|
||||
// Check presence of DAX-configured regions
|
||||
devices, err = ioutil.ReadDir("/sys/bus/nd/devices/")
|
||||
devices, err = ioutil.ReadDir(source.SysfsDir.Path("bus/nd/devices"))
|
||||
if err == nil {
|
||||
for _, d := range devices {
|
||||
if strings.HasPrefix(d.Name(), "dax") {
|
||||
|
|
|
@ -44,8 +44,7 @@ func (s Source) Discover() (source.Features, error) {
|
|||
// iterating through network interfaces to obtain their respective number of virtual functions
|
||||
for _, netInterface := range netInterfaces {
|
||||
if strings.Contains(netInterface.Flags.String(), "up") && !strings.Contains(netInterface.Flags.String(), "loopback") {
|
||||
totalVfsPath := "/sys/class/net/" + netInterface.Name + "/device/sriov_totalvfs"
|
||||
totalBytes, err := ioutil.ReadFile(totalVfsPath)
|
||||
totalBytes, err := ioutil.ReadFile(source.SysfsDir.Path("class/net", netInterface.Name, "device/sriov_totalvfs"))
|
||||
if err != nil {
|
||||
log.Printf("SR-IOV not supported for network interface: %s: %v", netInterface.Name, err)
|
||||
continue
|
||||
|
@ -60,8 +59,7 @@ func (s Source) Discover() (source.Features, error) {
|
|||
log.Printf("SR-IOV capability is detected on the network interface: %s", netInterface.Name)
|
||||
log.Printf("%d maximum supported number of virtual functions on network interface: %s", t, netInterface.Name)
|
||||
features["sriov.capable"] = true
|
||||
numVfsPath := "/sys/class/net/" + netInterface.Name + "/device/sriov_numvfs"
|
||||
numBytes, err := ioutil.ReadFile(numVfsPath)
|
||||
numBytes, err := ioutil.ReadFile(source.SysfsDir.Path("class/net", netInterface.Name, "device/sriov_numvfs"))
|
||||
if err != nil {
|
||||
log.Printf("SR-IOV not configured for network interface: %s: %s", netInterface.Name, err)
|
||||
continue
|
||||
|
|
|
@ -34,10 +34,10 @@ func (s Source) Discover() (source.Features, error) {
|
|||
features := source.Features{}
|
||||
|
||||
// Check if there is any non-rotational block devices attached to the node
|
||||
blockdevices, err := ioutil.ReadDir("/sys/block/")
|
||||
blockdevices, err := ioutil.ReadDir(source.SysfsDir.Path("block"))
|
||||
if err == nil {
|
||||
for _, bdev := range blockdevices {
|
||||
fname := "/sys/block/" + bdev.Name() + "/queue/rotational"
|
||||
fname := source.SysfsDir.Path("block", bdev.Name(), "queue/rotational")
|
||||
bytes, err := ioutil.ReadFile(fname)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("can't read rotational status: %s", err.Error())
|
||||
|
|
Loading…
Reference in a new issue