From 8ceae9f766480d94a5c4706180a5bba705ddc1b5 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Tue, 22 Sep 2020 14:58:59 -0700 Subject: [PATCH] libct/cgroups/GetHugePageSize: use Readdirnames ioutil.ReadFile does a stat() on every entry and returns a slice of os.Stat structures. What we need here is just a file name. This change both simplifies and speeds up the code a bit. Before: BenchmarkGetHugePageSize-8 115213 9400 ns/op After: BenchmarkGetHugePageSize-8 190326 6187 ns/op Signed-off-by: Kir Kolyshkin --- libcontainer/cgroups/utils.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/libcontainer/cgroups/utils.go b/libcontainer/cgroups/utils.go index 58cc4e19c..10baebc6b 100644 --- a/libcontainer/cgroups/utils.go +++ b/libcontainer/cgroups/utils.go @@ -285,15 +285,17 @@ func RemovePaths(paths map[string]string) (err error) { } func GetHugePageSize() ([]string, error) { - files, err := ioutil.ReadDir("/sys/kernel/mm/hugepages") + dir, err := os.OpenFile("/sys/kernel/mm/hugepages", unix.O_DIRECTORY|unix.O_RDONLY, 0) if err != nil { - return []string{}, err + return nil, err } - var fileNames []string - for _, st := range files { - fileNames = append(fileNames, st.Name()) + files, err := dir.Readdirnames(0) + dir.Close() + if err != nil { + return nil, err } - return getHugePageSizeFromFilenames(fileNames) + + return getHugePageSizeFromFilenames(files) } func getHugePageSizeFromFilenames(fileNames []string) ([]string, error) {