mirror of
https://github.com/kubernetes-sigs/node-feature-discovery.git
synced 2024-12-14 11:57:51 +00:00
feat: add cpu socket number in cpu.topology
Signed-off-by: AhmedGrati <ahmedgrati1999@gmail.com>
This commit is contained in:
parent
794630f7df
commit
ebb08369d3
2 changed files with 31 additions and 0 deletions
|
@ -867,6 +867,7 @@ The following features are available for matching:
|
||||||
| | | **`bf.enabled`** | bool | `true` if Intel SST-BF (Intel Speed Select Technology - Base frequency) has been enabled, otherwise does not exist |
|
| | | **`bf.enabled`** | bool | `true` if Intel SST-BF (Intel Speed Select Technology - Base frequency) has been enabled, otherwise does not exist |
|
||||||
| **`cpu.topology`** | attribute | | | CPU topology related features |
|
| **`cpu.topology`** | attribute | | | CPU topology related features |
|
||||||
| | | **`hardware_multithreading`** | bool | Hardware multithreading, such as Intel HTT, is enabled |
|
| | | **`hardware_multithreading`** | bool | Hardware multithreading, such as Intel HTT, is enabled |
|
||||||
|
| | | **`socket_count`** | int | Number of CPU Sockets |
|
||||||
| **`cpu.coprocessor`** | attribute | | | CPU Coprocessor related features |
|
| **`cpu.coprocessor`** | attribute | | | CPU Coprocessor related features |
|
||||||
| | | **`nx_gzip`** | bool | Nest Accelerator GZIP support is enabled |
|
| | | **`nx_gzip`** | bool | Nest Accelerator GZIP support is enabled |
|
||||||
| **`kernel.config`** | attribute | | | Kernel configuration options |
|
| **`kernel.config`** | attribute | | | Kernel configuration options |
|
||||||
|
|
|
@ -20,6 +20,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
|
@ -276,9 +277,38 @@ func discoverTopology() map[string]string {
|
||||||
features["hardware_multithreading"] = strconv.FormatBool(ht)
|
features["hardware_multithreading"] = strconv.FormatBool(ht)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if socketCount, err := getCPUSocketCount(); err != nil {
|
||||||
|
klog.ErrorS(err, "failed to get sockets count")
|
||||||
|
} else {
|
||||||
|
features["socket_count"] = strconv.FormatInt(socketCount, 10)
|
||||||
|
}
|
||||||
|
|
||||||
return features
|
return features
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getCPUSocketCount() (int64, error) {
|
||||||
|
files, err := os.ReadDir(hostpath.SysfsDir.Path("bus/cpu/devices"))
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
uniquePhysicalIDs := sets.NewString()
|
||||||
|
|
||||||
|
for _, file := range files {
|
||||||
|
// Try to read physical_package_id from topology
|
||||||
|
physicalID, err := os.ReadFile(hostpath.SysfsDir.Path("bus/cpu/devices", file.Name(), "topology/physical_package_id"))
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
id := strings.TrimSpace(string(physicalID))
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
uniquePhysicalIDs.Insert(id)
|
||||||
|
}
|
||||||
|
return int64(uniquePhysicalIDs.Len()), nil
|
||||||
|
}
|
||||||
|
|
||||||
// Check if any (online) CPUs have thread siblings
|
// Check if any (online) CPUs have thread siblings
|
||||||
func haveThreadSiblings() (bool, error) {
|
func haveThreadSiblings() (bool, error) {
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue