From e0e85134ad5c26603be9ef09474f2332609ef799 Mon Sep 17 00:00:00 2001 From: Hadi Rayan Al-Sandid Date: Mon, 24 Jun 2024 10:28:58 +0200 Subject: hs-test: Add CPU pinning test suite Type: test Added suite to verify that VPP launches with provided CPU pinning configurations. CPU configuration is specified per-test. Change-Id: Ic283339676d3b24636fc21156a09a192c1a8d8da Signed-off-by: Hadi Rayan Al-Sandid --- extras/hs-test/infra/vppinstance.go | 60 +++++++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 12 deletions(-) (limited to 'extras/hs-test/infra/vppinstance.go') diff --git a/extras/hs-test/infra/vppinstance.go b/extras/hs-test/infra/vppinstance.go index 48d2b783917..d4f570046c7 100644 --- a/extras/hs-test/infra/vppinstance.go +++ b/extras/hs-test/infra/vppinstance.go @@ -88,6 +88,13 @@ type VppInstance struct { Connection *core.Connection ApiStream api.Stream Cpus []int + CpuConfig VppCpuConfig +} + +type VppCpuConfig struct { + PinMainCpu bool + PinWorkersCorelist bool + SkipCores int } func (vpp *VppInstance) getSuite() *HstSuite { @@ -131,7 +138,7 @@ func (vpp *VppInstance) Start() error { defaultApiSocketFilePath, defaultLogFilePath, ) - configContent += vpp.generateCpuConfig() + configContent += vpp.generateVPPCpuConfig() for _, c := range vpp.AdditionalConfig { configContent += c.ToString() } @@ -476,26 +483,55 @@ func (vpp *VppInstance) Disconnect() { vpp.ApiStream.Close() } -func (vpp *VppInstance) generateCpuConfig() string { +func (vpp *VppInstance) setDefaultCpuConfig() { + vpp.CpuConfig.PinMainCpu = true + vpp.CpuConfig.PinWorkersCorelist = true + vpp.CpuConfig.SkipCores = 0 +} + +func (vpp *VppInstance) generateVPPCpuConfig() string { var c Stanza var s string + startCpu := 0 if len(vpp.Cpus) < 1 { return "" } - c.NewStanza("cpu"). - Append(fmt.Sprintf("main-core %d", vpp.Cpus[0])) - vpp.getSuite().Log(fmt.Sprintf("main-core %d", vpp.Cpus[0])) - workers := vpp.Cpus[1:] + + c.NewStanza("cpu") + + // If skip-cores is valid, use as start value to assign main/workers CPUs + if vpp.CpuConfig.SkipCores != 0 { + c.Append(fmt.Sprintf("skip-cores %d", vpp.CpuConfig.SkipCores)) + vpp.getSuite().Log(fmt.Sprintf("skip-cores %d", vpp.CpuConfig.SkipCores)) + } + + if len(vpp.Cpus) > vpp.CpuConfig.SkipCores { + startCpu = vpp.CpuConfig.SkipCores + } + + if vpp.CpuConfig.PinMainCpu { + c.Append(fmt.Sprintf("main-core %d", vpp.Cpus[startCpu])) + vpp.getSuite().Log(fmt.Sprintf("main-core %d", vpp.Cpus[startCpu])) + } + + workers := vpp.Cpus[startCpu+1:] if len(workers) > 0 { - for i := 0; i < len(workers); i++ { - if i != 0 { - s = s + ", " + if vpp.CpuConfig.PinWorkersCorelist { + for i := 0; i < len(workers); i++ { + if i != 0 { + s = s + ", " + } + s = s + fmt.Sprintf("%d", workers[i]) } - s = s + fmt.Sprintf("%d", workers[i]) + c.Append(fmt.Sprintf("corelist-workers %s", s)) + vpp.getSuite().Log("corelist-workers " + s) + } else { + s = fmt.Sprintf("%d", len(workers)) + c.Append(fmt.Sprintf("workers %s", s)) + vpp.getSuite().Log("workers " + s) } - c.Append(fmt.Sprintf("corelist-workers %s", s)) - vpp.getSuite().Log("corelist-workers " + s) } + return c.Close().ToString() } -- cgit 1.2.3-korg