forked from DataDog/datadog-agent
/
cgroup_shared.go
42 lines (35 loc) · 1.06 KB
/
cgroup_shared.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Unless explicitly stated otherwise all files in this repository are licensed
// under the Apache License Version 2.0.
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2016-present Datadog, Inc.
//go:build linux
// +build linux
package cgroups
import (
"strconv"
"strings"
)
// parseCPUSetFormat counts CPUs in CPUSet specs like "0,1,5-8". These are comma-separated lists
// of processor IDs, with hyphenated ranges representing closed sets.
// So "0,1,5-8" represents processors 0, 1, 5, 6, 7, 8.
// The function returns the count of CPUs, in this case 6.
func parseCPUSetFormat(line string) uint64 {
var numCPUs uint64
lineSlice := strings.Split(line, ",")
for _, l := range lineSlice {
lineParts := strings.Split(l, "-")
if len(lineParts) == 2 {
p0, _ := strconv.Atoi(lineParts[0])
p1, _ := strconv.Atoi(lineParts[1])
numCPUs += uint64(p1 - p0 + 1)
} else if len(lineParts) == 1 {
numCPUs++
}
}
return numCPUs
}
func nilIfZero(value **uint64) {
if *value != nil && **value == 0 {
*value = nil
}
}