diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-11-09 15:30:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-09 15:30:23 +0100 |
commit | df9c6df4d0282a765fd9831eeb3bfd8ac5e38faa (patch) | |
tree | b9e57f781bde4d962835b4ffdc56a58e5d7585cd | |
parent | fbb2bbb9cf9f229b8e407f2da08bd6ad8414e385 (diff) | |
parent | e3c76ba3b55cf7059df0d5677200430eae9a61e5 (diff) |
Merge pull request #24810 from vespa-engine/arnej/cleanup-get-thp-size
move and cleanup getTransparentHugepageSize
-rw-r--r-- | client/go/jvm/mem_avail.go | 18 | ||||
-rw-r--r-- | client/go/jvm/mem_options.go | 12 | ||||
-rw-r--r-- | client/go/jvm/memory.go | 10 | ||||
-rw-r--r-- | client/go/jvm/memory_test.go | 3 | ||||
-rw-r--r-- | client/go/util/tuning.go | 19 |
5 files changed, 36 insertions, 26 deletions
diff --git a/client/go/jvm/mem_avail.go b/client/go/jvm/mem_avail.go index 579b5aa8049..21c68d14b39 100644 --- a/client/go/jvm/mem_avail.go +++ b/client/go/jvm/mem_avail.go @@ -122,3 +122,21 @@ func getAvailableMemory() AmountOfMemory { trace.Trace("getAvailableMemory returns:", result) return result } + +func getTransparentHugepageSize() AmountOfMemory { + const fn = "/sys/kernel/mm/transparent_hugepage/hpage_pmd_size" + thp_size := MegaBytesOfMemory(2) + line, err := readLineFrom(fn) + if err == nil { + number, err := strconv.ParseInt(line, 10, 64) + if err == nil { + thp_size = BytesOfMemory(number) + trace.Trace("thp_size", line, "=>", thp_size) + } else { + trace.Trace("no thp_size:", err) + } + } else { + trace.Trace("no thp_size:", err) + } + return thp_size +} diff --git a/client/go/jvm/mem_options.go b/client/go/jvm/mem_options.go index a2be6ac7b26..e8299ca8449 100644 --- a/client/go/jvm/mem_options.go +++ b/client/go/jvm/mem_options.go @@ -8,7 +8,6 @@ import ( "strings" "github.com/vespa-engine/vespa/client/go/trace" - "github.com/vespa-engine/vespa/client/go/util" ) func (opts *Options) getOrSetHeapSize(prefix string, heapSize AmountOfMemory) AmountOfMemory { @@ -43,14 +42,13 @@ func (opts *Options) AddDefaultHeapSizeArgs(minHeapSize, maxHeapSize AmountOfMem opts.MaybeAddHugepages(maxHeapSize) } -func (opts *Options) MaybeAddHugepages(maxHeapSize AmountOfMemory) { - thpSizeSize := util.GetThpSizeMb() - heapSize := maxHeapSize.ToMB() - if thpSizeSize*2 < heapSize { - trace.Trace("add UseTransparentHugePages, thpSize", thpSizeSize, "* 2 < maxHeap", heapSize) +func (opts *Options) MaybeAddHugepages(heapSize AmountOfMemory) { + thpSize := getTransparentHugepageSize() + if thpSize.numBytes*2 < heapSize.numBytes { + trace.Trace("add UseTransparentHugePages, 2 * thpSize", thpSize, " < maxHeap", heapSize) opts.AddOption("-XX:+UseTransparentHugePages") } else { - trace.Trace("no UseTransparentHugePages, thpSize", thpSizeSize, "* 2 >= maxHeap", heapSize) + trace.Trace("no UseTransparentHugePages, 2 * thpSize", thpSize, " >= maxHeap", heapSize) } } diff --git a/client/go/jvm/memory.go b/client/go/jvm/memory.go index dcbf2d3d8b1..8caa1a3be22 100644 --- a/client/go/jvm/memory.go +++ b/client/go/jvm/memory.go @@ -56,6 +56,16 @@ func (v AmountOfMemory) AsJvmSpec() string { } return fmt.Sprintf("%d%s", val, suffix) } +func (v AmountOfMemory) String() string { + val := v.numBytes + idx := 0 + suffix := [9]string{"bytes", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"} + for val > 0 && (val%PowerOfTwo10 == 0) { + val = val / PowerOfTwo10 + idx++ + } + return fmt.Sprintf("{%d %s}", val, suffix[idx]) +} func ParseJvmMemorySpec(spec string) (result AmountOfMemory, err error) { result = BytesOfMemory(0) diff --git a/client/go/jvm/memory_test.go b/client/go/jvm/memory_test.go index c2956513811..c898606a2db 100644 --- a/client/go/jvm/memory_test.go +++ b/client/go/jvm/memory_test.go @@ -32,6 +32,9 @@ func TestConversion(t *testing.T) { assert.Equal(t, "17g", v1.AsJvmSpec()) assert.Equal(t, "17000m", v2.AsJvmSpec()) assert.Equal(t, "17000000k", v3.AsJvmSpec()) + assert.Equal(t, "{17 GiB}", v1.String()) + assert.Equal(t, "{17000 MiB}", v2.String()) + assert.Equal(t, "{17000000 KiB}", v3.String()) var result AmountOfMemory var err error diff --git a/client/go/util/tuning.go b/client/go/util/tuning.go index bc4dbbe4ea7..322d2c31462 100644 --- a/client/go/util/tuning.go +++ b/client/go/util/tuning.go @@ -50,22 +50,3 @@ func TuneResourceLimits() { SetResourceLimit(RLIMIT_NOFILE, numfiles) SetResourceLimit(RLIMIT_NPROC, numprocs) } - -func GetThpSizeMb() int { - const fn = "/sys/kernel/mm/transparent_hugepage/hpage_pmd_size" - thp_size := 2 - line, err := os.ReadFile(fn) - if err == nil { - chomped := strings.TrimSuffix(string(line), "\n") - number, err := strconv.Atoi(chomped) - if err == nil { - thp_size = number / (1024 * 1024) - trace.Trace("thp_size", chomped, "=>", thp_size) - } else { - trace.Trace("no thp_size:", err) - } - } else { - trace.Trace("no thp_size:", err) - } - return thp_size -} |