summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorArne Juul <arnej@yahooinc.com>2022-09-29 09:24:30 +0000
committerArne Juul <arnej@yahooinc.com>2022-09-29 09:24:30 +0000
commitadab677d1e10eb1157ba3cf0b56a4fdfea0da0a7 (patch)
tree4a60dff976dfb2fca160a1023196b69a341a5da7 /client
parent6a1da6ee3568b6473373d837b70761593958094a (diff)
minor fixes and refactoring
Diffstat (limited to 'client')
-rw-r--r--client/go/script-utils/startcbinary/common_env.go25
-rw-r--r--client/go/script-utils/startcbinary/progspec.go16
-rw-r--r--client/go/script-utils/startcbinary/startcbinary.go2
-rw-r--r--client/go/script-utils/startcbinary/tuning.go47
-rw-r--r--client/go/script-utils/startcbinary/vespamalloc.go1
5 files changed, 87 insertions, 4 deletions
diff --git a/client/go/script-utils/startcbinary/common_env.go b/client/go/script-utils/startcbinary/common_env.go
index 0bd73d74cd4..44157b5d5a6 100644
--- a/client/go/script-utils/startcbinary/common_env.go
+++ b/client/go/script-utils/startcbinary/common_env.go
@@ -15,12 +15,15 @@ const (
ENV_LD_PRELOAD = "LD_PRELOAD"
ENV_STD_THREAD_PREVENT_TRY_CATCH = "STD_THREAD_PREVENT_TRY_CATCH"
ENV_GLIBCXX_FORCE_NEW = "GLIBCXX_FORCE_NEW"
+ ENV_JAVA_HOME = "JAVA_HOME"
ENV_VESPA_AFFINITY_CPU_SOCKET = "VESPA_AFFINITY_CPU_SOCKET"
ENV_VESPA_LOAD_CODE_AS_HUGEPAGES = "VESPA_LOAD_CODE_AS_HUGEPAGES"
ENV_VESPA_MALLOC_HUGEPAGES = "VESPA_MALLOC_HUGEPAGES"
ENV_VESPA_MALLOC_MADVISE_LIMIT = "VESPA_MALLOC_MADVISE_LIMIT"
ENV_VESPA_NO_NUMACTL = "VESPA_NO_NUMACTL"
+ ENV_VESPA_TIMER_HZ = "VESPA_TIMER_HZ"
+ ENV_VESPA_USER = "VESPA_USER"
ENV_VESPA_USE_HUGEPAGES = "VESPA_USE_HUGEPAGES"
ENV_VESPA_USE_HUGEPAGES_LIST = "VESPA_USE_HUGEPAGES_LIST"
ENV_VESPA_USE_MADVISE_LIST = "VESPA_USE_MADVISE_LIST"
@@ -30,16 +33,16 @@ const (
ENV_VESPA_USE_VESPAMALLOC_D = "VESPA_USE_VESPAMALLOC_D"
ENV_VESPA_USE_VESPAMALLOC_DST = "VESPA_USE_VESPAMALLOC_DST"
ENV_VESPA_VALGRIND_OPT = "VESPA_VALGRIND_OPT"
- ENV_VESPA_USER = "VESPA_USER"
// backwards compatibility variables:
- ENV_ROOT = "ROOT"
ENV_HUGEPAGES_LIST = "HUGEPAGES_LIST"
ENV_MADVISE_LIST = "MADVISE_LIST"
ENV_NO_VESPAMALLOC_LIST = "NO_VESPAMALLOC_LIST"
- ENV_VESPAMALLOC_LIST = "VESPAMALLOCD_LIST"
- ENV_VESPAMALLOCD_LIST = "VESPAMALLOCD_LIST"
+ ENV_PATH = "PATH"
+ ENV_ROOT = "ROOT"
ENV_VESPAMALLOCDST_LIST = "VESPAMALLOCDST_LIST"
+ ENV_VESPAMALLOCD_LIST = "VESPAMALLOCD_LIST"
+ ENV_VESPAMALLOC_LIST = "VESPAMALLOCD_LIST"
)
func (spec *ProgSpec) considerFallback(varName, varValue string) {
@@ -94,3 +97,17 @@ func (spec *ProgSpec) configureUseMadvise() {
return
}
}
+
+func (spec *ProgSpec) configurePath() {
+ // Prefer newer gdb and pstack:
+ spec.prependPath("/opt/rh/gcc-toolset-11/root/usr/bin")
+ // Maven is needed for tester applications:
+ spec.prependPath(vespa.FindHome() + "/local/maven/bin")
+ spec.prependPath(vespa.FindHome() + "/bin64")
+ spec.prependPath(vespa.FindHome() + "/bin")
+ // how to find the "java" program?
+ // should be available in $VESPA_HOME/bin or JAVA_HOME
+ if javaHome := spec.getenv(ENV_JAVA_HOME); javaHome != "" {
+ spec.prependPath(javaHome + "/bin")
+ }
+}
diff --git a/client/go/script-utils/startcbinary/progspec.go b/client/go/script-utils/startcbinary/progspec.go
index 6679a7e008f..a531a862afe 100644
--- a/client/go/script-utils/startcbinary/progspec.go
+++ b/client/go/script-utils/startcbinary/progspec.go
@@ -46,6 +46,22 @@ func (p *ProgSpec) getenv(k string) string {
return os.Getenv(k)
}
+func (p *ProgSpec) prependPath(dirName string) {
+ pathList := []string{dirName}
+ oldPath := p.getenv(ENV_PATH)
+ if oldPath == "" {
+ oldPath = "/usr/bin"
+ }
+ for _, part := range strings.Split(oldPath, ":") {
+ if part != dirName {
+ pathList = append(pathList, part)
+ }
+ }
+ newPath := strings.Join(pathList, ":")
+ p.setenv(ENV_PATH, newPath)
+ os.Setenv(ENV_PATH, newPath)
+}
+
func (p *ProgSpec) matchesListEnv(envVarName string) bool {
return p.matchesListString(p.getenv(envVarName))
}
diff --git a/client/go/script-utils/startcbinary/startcbinary.go b/client/go/script-utils/startcbinary/startcbinary.go
index 56b0c9a1063..5098056ee93 100644
--- a/client/go/script-utils/startcbinary/startcbinary.go
+++ b/client/go/script-utils/startcbinary/startcbinary.go
@@ -13,6 +13,8 @@ import (
func startCbinary(spec ProgSpec) bool {
spec.configureCommonEnv()
+ spec.configurePath()
+ spec.configureTuning()
spec.configureValgrind()
spec.configureNumaCtl()
spec.configureHugePages()
diff --git a/client/go/script-utils/startcbinary/tuning.go b/client/go/script-utils/startcbinary/tuning.go
new file mode 100644
index 00000000000..e528d44e2d0
--- /dev/null
+++ b/client/go/script-utils/startcbinary/tuning.go
@@ -0,0 +1,47 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Author: arnej
+
+package startcbinary
+
+import (
+ "os"
+ "strconv"
+ "strings"
+
+ "github.com/vespa-engine/vespa/client/go/trace"
+ "github.com/vespa-engine/vespa/client/go/util"
+)
+
+func (spec *ProgSpec) optionallyReduceBaseFrequency() {
+ if spec.getenv(ENV_VESPA_TIMER_HZ) == "" {
+ backticks := util.BackTicksIgnoreStderr
+ out, _ := backticks.Run("uname", "-r")
+ if strings.Contains(out, "linuxkit") {
+ trace.Trace("Running docker on macos. Reducing base frequency from 1000hz to 100hz due to high cost of sampling time. This will reduce timeout accuracy.")
+ spec.setenv(ENV_VESPA_TIMER_HZ, "100")
+ }
+ }
+}
+
+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
+}
+
+func (spec *ProgSpec) configureTuning() {
+ spec.optionallyReduceBaseFrequency()
+}
diff --git a/client/go/script-utils/startcbinary/vespamalloc.go b/client/go/script-utils/startcbinary/vespamalloc.go
index 64a0fdd1fdd..15b0fdc80bc 100644
--- a/client/go/script-utils/startcbinary/vespamalloc.go
+++ b/client/go/script-utils/startcbinary/vespamalloc.go
@@ -28,6 +28,7 @@ func (p *ProgSpec) configureVespaMalloc() {
p.shouldUseVespaMalloc = false
if p.matchesListEnv(ENV_VESPA_USE_NO_VESPAMALLOC) {
trace.Trace("use no vespamalloc:", p.BaseName)
+ return
}
if p.shouldUseValgrind && !p.shouldUseCallgrind {
trace.Trace("use valgrind, so no vespamalloc:", p.BaseName)