@@ -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
0 commit comments