Skip to content

Commit 2ce10b0

Browse files
authored
Merge pull request #909 from askervin/5LT_empty_balloon_is_new
balloons: prefer an empty existing balloon over creating new
2 parents bdb73a2 + 4324a3a commit 2ce10b0

File tree

3 files changed

+128
-8
lines changed

3 files changed

+128
-8
lines changed

pkg/cri/resource-manager/policy/builtin/balloons/balloons-policy.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -572,19 +572,22 @@ func (p *balloons) chooseBalloonInstance(blnDef *BalloonDef, fm FillMethod, c ca
572572
return p.balloons[0], nil
573573
case FillDefaultBalloon:
574574
return p.balloons[1], nil
575-
case FillNewBalloon:
576-
if newBln, err := p.newBalloon(blnDef, true); err == nil {
577-
p.balloons = append(p.balloons, newBln)
578-
return newBln, nil
579-
} else {
580-
return nil, nil
575+
case FillNewBalloon, FillNewBalloonMust:
576+
// Choosing an existing balloon without containers is
577+
// preferred over instantiating a new balloon.
578+
for _, bln := range p.balloonsByDef(blnDef) {
579+
if len(bln.PodIDs) == 0 {
580+
return bln, nil
581+
}
581582
}
582-
case FillNewBalloonMust:
583583
if newBln, err := p.newBalloon(blnDef, true); err == nil {
584584
p.balloons = append(p.balloons, newBln)
585585
return newBln, nil
586586
} else {
587-
return nil, err
587+
if fm == FillNewBalloonMust {
588+
return nil, err
589+
}
590+
return nil, nil
588591
}
589592
case FillSameNamespace:
590593
for _, bln := range p.balloonsByNamespace(c.GetNamespace()) {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
policy:
2+
Active: balloons
3+
ReservedResources:
4+
CPU: cpuset:0
5+
balloons:
6+
BalloonTypes:
7+
- Name: isolated-pods
8+
MinCPUs: 0
9+
MaxCPUs: 2
10+
CPUClass: turbo
11+
MinBalloons: 2
12+
PreferNewBalloons: true
13+
PreferSpreadingPods: false
14+
- Name: isolated-ctrs
15+
MinCPUs: 1
16+
MaxCPUs: 1
17+
CPUClass: turbo
18+
MinBalloons: 2
19+
PreferNewBalloons: true
20+
PreferSpreadingPods: true
21+
instrumentation:
22+
HTTPEndpoint: :8891
23+
PrometheusExport: true
24+
logger:
25+
Debug: policy
26+
Klog:
27+
skip_headers: true
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
terminate cri-resmgr
2+
cri_resmgr_cfg=${TEST_DIR}/balloons-isolated.cfg cri_resmgr_extra_args="-metrics-interval 4s" launch cri-resmgr
3+
4+
verify-metrics-has-line 'balloon="isolated-pods\[0\]"'
5+
verify-metrics-has-line 'balloon="isolated-pods\[1\]"'
6+
verify-metrics-has-no-line 'balloon="isolated-pods\[2\]"'
7+
8+
# pod0: besteffort
9+
CPUREQ="" CPULIM="" MEMREQ="" MEMLIM=""
10+
POD_ANNOTATION="balloon.balloons.cri-resource-manager.intel.com: isolated-pods"
11+
CONTCOUNT=2 create balloons-busybox
12+
report allowed
13+
verify 'len(cpus["pod0c0"]) == 1' \
14+
'len(cpus["pod0c1"]) == 1' \
15+
'cpus["pod0c0"] == cpus["pod0c1"]'
16+
# Even if the isolated balloon type has PreferNewBalloons=1, adding
17+
# this pod0 or pod1 must not create a new balloon because existing
18+
# empty balloons should be filled first.
19+
verify-metrics-has-line 'balloon="isolated-pods\[0\]"'
20+
verify-metrics-has-line 'balloon="isolated-pods\[1\]"'
21+
verify-metrics-has-no-line 'balloon="isolated-pods\[2\]"'
22+
23+
# pod1: guaranteed
24+
CPUREQ="600m" CPULIM="600m" MEMREQ="100M" MEMLIM="100M"
25+
POD_ANNOTATION="balloon.balloons.cri-resource-manager.intel.com: isolated-pods"
26+
CONTCOUNT=2 create balloons-busybox
27+
report allowed
28+
verify 'len(cpus["pod0c0"]) == 1' \
29+
'len(cpus["pod0c1"]) == 1' \
30+
'len(cpus["pod1c0"]) == 2' \
31+
'len(cpus["pod1c1"]) == 2' \
32+
'cpus["pod0c0"] == cpus["pod0c1"]' \
33+
'cpus["pod1c0"] == cpus["pod1c1"]' \
34+
'disjoint_sets(cpus["pod0c0"], cpus["pod1c0"])'
35+
verify-metrics-has-line 'balloon="isolated-pods\[0\]"'
36+
verify-metrics-has-line 'balloon="isolated-pods\[1\]"'
37+
verify-metrics-has-no-line 'balloon="isolated-pods\[2\]"'
38+
39+
# pod2: burstable
40+
CPUREQ="100m" CPULIM="200m"
41+
POD_ANNOTATION="balloon.balloons.cri-resource-manager.intel.com: isolated-pods"
42+
CONTCOUNT=2 create balloons-busybox
43+
report allowed
44+
verify 'len(cpus["pod0c0"]) == 1' \
45+
'len(cpus["pod0c1"]) == 1' \
46+
'len(cpus["pod1c0"]) == 2' \
47+
'len(cpus["pod1c1"]) == 2' \
48+
'len(cpus["pod2c0"]) == 1' \
49+
'len(cpus["pod2c1"]) == 1' \
50+
'cpus["pod0c0"] == cpus["pod0c1"]' \
51+
'cpus["pod1c0"] == cpus["pod1c1"]' \
52+
'cpus["pod2c0"] == cpus["pod2c1"]' \
53+
'disjoint_sets(cpus["pod0c0"], cpus["pod1c0"], cpus["pod2c0"])'
54+
verify-metrics-has-line 'balloon="isolated-pods\[0\]"'
55+
verify-metrics-has-line 'balloon="isolated-pods\[1\]"'
56+
verify-metrics-has-line 'balloon="isolated-pods\[2\]"'
57+
verify-metrics-has-no-line 'balloon="isolated-pods\[3\]"'
58+
59+
# pod3: isolated containers
60+
CPUREQ="" CPULIM="" MEMREQ="" MEMLIM=""
61+
POD_ANNOTATION="balloon.balloons.cri-resource-manager.intel.com: isolated-ctrs"
62+
CONTCOUNT=4 create balloons-busybox
63+
report allowed
64+
verify 'len(cpus["pod0c0"]) == 1' \
65+
'len(cpus["pod0c1"]) == 1' \
66+
'len(cpus["pod1c0"]) == 2' \
67+
'len(cpus["pod1c1"]) == 2' \
68+
'len(cpus["pod2c0"]) == 1' \
69+
'len(cpus["pod2c1"]) == 1' \
70+
'len(cpus["pod3c0"]) == 1' \
71+
'len(cpus["pod3c1"]) == 1' \
72+
'len(cpus["pod3c2"]) == 1' \
73+
'len(cpus["pod3c3"]) == 1' \
74+
'cpus["pod0c0"] == cpus["pod0c1"]' \
75+
'cpus["pod1c0"] == cpus["pod1c1"]' \
76+
'cpus["pod2c0"] == cpus["pod2c1"]' \
77+
'disjoint_sets(cpus["pod0c0"], cpus["pod1c0"], cpus["pod2c0"])' \
78+
'disjoint_sets(cpus["pod3c0"], cpus["pod3c1"], cpus["pod3c2"], cpus["pod3c3"])' \
79+
'disjoint_sets(cpus["pod0c0"], cpus["pod1c0"], cpus["pod2c0"], cpus["pod3c0"], cpus["pod3c1"], cpus["pod3c2"], cpus["pod3c3"])'
80+
verify-metrics-has-line 'balloon="isolated-pods\[0\]"'
81+
verify-metrics-has-line 'balloon="isolated-pods\[1\]"'
82+
verify-metrics-has-line 'balloon="isolated-pods\[2\]"'
83+
verify-metrics-has-no-line 'balloon="isolated-pods\[3\]"'
84+
verify-metrics-has-line 'balloon="isolated-ctrs\[0\]"'
85+
verify-metrics-has-line 'balloon="isolated-ctrs\[1\]"'
86+
verify-metrics-has-line 'balloon="isolated-ctrs\[2\]"'
87+
verify-metrics-has-line 'balloon="isolated-ctrs\[3\]"'
88+
89+
terminate cri-resmgr
90+
launch cri-resmgr

0 commit comments

Comments
 (0)