Skip to content

Commit d1e4646

Browse files
craig[bot]wenyihu6tbg
committed
154869: allocatorimpl: consult with mma for lease count convergence r=tbg a=wenyihu6 Rebased on top of #154499. ---- Previously, the replicate queue was updated to check with MMA before considering a change as a candidate when LBRebalancingMultiMetricAndCount is set. This commit applies the same logic to the lease queue, filtering out candidates deemed undesirable. Resolve: #153520 Epic: CRDB-49117 Release note: none 154955: asim: fix high_cpu test r=wenyihu6 a=tbg - **mmaprototype: remove some spammy logging** - **asim: fix high_cpu.txt** Epic: CRDB-55052 Co-authored-by: wenyihu6 <[email protected]> Co-authored-by: Tobias Grieger <[email protected]>
3 parents 1673d01 + df26a2b + 8851ca9 commit d1e4646

File tree

10 files changed

+298
-94
lines changed

10 files changed

+298
-94
lines changed

pkg/kv/kvserver/allocator/allocatorimpl/allocator.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2543,9 +2543,17 @@ func (a *Allocator) TransferLeaseTarget(
25432543
return validTargets[a.randGen.Intn(len(validTargets))]
25442544
}
25452545

2546+
targetStores := make([]roachpb.StoreID, 0, len(sl.Stores))
2547+
for _, s := range sl.Stores {
2548+
targetStores = append(targetStores, s.StoreID)
2549+
}
2550+
handle := a.as.BuildMMARebalanceAdvisor(source.StoreID, targetStores)
25462551
var bestOption roachpb.ReplicaDescriptor
25472552
candidates := make([]roachpb.ReplicaDescriptor, 0, len(validTargets))
25482553
bestOptionLeaseCount := int32(math.MaxInt32)
2554+
// Similar to replicate queue, lease queue only filters out overloaded
2555+
// stores at the final target selection step. See comments on top of
2556+
// allocatorSync.BuildMMARebalanceAdvisor for more details.
25492557
for _, repl := range validTargets {
25502558
if leaseRepl.StoreID() == repl.StoreID {
25512559
continue
@@ -2555,7 +2563,13 @@ func (a *Allocator) TransferLeaseTarget(
25552563
continue
25562564
}
25572565
if float64(storeDesc.Capacity.LeaseCount) < candidateLeasesMean-0.5 {
2558-
candidates = append(candidates, repl)
2566+
// Only include the candidate if it is not in conflict with mma's goals.
2567+
// Note that even if all candidates are excluded, the len(candidates) ==
2568+
// 0 branch below will still return the replica with the lowest lease
2569+
// count if we are required to shed the lease (excludeLeaseRepl==true).
2570+
if !a.as.IsInConflictWithMMA(ctx, repl.StoreID, handle, true /*cpuOnly*/) {
2571+
candidates = append(candidates, repl)
2572+
}
25592573
}
25602574
if storeDesc.Capacity.LeaseCount < bestOptionLeaseCount {
25612575
bestOption = repl

pkg/kv/kvserver/allocator/allocatorimpl/allocator_test.go

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2205,6 +2205,183 @@ func TestAllocatorTransferLeaseTargetIOOverloadCheck(t *testing.T) {
22052205

22062206
}
22072207

2208+
// TestAllocatorTransferLeaseTargetMMAConflict tests that the MMA conflict
2209+
// checking logic in TransferLeaseTarget works correctly. It should check with
2210+
// mma but still allow transfer if the transfer is needed to shed due to IO
2211+
// overload or lease preference violation.
2212+
func TestAllocatorTransferLeaseTargetMMAConflict(t *testing.T) {
2213+
defer leaktest.AfterTest(t)()
2214+
defer log.Scope(t).Close(t)
2215+
ctx := context.Background()
2216+
2217+
existing := replicas(1, 2, 3)
2218+
2219+
leasePreferences := func() []roachpb.LeasePreference {
2220+
return []roachpb.LeasePreference{
2221+
{Constraints: []roachpb.Constraint{{Key: "region", Value: "us-east", Type: roachpb.Constraint_REQUIRED}}},
2222+
}
2223+
}
2224+
2225+
// Helper function to create default store descriptors
2226+
createDefaultStores := func() []*roachpb.StoreDescriptor {
2227+
var stores []*roachpb.StoreDescriptor
2228+
for i := 1; i <= 3; i++ {
2229+
region := "us-east"
2230+
if i == 1 {
2231+
region = "us-west" // Store 1 violates us-east preference
2232+
}
2233+
2234+
leaseCount := int32(50)
2235+
if i == 1 {
2236+
leaseCount = 100 // Store 1 has more leases for convergence testing
2237+
}
2238+
2239+
stores = append(stores, &roachpb.StoreDescriptor{
2240+
StoreID: roachpb.StoreID(i),
2241+
Node: roachpb.NodeDescriptor{
2242+
NodeID: roachpb.NodeID(i),
2243+
Locality: roachpb.Locality{
2244+
Tiers: []roachpb.Tier{
2245+
{Key: "region", Value: region},
2246+
},
2247+
},
2248+
},
2249+
Capacity: roachpb.StoreCapacity{
2250+
LeaseCount: leaseCount,
2251+
IOThresholdMax: TestingIOThresholdWithScore(0.1), // Default low IO score
2252+
},
2253+
})
2254+
}
2255+
return stores
2256+
}
2257+
2258+
testCases := []struct {
2259+
name string
2260+
leaseholder roachpb.StoreID
2261+
mmaReturnsConflict bool
2262+
expected roachpb.StoreID
2263+
conf *roachpb.SpanConfig
2264+
enforcement IOOverloadEnforcementLevel
2265+
setupStores func() []*roachpb.StoreDescriptor // Function to create stores for this test case
2266+
}{
2267+
{
2268+
name: "normal lease count convergence respects MMA conflict",
2269+
leaseholder: 1,
2270+
mmaReturnsConflict: true,
2271+
expected: 0, // Should be blocked by MMA conflict
2272+
conf: emptySpanConfig(),
2273+
setupStores: createDefaultStores,
2274+
},
2275+
{
2276+
name: "normal lease count convergence proceeds when MMA allows",
2277+
leaseholder: 1,
2278+
mmaReturnsConflict: false,
2279+
// 2, 3 are both valid targets, 2 is picked since this is a random
2280+
// deterministic choice.
2281+
expected: 2,
2282+
conf: emptySpanConfig(),
2283+
setupStores: createDefaultStores,
2284+
},
2285+
{
2286+
name: "lease preferences bypass MMA conflict",
2287+
leaseholder: 1, // Store 1 violates preference (us-west)
2288+
mmaReturnsConflict: true,
2289+
// Pick store 2 regardless of MMA conflict.
2290+
expected: 2,
2291+
conf: &roachpb.SpanConfig{LeasePreferences: leasePreferences()},
2292+
setupStores: createDefaultStores,
2293+
},
2294+
{
2295+
name: "lease preferences respect MMA conflict when no violation",
2296+
leaseholder: 2, // Store 2 satisfies preference (us-east)
2297+
mmaReturnsConflict: true,
2298+
// Should be blocked by MMA conflict since no preference violation.
2299+
expected: 0,
2300+
conf: &roachpb.SpanConfig{LeasePreferences: leasePreferences()},
2301+
setupStores: createDefaultStores,
2302+
},
2303+
{
2304+
name: "lease preferences work when MMA allows",
2305+
leaseholder: 1, // Store 1 violates preference (us-west)
2306+
mmaReturnsConflict: false,
2307+
// Should move to store 2 (first preferred store).
2308+
expected: 2,
2309+
conf: &roachpb.SpanConfig{LeasePreferences: leasePreferences()},
2310+
setupStores: createDefaultStores,
2311+
},
2312+
{
2313+
name: "IO overload bypasses MMA conflict when needs to be shed",
2314+
leaseholder: 1,
2315+
mmaReturnsConflict: true,
2316+
// Pick store 2 even though it's in conflict with MMA.
2317+
expected: 2,
2318+
conf: emptySpanConfig(),
2319+
enforcement: IOOverloadThresholdShed,
2320+
setupStores: func() []*roachpb.StoreDescriptor {
2321+
stores := createDefaultStores()
2322+
stores[0].Capacity.IOThresholdMax = TestingIOThresholdWithScore(0.5) // Store 1 is IO overloaded
2323+
return stores
2324+
},
2325+
},
2326+
{
2327+
name: "transfer allowed by IO overload and mma",
2328+
leaseholder: 1,
2329+
mmaReturnsConflict: false,
2330+
// Should move to store 3. 2 is blocked by
2331+
// IOOverloadThresholdBlockTransfers. 3 is allowed by check and mma.
2332+
expected: 3,
2333+
conf: emptySpanConfig(),
2334+
enforcement: IOOverloadThresholdBlockTransfers,
2335+
setupStores: func() []*roachpb.StoreDescriptor {
2336+
stores := createDefaultStores()
2337+
stores[1].Capacity.IOThresholdMax = TestingIOThresholdWithScore(0.5) // Store 2 is IO overloaded
2338+
return stores
2339+
},
2340+
},
2341+
}
2342+
2343+
for _, tc := range testCases {
2344+
t.Run(tc.name, func(t *testing.T) {
2345+
// Create allocator with custom MMA knobs for this test case
2346+
stopper, g, sp, a, _ := CreateTestAllocatorWithKnobs(ctx, 10, true /* deterministic */, nil, &mmaintegration.TestingKnobs{
2347+
OverrideIsInConflictWithMMA: func(cand roachpb.StoreID) bool {
2348+
return tc.mmaReturnsConflict
2349+
},
2350+
})
2351+
defer stopper.Stop(ctx)
2352+
2353+
// Set up stores using the test case's setup function
2354+
stores := tc.setupStores()
2355+
sg := gossiputil.NewStoreGossiper(g)
2356+
sg.GossipStores(stores, t)
2357+
2358+
// Set up IO overload enforcement if specified
2359+
if tc.enforcement != 0 {
2360+
LeaseIOOverloadThresholdEnforcement.Override(ctx, &a.st.SV, tc.enforcement)
2361+
}
2362+
2363+
EnableLoadBasedLeaseRebalancing.Override(ctx, &a.st.SV, false)
2364+
2365+
target := a.TransferLeaseTarget(
2366+
ctx,
2367+
sp,
2368+
&roachpb.RangeDescriptor{},
2369+
tc.conf,
2370+
existing,
2371+
&mockRepl{
2372+
replicationFactor: 3,
2373+
storeID: tc.leaseholder,
2374+
},
2375+
allocator.RangeUsageInfo{}, /* stats */
2376+
allocator.TransferLeaseOptions{
2377+
CheckCandidateFullness: true,
2378+
},
2379+
)
2380+
require.Equal(t, tc.expected, target.StoreID)
2381+
})
2382+
}
2383+
}
2384+
22082385
func TestAllocatorTransferLeaseToReplicasNeedingSnapshot(t *testing.T) {
22092386
defer leaktest.AfterTest(t)()
22102387
defer log.Scope(t).Close(t)

pkg/kv/kvserver/allocator/mmaprototype/load.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -525,17 +525,6 @@ func loadSummaryForDimension(
525525
if capacity != UnknownCapacity {
526526
fractionUsed = float64(load) / float64(capacity)
527527
}
528-
defer func() {
529-
if log.V(2) {
530-
if storeID == 0 {
531-
log.KvDistribution.Infof(ctx, "n%d[%v]: load=%d, mean_load=%d, fraction above=%.2f, load_summary=%v",
532-
nodeID, dim, load, meanLoad, fractionAbove, summary)
533-
} else {
534-
log.KvDistribution.Infof(ctx, "s%d[%v]: load=%d, mean_load=%d, fraction above=%.2f, load_summary=%v",
535-
storeID, dim, load, meanLoad, fractionAbove, summary)
536-
}
537-
}
538-
}()
539528

540529
summaryUpperBound := overloadUrgent
541530
// Be less aggressive about the ByteSize dimension when the fractionUsed is

pkg/kv/kvserver/asim/tests/datadriven_simulation_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,9 @@ var runAsimTests = envutil.EnvOrDefaultBool("COCKROACH_RUN_ASIM_TESTS", false)
169169
//
170170
// To run all tests and rewrite the testdata files as well as generate the
171171
// artifacts in `testdata/generated`, you can use:
172-
// ./dev test pkg/kv/kvserver/asim/tests --ignore-cache --rewrite -v -f TestDataDriven -- --test_env COCKROACH_RUN_ASIM_TESTS=true --test_env
173-
// COCKROACH_ALWAYS_KEEP_TEST_LOGS=true */
172+
/*
173+
./dev test pkg/kv/kvserver/asim/tests --ignore-cache --rewrite -v -f TestDataDriven -- --test_env COCKROACH_RUN_ASIM_TESTS=true --test_env COCKROACH_ALWAYS_KEEP_TEST_LOGS=true
174+
*/
174175
func TestDataDriven(t *testing.T) {
175176
skip.UnderDuressWithIssue(t, 149875)
176177
leakTestAfter := leaktest.AfterTest(t)

pkg/kv/kvserver/asim/tests/testdata/non_rand/mma/high_cpu.txt

Lines changed: 51 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,54 +12,77 @@ gen_cluster nodes=10 node_cpu_rate_capacity=8000000000
1212

1313
# TODO(wenyihu6): why didn't we balance more replicas/leases - is it because of a very high cpu per range
1414

15-
# Set the rebalance mode to use the mma store rebalancer and disable the lease
16-
# and replicate queues so that only the mma store rebalancer is moving replicas
17-
# or leases.
15+
# Disable the split queue to keep the number of ranges constant.
1816
setting split_queue_enabled=false
1917
----
2018

2119
# This workload will be initially evenly distributed over the cluster.
2220
gen_ranges ranges=100 min_key=0 max_key=10000
2321
----
2422

25-
# TODO(tbg): likely accidentally too low.
26-
gen_load rate=5000 rw_ratio=0.95 min_block=100 max_block=100 request_cpu_per_access=100 raft_cpu_per_write=20 min_key=0 max_key=10000
23+
# Evenly distributed workload.
24+
gen_load rate=5000 rw_ratio=0.95 min_block=100 max_block=100 request_cpu_per_access=1000000 raft_cpu_per_write=200000 min_key=0 max_key=10000
2725
----
28-
0.00 access-vcpus, 0.00 raft-vcpus, 24 KiB/s goodput
26+
5.00 access-vcpus, 0.05 raft-vcpus, 24 KiB/s goodput
2927

3028
# Another workload is added over the second half of the keyspace, which is initially
3129
# mostly on s1-s3.
3230
gen_ranges ranges=50 min_key=10001 max_key=20000 placement_type=skewed
3331
----
3432

35-
# TODO(tbg): likely accidentally too low.
36-
gen_load rate=5000 rw_ratio=0.95 min_block=128 max_block=128 request_cpu_per_access=100000 raft_cpu_per_write=20000 min_key=10001 max_key=20000
33+
gen_load rate=1000 rw_ratio=0.99 min_block=128 max_block=128 request_cpu_per_access=10000000 raft_cpu_per_write=20000000 min_key=10001 max_key=20000
3734
----
38-
0.50 access-vcpus, 0.01 raft-vcpus, 31 KiB/s goodput
35+
10.00 access-vcpus, 0.20 raft-vcpus, 1.3 KiB/s goodput
3936

40-
eval duration=2m samples=1 seed=42 cfgs=(mma-only,mma-count) metrics=(cpu,cpu_util,replicas,leases)
37+
# Assert that:
38+
# - CPU is balanced across stores and doesn't fluctuate.
39+
# - replicas and leases are balanced and don't fluctuate.
40+
# We don't assert on replica count being balanced, even though
41+
# we do expect it to be the case in mma-count, because it won't
42+
# hold in mma-only. Ideally we could vary the assertions based
43+
# on the configuration or split up the configurations into
44+
# separate runs without needing to duplicate much of the test
45+
# setup.
46+
47+
assertion type=balance stat=cpu upper_bound=1.1 ticks=100
48+
----
49+
asserting: max_{stores}(cpu)/mean_{stores}(cpu) ≤ 1.10 at each of last 100 ticks
50+
51+
assertion type=steady stat=cpu upper_bound=0.1 ticks=100
52+
----
53+
asserting: |cpu(t)/mean_{T}(cpu) - 1| ≤ 0.10 ∀ t∈T and each store (T=last 100 ticks)
54+
55+
assertion type=steady stat=replicas upper_bound=0.1 ticks=100
56+
----
57+
asserting: |replicas(t)/mean_{T}(replicas) - 1| ≤ 0.10 ∀ t∈T and each store (T=last 100 ticks)
58+
59+
assertion type=steady stat=leases upper_bound=0.1 ticks=100
60+
----
61+
asserting: |leases(t)/mean_{T}(leases) - 1| ≤ 0.10 ∀ t∈T and each store (T=last 100 ticks)
62+
63+
eval duration=20m samples=1 seed=42 cfgs=(mma-count,mma-only) metrics=(cpu,cpu_util,replicas,leases)
4164
----
42-
cpu#1: last: [s1=275096159, s2=123983362, s3=41814276, s4=21433672, s5=10796253, s6=10602552, s7=439843, s8=10300378, s9=10452776, s10=10595723] (stddev=81999286.66, mean=51551499.40, sum=515514994)
43-
cpu#1: thrash_pct: [s1=4%, s2=3%, s3=3%, s4=2%, s5=1%, s6=1%, s7=0%, s8=1%, s9=1%, s10=1%] (sum=18%)
44-
cpu_util#1: last: [s1=0.03, s2=0.02, s3=0.01, s4=0.00, s5=0.00, s6=0.00, s7=0.00, s8=0.00, s9=0.00, s10=0.00] (stddev=0.01, mean=0.01, sum=0)
45-
cpu_util#1: thrash_pct: [s1=4%, s2=3%, s3=3%, s4=2%, s5=1%, s6=1%, s7=0%, s8=1%, s9=1%, s10=1%] (sum=18%)
65+
cpu#1: last: [s1=1541887030, s2=1713235417, s3=1580118619, s4=1618283496, s5=1563312037, s6=1657951235, s7=1307364950, s8=1552531971, s9=1561935680, s10=1645749580] (stddev=103163155.55, mean=1574237001.50, sum=15742370015)
66+
cpu#1: thrash_pct: [s1=25%, s2=29%, s3=18%, s4=29%, s5=28%, s6=16%, s7=19%, s8=27%, s9=30%, s10=18%] (sum=238%)
67+
cpu_util#1: last: [s1=0.19, s2=0.21, s3=0.20, s4=0.20, s5=0.20, s6=0.21, s7=0.16, s8=0.19, s9=0.20, s10=0.21] (stddev=0.01, mean=0.20, sum=2)
68+
cpu_util#1: thrash_pct: [s1=25%, s2=29%, s3=18%, s4=29%, s5=28%, s6=16%, s7=19%, s8=27%, s9=30%, s10=18%] (sum=238%)
4669
leases#1: first: [s1=37, s2=22, s3=14, s4=13, s5=11, s6=11, s7=10, s8=11, s9=10, s10=11] (stddev=8.07, mean=15.00, sum=150)
47-
leases#1: last: [s1=37, s2=22, s3=14, s4=13, s5=11, s6=11, s7=10, s8=11, s9=10, s10=11] (stddev=8.07, mean=15.00, sum=150)
48-
leases#1: thrash_pct: [s1=0%, s2=0%, s3=0%, s4=0%, s5=0%, s6=0%, s7=0%, s8=0%, s9=0%, s10=0%] (sum=0%)
70+
leases#1: last: [s1=10, s2=14, s3=15, s4=16, s5=15, s6=17, s7=16, s8=15, s9=15, s10=17] (stddev=1.90, mean=15.00, sum=150)
71+
leases#1: thrash_pct: [s1=0%, s2=9%, s3=8%, s4=9%, s5=9%, s6=0%, s7=0%, s8=9%, s9=17%, s10=0%] (sum=61%)
4972
replicas#1: first: [s1=80, s2=70, s3=51, s4=42, s5=37, s6=35, s7=34, s8=33, s9=34, s10=34] (stddev=16.02, mean=45.00, sum=450)
50-
replicas#1: last: [s1=80, s2=70, s3=51, s4=42, s5=37, s6=35, s7=34, s8=33, s9=34, s10=34] (stddev=16.02, mean=45.00, sum=450)
51-
replicas#1: thrash_pct: [s1=0%, s2=0%, s3=0%, s4=0%, s5=0%, s6=0%, s7=0%, s8=0%, s9=0%, s10=0%] (sum=0%)
52-
artifacts[mma-only]: c9c14a2b21947e75
73+
replicas#1: last: [s1=45, s2=44, s3=45, s4=46, s5=43, s6=45, s7=47, s8=45, s9=45, s10=45] (stddev=1.00, mean=45.00, sum=450)
74+
replicas#1: thrash_pct: [s1=0%, s2=0%, s3=0%, s4=0%, s5=5%, s6=0%, s7=0%, s8=0%, s9=6%, s10=0%] (sum=11%)
75+
artifacts[mma-count]: 2e50737f44fc4950
5376
==========================
54-
cpu#1: last: [s1=153767559, s2=82526536, s3=61655396, s4=31442666, s5=21243662, s6=31483931, s7=10725049, s8=40802943, s9=51247053, s10=30866698] (stddev=39300865.24, mean=51576149.30, sum=515761493)
55-
cpu#1: thrash_pct: [s1=6%, s2=4%, s3=4%, s4=3%, s5=2%, s6=4%, s7=1%, s8=4%, s9=5%, s10=3%] (sum=37%)
56-
cpu_util#1: last: [s1=0.02, s2=0.01, s3=0.01, s4=0.00, s5=0.00, s6=0.00, s7=0.00, s8=0.01, s9=0.01, s10=0.00] (stddev=0.00, mean=0.01, sum=0)
57-
cpu_util#1: thrash_pct: [s1=6%, s2=4%, s3=4%, s4=3%, s5=2%, s6=4%, s7=1%, s8=4%, s9=5%, s10=3%] (sum=37%)
77+
cpu#1: last: [s1=1706498399, s2=1615687783, s3=1677746697, s4=1624652238, s5=1648924305, s6=1640076380, s7=1135947134, s8=1438619020, s9=1699568316, s10=1553238061] (stddev=164018033.83, mean=1574095833.30, sum=15740958333)
78+
cpu#1: thrash_pct: [s1=32%, s2=85%, s3=84%, s4=36%, s5=17%, s6=37%, s7=15%, s8=16%, s9=22%, s10=20%] (sum=364%)
79+
cpu_util#1: last: [s1=0.21, s2=0.20, s3=0.21, s4=0.20, s5=0.21, s6=0.21, s7=0.14, s8=0.18, s9=0.21, s10=0.19] (stddev=0.02, mean=0.20, sum=2)
80+
cpu_util#1: thrash_pct: [s1=32%, s2=85%, s3=84%, s4=36%, s5=17%, s6=37%, s7=15%, s8=16%, s9=22%, s10=20%] (sum=364%)
5881
leases#1: first: [s1=37, s2=22, s3=14, s4=13, s5=11, s6=11, s7=10, s8=11, s9=10, s10=11] (stddev=8.07, mean=15.00, sum=150)
59-
leases#1: last: [s1=20, s2=16, s3=15, s4=16, s5=12, s6=14, s7=12, s8=15, s9=15, s10=15] (stddev=2.14, mean=15.00, sum=150)
60-
leases#1: thrash_pct: [s1=0%, s2=0%, s3=15%, s4=0%, s5=0%, s6=0%, s7=0%, s8=0%, s9=0%, s10=0%] (sum=15%)
82+
leases#1: last: [s1=15, s2=9, s3=17, s4=10, s5=23, s6=17, s7=13, s8=16, s9=15, s10=15] (stddev=3.71, mean=15.00, sum=150)
83+
leases#1: thrash_pct: [s1=0%, s2=41%, s3=66%, s4=37%, s5=0%, s6=39%, s7=0%, s8=0%, s9=0%, s10=0%] (sum=183%)
6184
replicas#1: first: [s1=80, s2=70, s3=51, s4=42, s5=37, s6=35, s7=34, s8=33, s9=34, s10=34] (stddev=16.02, mean=45.00, sum=450)
62-
replicas#1: last: [s1=45, s2=44, s3=44, s4=47, s5=44, s6=44, s7=44, s8=45, s9=46, s10=47] (stddev=1.18, mean=45.00, sum=450)
63-
replicas#1: thrash_pct: [s1=0%, s2=0%, s3=0%, s4=0%, s5=0%, s6=0%, s7=0%, s8=0%, s9=0%, s10=0%] (sum=0%)
64-
artifacts[mma-count]: de0b265129d19e1
85+
replicas#1: last: [s1=80, s2=58, s3=46, s4=45, s5=38, s6=37, s7=35, s8=36, s9=37, s10=38] (stddev=13.42, mean=45.00, sum=450)
86+
replicas#1: thrash_pct: [s1=0%, s2=0%, s3=5%, s4=0%, s5=0%, s6=5%, s7=0%, s8=0%, s9=0%, s10=0%] (sum=10%)
87+
artifacts[mma-only]: 7478cadb8f2e4145
6588
==========================

pkg/kv/kvserver/asim/tests/testdata/non_rand/mma/high_cpu_able_to_shed_leases.txt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,17 @@ write_bytes_per_second#1: last: [s1=25989, s2=25993, s3=29967, s4=31991, s5=359
4141
write_bytes_per_second#1: thrash_pct: [s1=161%, s2=82%, s3=144%, s4=176%, s5=158%] (sum=722%)
4242
artifacts[mma-only]: 9a1122b07e8a1e71
4343
==========================
44-
cpu#1: last: [s1=3199860194, s2=2799497761, s3=3199674637, s4=2800510026, s5=2999404241] (stddev=178780081.94, mean=2999789371.80, sum=14998946859)
45-
cpu#1: thrash_pct: [s1=124%, s2=62%, s3=49%, s4=108%, s5=79%] (sum=422%)
44+
cpu#1: last: [s1=3200015723, s2=2799409624, s3=3199923468, s4=2800455801, s5=2999667444] (stddev=178902277.04, mean=2999894412.00, sum=14999472060)
45+
cpu#1: thrash_pct: [s1=109%, s2=62%, s3=49%, s4=108%, s5=79%] (sum=408%)
4646
cpu_util#1: last: [s1=0.36, s2=0.31, s3=0.36, s4=0.31, s5=0.33] (stddev=0.02, mean=0.33, sum=2)
47-
cpu_util#1: thrash_pct: [s1=124%, s2=62%, s3=49%, s4=108%, s5=79%] (sum=422%)
47+
cpu_util#1: thrash_pct: [s1=109%, s2=62%, s3=49%, s4=108%, s5=79%] (sum=408%)
4848
leases#1: first: [s1=25, s2=0, s3=0, s4=0, s5=0] (stddev=10.00, mean=5.00, sum=25)
49-
leases#1: last: [s1=6, s2=2, s3=5, s4=5, s5=7] (stddev=1.67, mean=5.00, sum=25)
49+
leases#1: last: [s1=7, s2=3, s3=3, s4=5, s5=7] (stddev=1.79, mean=5.00, sum=25)
5050
leases#1: thrash_pct: [s1=0%, s2=0%, s3=0%, s4=0%, s5=0%] (sum=0%)
5151
replicas#1: first: [s1=25, s2=13, s3=13, s4=12, s5=12] (stddev=5.02, mean=15.00, sum=75)
5252
replicas#1: last: [s1=16, s2=14, s3=16, s4=14, s5=15] (stddev=0.89, mean=15.00, sum=75)
5353
replicas#1: thrash_pct: [s1=0%, s2=0%, s3=0%, s4=0%, s5=0%] (sum=0%)
54-
write_bytes_per_second#1: last: [s1=31998, s2=27994, s3=31996, s4=28005, s5=29994] (stddev=1787.74, mean=29997.40, sum=149987)
55-
write_bytes_per_second#1: thrash_pct: [s1=124%, s2=62%, s3=49%, s4=108%, s5=79%] (sum=422%)
56-
artifacts[mma-count]: e81950c3e42f43d
54+
write_bytes_per_second#1: last: [s1=32000, s2=27994, s3=31999, s4=28004, s5=29996] (stddev=1789.08, mean=29998.60, sum=149993)
55+
write_bytes_per_second#1: thrash_pct: [s1=109%, s2=62%, s3=49%, s4=107%, s5=79%] (sum=408%)
56+
artifacts[mma-count]: afcb108e54d06e3c
5757
==========================

0 commit comments

Comments
 (0)