MCPcopy
hub / github.com/jaypipes/ghw / topologyNodes

Function topologyNodes

pkg/topology/topology_linux.go:32–83  ·  view source on GitHub ↗
(ctx context.Context)

Source from the content-addressed store, hash-verified

30}
31
32func topologyNodes(ctx context.Context) []*Node {
33 paths := linuxpath.New(ctx)
34 nodes := make([]*Node, 0)
35
36 files, err := os.ReadDir(paths.SysDevicesSystemNode)
37 if err != nil {
38 log.Warn(ctx, "failed to determine nodes: %s\n", err)
39 return nodes
40 }
41 for _, file := range files {
42 filename := file.Name()
43 if !strings.HasPrefix(filename, "node") {
44 continue
45 }
46 node := &Node{}
47 nodeID, err := strconv.Atoi(filename[4:])
48 if err != nil {
49 log.Warn(ctx, "failed to determine node ID: %s\n", err)
50 return nodes
51 }
52 node.ID = nodeID
53 cores, err := cpu.CoresForNode(ctx, nodeID)
54 if err != nil {
55 log.Warn(ctx, "failed to determine cores for node: %s\n", err)
56 return nodes
57 }
58 node.Cores = cores
59 caches, err := memory.CachesForNode(ctx, nodeID)
60 if err != nil {
61 log.Warn(ctx, "failed to determine caches for node: %s\n", err)
62 return nodes
63 }
64 node.Caches = caches
65
66 distances, err := distancesForNode(paths, nodeID)
67 if err != nil {
68 log.Warn(ctx, "failed to determine node distances for node: %s\n", err)
69 return nodes
70 }
71 node.Distances = distances
72
73 area, err := memory.AreaForNode(paths, nodeID)
74 if err != nil {
75 log.Warn(ctx, "failed to determine memory area for node: %s\n", err)
76 return nodes
77 }
78 node.Memory = area
79
80 nodes = append(nodes, node)
81 }
82 return nodes
83}
84
85func distancesForNode(paths *linuxpath.Paths, nodeID int) ([]int, error) {
86 path := filepath.Join(

Callers 1

loadMethod · 0.70

Calls 6

NewFunction · 0.92
WarnFunction · 0.92
CoresForNodeFunction · 0.92
CachesForNodeFunction · 0.92
AreaForNodeFunction · 0.92
distancesForNodeFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…