|
| 1 | +# Prepare virtual machine before installing balloons. |
| 2 | +min_kernel_version=6.14 |
| 3 | +vm-command "uname -r" |
| 4 | +if [ "$( ( echo $min_kernel_version; echo $COMMAND_OUTPUT ) | sort --version-sort | tail -n 1 )" == "$min_kernel_version" ]; then |
| 5 | + error "quest OS runs too old kernel, hot-plugged CPU node topology may not work. Required: $min_kernel_version" |
| 6 | +fi |
| 7 | + |
| 8 | +# Hot-plug CPUs. |
| 9 | +vm-command 'grep 511,1535,4095 /sys/devices/system/cpu/enabled' || { |
| 10 | + vm-cpu-hotplug 0 511 0 |
| 11 | + vm-cpu-hotplug 2 511 0 |
| 12 | + vm-cpu-hotplug 7 511 0 |
| 13 | + |
| 14 | + # Wait for the kernel to expose all hot-plugged CPUs in sysfs. |
| 15 | + vm-run-until '[ -d /sys/devices/system/cpu/cpu511 ] && [ -d /sys/devices/system/cpu/cpu1535 ] && [ -d /sys/devices/system/cpu/cpu4095 ]' |
| 16 | + |
| 17 | + # Online all CPUs. |
| 18 | + vm-command 'for cpuX in /sys/devices/system/cpu/cpu[1-9]*; do |
| 19 | + echo onlining $cpuX |
| 20 | + ( echo 1 > $cpuX/online && echo Successful: write 1 to $cpuX/online ) || echo Failed: write 1 to $cpuX/online |
| 21 | + done |
| 22 | + grep . /sys/devices/system/cpu/cpu[1-9]*/online' |
| 23 | + |
| 24 | + # Restart kubelet to let it detect new enabled CPUs. |
| 25 | + vm-command "systemctl restart kubelet" |
| 26 | +} |
| 27 | + |
| 28 | +# Wait until kubelet has reported all enabled CPUs in node capacity. |
| 29 | +vm-run-until 'kubectl get node -o jsonpath="{.items[0].status.capacity.cpu}" | grep 6' || |
| 30 | + command-error "Unexpected node CPU capacity" |
| 31 | + |
| 32 | +# Make sure that k8s root cpuset.cpus contains hot-plugged CPUs. |
| 33 | +# containerd: kubepods/cpuset.cpus |
| 34 | +# cri-o: kubepods.slice/cpuset.cpus |
| 35 | +vm-command "grep . /sys/fs/cgroup/kubepods*/cpuset.cpus" |
| 36 | +if ! ( grep -q 511 <<< $COMMAND_OUTPUT && |
| 37 | + grep -q 1535 <<< $COMMAND_OUTPUT && |
| 38 | + grep -q 4095 <<< $COMMAND_OUTPUT ); then |
| 39 | + command-error "kubepods cpuset.cpus does not include expected CPUs" |
| 40 | +fi |
| 41 | + |
| 42 | +# Install balloons |
| 43 | +helm-terminate |
| 44 | +helm_config=$TEST_DIR/balloons-sparse-4kcpus.cfg helm-launch balloons |
| 45 | + |
| 46 | +# Verify NRT |
| 47 | +nrt-verify-zone-resource "reserved[0]" "cpu" "capacity" "6" |
| 48 | +nrt-verify-zone-resource "reserved[0]" "cpu" "allocatable" "5" |
| 49 | +nrt-verify-zone-resource "pkg7[0]" "cpu" "capacity" "6" |
| 50 | +nrt-verify-zone-resource "pkg7[0]" "cpu" "allocatable" "1" |
| 51 | +nrt-verify-zone-attribute "pkg7[0]" "cpuset" "4095" |
| 52 | + |
| 53 | +CPUREQ="500m" CPULIM="" MEMREQ=50M MEMLIM="" |
| 54 | +ANN0="balloon.balloons.resource-policy.nri.io/container.pod0c0: pkg0" |
| 55 | +ANN1="balloon.balloons.resource-policy.nri.io/container.pod0c1: pkg2" |
| 56 | +ANN2="balloon.balloons.resource-policy.nri.io/container.pod0c2: pkg7" |
| 57 | +CONTCOUNT=3 create besteffort |
| 58 | +report allowed |
| 59 | +verify 'cpus["pod0c0"] == {"cpu0511","cpu0002","cpu0000"}' \ |
| 60 | + 'cpus["pod0c1"] == {"cpu1535"}' \ |
| 61 | + 'cpus["pod0c2"] == {"cpu4095"}' |
0 commit comments