Skip to content

Commit

Permalink
test: add simple tests to verify isolcpus allocation
Browse files Browse the repository at this point in the history
Signed-off-by: Feruzjon Muyassarov <feruzjon.muyassarov@intel.com>
  • Loading branch information
fmuyassarov committed Jul 4, 2024
1 parent 4918a3d commit d8a61fb
Show file tree
Hide file tree
Showing 3 changed files with 128 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
config:
balloonTypes:
- name: isolcpus
minCPUs: 1
minBalloons: 1
preferIsolCpus: true
namespaces:
- isolcpus
log:
debug:
- policy
klog:
skip_headers: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
ns=isolcpus

reboot-node() {
vm-reboot
timeout=3600 host-wait-vm-ssh-server $OUTPUT_DIR
}

restart-kubelet() {
vm-command "systemctl restart kubelet"
sleep 5
vm-wait-process --timeout 120 kube-apiserver
vm-command "cilium status --wait --wait-duration=120s --interactive=false"
}

vm-command "grep isolcpus=0,1 /proc/cmdline" || {
if [[ "$distro" == *fedora* ]]; then
fedora-set-kernel-cmdline "isolcpus=0,1"
else
ubuntu-set-kernel-cmdline "isolcpus=0,1"
fi
reboot-node
vm-command "grep isolcpus=0,1 /proc/cmdline" || {
error "failed to set isolcpus kernel commandline parameter"
}
restart-kubelet
}

helm-terminate
helm_config=${TEST_DIR}/balloons-isolcpus.cfg helm-launch balloons
vm-command "kubectl create namespace $ns"

# pod0: runs on system isolated CPUs
CONTCOUNT=2 namespace="$ns" create balloons-busybox
report allowed
verify "cpus['pod0c0'] == {'cpu00', 'cpu01'}"

# pod1: should run on non-isolated CPUs
CONTCOUNT=1 namespace="default" create balloons-busybox
report allowed
verify "cpus['pod1c0'] != {'cpu00', 'cpu01'}"

cleanup() {
vm-command "kubectl delete namespace $ns"
vm-command "kubectl delete pod --now pod1"
if [[ "$distro" == *fedora* ]]; then
fedora-set-kernel-cmdline ""
else
ubuntu-set-kernel-cmdline ""
fi
reboot-node
vm-command "grep -v isolcpus /proc/cmdline"
if [ $? -ne 0 ]; then
error "failed to unset isolcpus kernel commandline parameter"
fi
return 0
restart-kubelet
}

cleanup
56 changes: 56 additions & 0 deletions test/e2e/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -915,6 +915,62 @@ $py_assertion
return 0
}

host-wait-vm-ssh-server() {
local _vagrantdir="$1"
local _timeout=${timeout:-10}
local _waited

if [ -z "$_vagrantdir" ]; then
echo 1>&2 "host-wait-vm-ssh-server: missing vagrant directory"
return 1
fi

_waited=0; while (( $_waited < $_timeout )); do
if [ ! -f $_vagrantdir/.ssh-config ]; then
sleep 1
else
ssh -o ConnectTimeout=1 -F $_vagrantdir/.ssh-config node true
if [ $? == 0 ]; then
return 0
fi
fi
_waited=$((_waited + 1))
done

echo 1>&2 "host-wait-vm-ssh-server: timeout waiting for $_vagrantdir ssh server"
return 1
}

fedora-set-kernel-cmdline() {
local e2e_defaults="$*"
vm-command "mkdir -p /etc/default; touch /etc/default/grub; sed -i '/e2e:fedora-set-kernel-cmdline/d' /etc/default/grub"
vm-command "echo 'GRUB_CMDLINE_LINUX_DEFAULT=\"\${GRUB_CMDLINE_LINUX_DEFAULT} ${e2e_defaults}\" # by e2e:fedora-set-kernel-cmdline' >> /etc/default/grub" || {
command-error "writing new command line parameters failed"
}
vm-command "grub2-mkconfig -o /boot/grub2/grub.cfg" || {
command-error "updating grub failed"
}
}

ubuntu-set-kernel-cmdline() {
local e2e_defaults="$*"
vm-command "echo 'GRUB_CMDLINE_LINUX_DEFAULT=\"\${GRUB_CMDLINE_LINUX_DEFAULT} ${e2e_defaults}\"' > /etc/default/grub.d/60-e2e-defaults.cfg" || {
command-error "writing new command line parameters failed"
}
vm-command "update-grub" || {
command-error "updating grub failed"
}
}

vm-reboot() { # script API
# Usage: vm-reboot
#
# Reboots the virtual machine and waits that the ssh server starts
# responding again.
vm-command "reboot"
sleep 5
}

# Defaults to use in case the test case does not define these values.
yaml_in_defaults="CPU=1 MEM=100M ISO=true CPUREQ=1 CPULIM=2 MEMREQ=100M MEMLIM=200M CONTCOUNT=1"

Expand Down

0 comments on commit d8a61fb

Please sign in to comment.