Skip to content

Commit 59f89da

Browse files
committed
Report hugepages total count
Signed-off-by: Marcin Franczyk <[email protected]>
1 parent 884f61f commit 59f89da

File tree

3 files changed

+26
-41
lines changed

3 files changed

+26
-41
lines changed

source/memory/memory.go

Lines changed: 15 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ import (
2121
"fmt"
2222
"os"
2323
"path/filepath"
24-
"regexp"
2524
"strconv"
2625
"strings"
2726

27+
corev1 "k8s.io/api/core/v1"
2828
"k8s.io/apimachinery/pkg/api/resource"
2929
"k8s.io/klog/v2"
3030

@@ -208,53 +208,39 @@ func detectHugePages() (map[string]string, error) {
208208
return nil, fmt.Errorf("unable to read huge pages size: %w", err)
209209
}
210210

211-
reg := regexp.MustCompile(`hugepages-(\d+)`)
212211
for _, entry := range subdirs {
213212
if !entry.IsDir() {
214213
continue
215214
}
216215

217-
pageSize, err := getHugePageSize(basePath, entry.Name(), reg)
216+
totalPages, err := getHugePagesTotalCount(basePath, entry.Name())
218217
if err != nil {
219-
klog.ErrorS(err, "skipping huge page entry", "entry", entry.Name())
218+
klog.ErrorS(err, "unable to read hugepages total count", "hugepages", entry.Name())
219+
}
220+
pageSize := strings.TrimRight(strings.TrimPrefix(entry.Name(), "hugepages-"), "kB")
221+
quantity, err := resource.ParseQuantity(pageSize + "Ki")
222+
if err != nil {
223+
klog.ErrorS(err, "unable to parse quantity", "hugepages", entry.Name(), "pageSize", pageSize)
220224
continue
221225
}
222-
if pageSize != "" {
226+
227+
hugePages[corev1.ResourceHugePagesPrefix+quantity.String()] = totalPages
228+
if v, err := strconv.Atoi(totalPages); err == nil && v > 0 {
223229
hugePages["enabled"] = "true"
224-
hugePages[pageSize] = "true"
225230
}
226231
}
227232

228233
return hugePages, nil
229234
}
230235

231-
func getHugePageSize(basePath, dirName string, reg *regexp.Regexp) (string, error) {
232-
matches := reg.FindStringSubmatch(dirName)
233-
if len(matches) != 2 {
234-
return "", fmt.Errorf("unexpected directory format: %s", dirName)
235-
}
236-
237-
totalPagesFile := filepath.Join(basePath, dirName, "nr_hugepages")
238-
totalPagesRaw, err := os.ReadFile(totalPagesFile)
236+
func getHugePagesTotalCount(basePath, dirname string) (string, error) {
237+
totalPagesFile := filepath.Join(basePath, dirname, "nr_hugepages")
238+
totalPages, err := os.ReadFile(totalPagesFile)
239239
if err != nil {
240240
return "", fmt.Errorf("unable to read total number of huge pages from the file: %s", totalPagesFile)
241241
}
242242

243-
totalPages, err := strconv.Atoi(strings.TrimSpace(string(totalPagesRaw)))
244-
if err != nil {
245-
return "", fmt.Errorf("unable to convert total pages to integer - %s: %s", totalPagesFile, totalPagesRaw)
246-
}
247-
if totalPages < 1 {
248-
return "", nil
249-
}
250-
251-
sizeFormat := matches[1] + "Ki"
252-
quantity, err := resource.ParseQuantity(sizeFormat)
253-
if err != nil {
254-
return "", fmt.Errorf("invalid size format: %s", sizeFormat)
255-
}
256-
257-
return "hugepages-" + quantity.String(), nil
243+
return strings.TrimSpace(string(totalPages)), nil
258244
}
259245

260246
// ndDevAttrs is the list of sysfs files (under each nd device) that we're trying to read

source/memory/memory_test.go

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ limitations under the License.
1717
package memory
1818

1919
import (
20-
"regexp"
2120
"testing"
2221

2322
. "github.com/smartystreets/goconvey/convey"
@@ -73,7 +72,8 @@ func TestDetectHugePages(t *testing.T) {
7372

7473
expectedHugePages := map[string]string{
7574
"enabled": "true",
76-
"hugepages-1Gi": "true",
75+
"hugepages-1Gi": "2",
76+
"hugepages-2Mi": "0",
7777
}
7878
hugePages, err := detectHugePages()
7979
assert.Nil(t, err)
@@ -93,25 +93,23 @@ func TestDetectHugePages(t *testing.T) {
9393

9494
}
9595

96-
func TestGetHugePagesSize(t *testing.T) {
97-
98-
re := regexp.MustCompile(`hugepages-(\d+)`)
96+
func TestGetHugePagesTotalCount(t *testing.T) {
9997

10098
Convey("With configured total huge pages", t, func() {
101-
hugePage, err := getHugePageSize("testdata/hugepages/kernel/mm/hugepages", "hugepages-1048576kB", re)
102-
assert.Equal(t, "hugepages-1Gi", hugePage)
99+
totalPages, err := getHugePagesTotalCount("testdata/hugepages/kernel/mm/hugepages", "hugepages-1048576kB")
100+
assert.Equal(t, "2", totalPages)
103101
assert.Nil(t, err)
104102
})
105103

106104
Convey("With not configured total huge pages", t, func() {
107-
hugePage, err := getHugePageSize("testdata/hugepages/kernel/mm/hugepages", "hugepages-2048kB", re)
108-
assert.Equal(t, "", hugePage)
109-
assert.NotNil(t, err)
105+
totalPages, err := getHugePagesTotalCount("testdata/hugepages/kernel/mm/hugepages", "hugepages-2048kB")
106+
assert.Equal(t, "0", totalPages)
107+
assert.Nil(t, err)
110108
})
111109

112110
Convey("With invalid huge page directory", t, func() {
113-
hugePage, err := getHugePageSize("testdata/hugepages/kernel/mm/hugepages", "hugepages-invalid", re)
114-
assert.Equal(t, "", hugePage)
111+
totalPages, err := getHugePagesTotalCount("testdata/hugepages/kernel/mm/hugepages", "hugepages-invalid")
112+
assert.Equal(t, "", totalPages)
115113
assert.NotNil(t, err)
116114
})
117115

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0

0 commit comments

Comments
 (0)