mirror of
https://github.com/ClusterCockpit/cc-metric-collector.git
synced 2024-12-27 07:39:05 +01:00
Do not store unused topology information
This commit is contained in:
parent
013ae7ec6d
commit
0db1cda27f
@ -14,29 +14,18 @@ import (
|
|||||||
lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric"
|
lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric"
|
||||||
)
|
)
|
||||||
|
|
||||||
//
|
|
||||||
// CPUFreqCollector
|
// CPUFreqCollector
|
||||||
// a metric collector to measure the current frequency of the CPUs
|
// a metric collector to measure the current frequency of the CPUs
|
||||||
// as obtained from /proc/cpuinfo
|
// as obtained from /proc/cpuinfo
|
||||||
// Only measure on the first hyperthread
|
// Only measure on the first hyperthread
|
||||||
//
|
|
||||||
type CPUFreqCpuInfoCollectorTopology struct {
|
type CPUFreqCpuInfoCollectorTopology struct {
|
||||||
processor string // logical processor number (continuous, starting at 0)
|
isHT bool
|
||||||
coreID string // socket local core ID
|
tagSet map[string]string
|
||||||
coreID_int int64
|
|
||||||
physicalPackageID string // socket / package ID
|
|
||||||
physicalPackageID_int int64
|
|
||||||
numPhysicalPackages string // number of sockets / packages
|
|
||||||
numPhysicalPackages_int int64
|
|
||||||
isHT bool
|
|
||||||
numNonHT string // number of non hyperthreading processors
|
|
||||||
numNonHT_int int64
|
|
||||||
tagSet map[string]string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type CPUFreqCpuInfoCollector struct {
|
type CPUFreqCpuInfoCollector struct {
|
||||||
metricCollector
|
metricCollector
|
||||||
topology []*CPUFreqCpuInfoCollectorTopology
|
topology []CPUFreqCpuInfoCollectorTopology
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *CPUFreqCpuInfoCollector) Init(config json.RawMessage) error {
|
func (m *CPUFreqCpuInfoCollector) Init(config json.RawMessage) error {
|
||||||
@ -65,11 +54,9 @@ func (m *CPUFreqCpuInfoCollector) Init(config json.RawMessage) error {
|
|||||||
// Collect topology information from file cpuinfo
|
// Collect topology information from file cpuinfo
|
||||||
foundFreq := false
|
foundFreq := false
|
||||||
processor := ""
|
processor := ""
|
||||||
var numNonHT_int int64 = 0
|
|
||||||
coreID := ""
|
coreID := ""
|
||||||
physicalPackageID := ""
|
physicalPackageID := ""
|
||||||
var maxPhysicalPackageID int64 = 0
|
m.topology = make([]CPUFreqCpuInfoCollectorTopology, 0)
|
||||||
m.topology = make([]*CPUFreqCpuInfoCollectorTopology, 0)
|
|
||||||
coreSeenBefore := make(map[string]bool)
|
coreSeenBefore := make(map[string]bool)
|
||||||
|
|
||||||
// Read cpuinfo file, line by line
|
// Read cpuinfo file, line by line
|
||||||
@ -98,41 +85,22 @@ func (m *CPUFreqCpuInfoCollector) Init(config json.RawMessage) error {
|
|||||||
len(coreID) > 0 &&
|
len(coreID) > 0 &&
|
||||||
len(physicalPackageID) > 0 {
|
len(physicalPackageID) > 0 {
|
||||||
|
|
||||||
topology := new(CPUFreqCpuInfoCollectorTopology)
|
|
||||||
|
|
||||||
// Processor
|
|
||||||
topology.processor = processor
|
|
||||||
|
|
||||||
// Core ID
|
|
||||||
topology.coreID = coreID
|
|
||||||
topology.coreID_int, err = strconv.ParseInt(coreID, 10, 64)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("unable to convert coreID '%s' to int64: %v", coreID, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Physical package ID
|
|
||||||
topology.physicalPackageID = physicalPackageID
|
|
||||||
topology.physicalPackageID_int, err = strconv.ParseInt(physicalPackageID, 10, 64)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("unable to convert physicalPackageID '%s' to int64: %v", physicalPackageID, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// increase maximun socket / package ID, when required
|
|
||||||
if topology.physicalPackageID_int > maxPhysicalPackageID {
|
|
||||||
maxPhysicalPackageID = topology.physicalPackageID_int
|
|
||||||
}
|
|
||||||
|
|
||||||
// is hyperthread?
|
|
||||||
globalID := physicalPackageID + ":" + coreID
|
globalID := physicalPackageID + ":" + coreID
|
||||||
topology.isHT = coreSeenBefore[globalID]
|
|
||||||
coreSeenBefore[globalID] = true
|
|
||||||
if !topology.isHT {
|
|
||||||
// increase number on non hyper thread cores
|
|
||||||
numNonHT_int++
|
|
||||||
}
|
|
||||||
|
|
||||||
// store collected topology information
|
// store collected topology information
|
||||||
m.topology = append(m.topology, topology)
|
m.topology = append(m.topology,
|
||||||
|
CPUFreqCpuInfoCollectorTopology{
|
||||||
|
isHT: coreSeenBefore[globalID],
|
||||||
|
tagSet: map[string]string{
|
||||||
|
"type": "hwthread",
|
||||||
|
"type-id": processor,
|
||||||
|
"package_id": physicalPackageID,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
// mark core as seen before
|
||||||
|
coreSeenBefore[globalID] = true
|
||||||
|
|
||||||
// reset topology information
|
// reset topology information
|
||||||
foundFreq = false
|
foundFreq = false
|
||||||
@ -142,24 +110,9 @@ func (m *CPUFreqCpuInfoCollector) Init(config json.RawMessage) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if at least one CPU with frequency information was detected
|
// Check if at least one CPU with frequency information was detected
|
||||||
if len(m.topology) == 0 {
|
if len(m.topology) == 0 {
|
||||||
return fmt.Errorf("No CPU frequency info found in %s", cpuInfoFile)
|
return fmt.Errorf("No CPU frequency info found in %s", cpuInfoFile)
|
||||||
}
|
|
||||||
|
|
||||||
numPhysicalPackageID_int := maxPhysicalPackageID + 1
|
|
||||||
numPhysicalPackageID := fmt.Sprint(numPhysicalPackageID_int)
|
|
||||||
numNonHT := fmt.Sprint(numNonHT_int)
|
|
||||||
for _, t := range m.topology {
|
|
||||||
t.numPhysicalPackages = numPhysicalPackageID
|
|
||||||
t.numPhysicalPackages_int = numPhysicalPackageID_int
|
|
||||||
t.numNonHT = numNonHT
|
|
||||||
t.numNonHT_int = numNonHT_int
|
|
||||||
t.tagSet = map[string]string{
|
|
||||||
"type": "hwthread",
|
|
||||||
"type-id": t.processor,
|
|
||||||
"package_id": t.physicalPackageID,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m.init = true
|
m.init = true
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
## `cpufreq_cpuinfo` collector
|
## `cpufreq_cpuinfo` collector
|
||||||
|
|
||||||
```json
|
```json
|
||||||
"cpufreq_cpuinfo": {}
|
"cpufreq_cpuinfo": {}
|
||||||
```
|
```
|
||||||
@ -7,4 +7,5 @@
|
|||||||
The `cpufreq_cpuinfo` collector reads the clock frequency from `/proc/cpuinfo` and outputs a handful **hwthread** metrics.
|
The `cpufreq_cpuinfo` collector reads the clock frequency from `/proc/cpuinfo` and outputs a handful **hwthread** metrics.
|
||||||
|
|
||||||
Metrics:
|
Metrics:
|
||||||
|
|
||||||
* `cpufreq`
|
* `cpufreq`
|
||||||
|
Loading…
Reference in New Issue
Block a user