summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-11-09 15:30:23 +0100
committerGitHub <noreply@github.com>2022-11-09 15:30:23 +0100
commitdf9c6df4d0282a765fd9831eeb3bfd8ac5e38faa (patch)
treeb9e57f781bde4d962835b4ffdc56a58e5d7585cd
parentfbb2bbb9cf9f229b8e407f2da08bd6ad8414e385 (diff)
parente3c76ba3b55cf7059df0d5677200430eae9a61e5 (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.go18
-rw-r--r--client/go/jvm/mem_options.go12
-rw-r--r--client/go/jvm/memory.go10
-rw-r--r--client/go/jvm/memory_test.go3
-rw-r--r--client/go/util/tuning.go19
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
-}