From e29707d5adacad2644fed2019d70b2ed3a89cb48 Mon Sep 17 00:00:00 2001 From: Mike Spreitzer Date: Wed, 25 Nov 2020 17:06:07 -0500 Subject: [PATCH 1/3] Reduce expected goodput --- test/e2e/apimachinery/flowcontrol.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/e2e/apimachinery/flowcontrol.go b/test/e2e/apimachinery/flowcontrol.go index 90e703cf8685..cc7b27639e97 100644 --- a/test/e2e/apimachinery/flowcontrol.go +++ b/test/e2e/apimachinery/flowcontrol.go @@ -97,8 +97,8 @@ var _ = SIGDescribe("API priority and fairness", func() { // In contrast, "lowqps" stays under its concurrency shares. // Additionally, the "highqps" client also has a higher matching // precedence for its flow schema. - {username: highQPSClientName, qps: 100.0, concurrencyMultiplier: 2.0, matchingPrecedence: 999, expectedCompletedPercentage: 0.75}, - {username: lowQPSClientName, qps: 5.0, concurrencyMultiplier: 0.5, matchingPrecedence: 1000, expectedCompletedPercentage: 0.75}, + {username: highQPSClientName, qps: 85, concurrencyMultiplier: 2.0, matchingPrecedence: 999, expectedCompletedPercentage: 0.75}, + {username: lowQPSClientName, qps: 4, concurrencyMultiplier: 0.5, matchingPrecedence: 1000, expectedCompletedPercentage: 0.75}, } ginkgo.By("creating test priority levels and flow schemas") @@ -177,8 +177,8 @@ var _ = SIGDescribe("API priority and fairness", func() { expectedCompletedPercentage float64 } clients := []client{ - {username: highQPSClientName, qps: 100.0, concurrencyMultiplier: 2.0, expectedCompletedPercentage: 0.75}, - {username: lowQPSClientName, qps: 5.0, concurrencyMultiplier: 0.5, expectedCompletedPercentage: 0.90}, + {username: highQPSClientName, qps: 85, concurrencyMultiplier: 2.0, expectedCompletedPercentage: 0.75}, + {username: lowQPSClientName, qps: 4, concurrencyMultiplier: 0.5, expectedCompletedPercentage: 0.90}, } framework.Logf("getting real concurrency") From 3b443e59cee3069594e507acd8b01c13bf9b0caf Mon Sep 17 00:00:00 2001 From: Mike Spreitzer Date: Wed, 25 Nov 2020 17:14:24 -0500 Subject: [PATCH 2/3] a bit of cleanup --- test/e2e/apimachinery/flowcontrol.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/e2e/apimachinery/flowcontrol.go b/test/e2e/apimachinery/flowcontrol.go index cc7b27639e97..4a6c5f83f363 100644 --- a/test/e2e/apimachinery/flowcontrol.go +++ b/test/e2e/apimachinery/flowcontrol.go @@ -121,7 +121,7 @@ var _ = SIGDescribe("API priority and fairness", func() { if clients[i].concurrency < 1 { clients[i].concurrency = 1 } - framework.Logf("request concurrency for %q will be %d (concurrency share = %d)", clients[i].username, clients[i].concurrency, realConcurrency) + framework.Logf("request concurrency for %q will be %d (that is %d times client multiplier)", clients[i].username, clients[i].concurrency, realConcurrency) } ginkgo.By(fmt.Sprintf("starting uniform QPS load for %s", loadDuration.String())) @@ -139,7 +139,7 @@ var _ = SIGDescribe("API priority and fairness", func() { ginkgo.By("checking completed requests with expected values") for _, client := range clients { // Each client should have 95% of its ideal number of completed requests. - maxCompletedRequests := float64(client.concurrency) * client.qps * float64(loadDuration/time.Second) + maxCompletedRequests := float64(client.concurrency) * client.qps * loadDuration.Seconds() fractionCompleted := float64(client.completedRequests) / maxCompletedRequests framework.Logf("client %q completed %d/%d requests (%.1f%%)", client.username, client.completedRequests, int32(maxCompletedRequests), 100*fractionCompleted) if fractionCompleted < client.expectedCompletedPercentage { @@ -351,7 +351,7 @@ func testResponseHeaderMatches(f *framework.Framework, impersonatingUser, plUID, func uniformQPSLoadSingle(f *framework.Framework, username string, qps float64, loadDuration time.Duration) int32 { var completed int32 var wg sync.WaitGroup - ticker := time.NewTicker(time.Duration(1e9/qps) * time.Nanosecond) + ticker := time.NewTicker(time.Duration(float64(time.Second) / qps)) defer ticker.Stop() timer := time.NewTimer(loadDuration) for { From e7b0f582d5d635cf56fb6b96204f6841aafc787d Mon Sep 17 00:00:00 2001 From: Mike Spreitzer Date: Wed, 25 Nov 2020 20:11:09 -0500 Subject: [PATCH 3/3] Mostly undo earlier reductions of expectedCompletedPercentage --- test/e2e/apimachinery/flowcontrol.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/e2e/apimachinery/flowcontrol.go b/test/e2e/apimachinery/flowcontrol.go index 4a6c5f83f363..8b0496c07459 100644 --- a/test/e2e/apimachinery/flowcontrol.go +++ b/test/e2e/apimachinery/flowcontrol.go @@ -97,8 +97,8 @@ var _ = SIGDescribe("API priority and fairness", func() { // In contrast, "lowqps" stays under its concurrency shares. // Additionally, the "highqps" client also has a higher matching // precedence for its flow schema. - {username: highQPSClientName, qps: 85, concurrencyMultiplier: 2.0, matchingPrecedence: 999, expectedCompletedPercentage: 0.75}, - {username: lowQPSClientName, qps: 4, concurrencyMultiplier: 0.5, matchingPrecedence: 1000, expectedCompletedPercentage: 0.75}, + {username: highQPSClientName, qps: 90, concurrencyMultiplier: 2.0, matchingPrecedence: 999, expectedCompletedPercentage: 0.90}, + {username: lowQPSClientName, qps: 4, concurrencyMultiplier: 0.5, matchingPrecedence: 1000, expectedCompletedPercentage: 0.90}, } ginkgo.By("creating test priority levels and flow schemas") @@ -177,7 +177,7 @@ var _ = SIGDescribe("API priority and fairness", func() { expectedCompletedPercentage float64 } clients := []client{ - {username: highQPSClientName, qps: 85, concurrencyMultiplier: 2.0, expectedCompletedPercentage: 0.75}, + {username: highQPSClientName, qps: 90, concurrencyMultiplier: 2.0, expectedCompletedPercentage: 0.90}, {username: lowQPSClientName, qps: 4, concurrencyMultiplier: 0.5, expectedCompletedPercentage: 0.90}, }