github.com/kata-containers/tests@v0.0.0-20240307153542-772105b56064/integration/kubernetes/k8s-hugepages.bats (about) 1 # 2 # Copyright (c) 2019 Intel Corporation 3 # 4 # SPDX-License-Identifier: Apache-2.0 5 # 6 7 load "${BATS_TEST_DIRNAME}/../../.ci/lib.sh" 8 load "${BATS_TEST_DIRNAME}/tests_common.sh" 9 source "/etc/os-release" || source "/usr/lib/os-release" 10 issue="https://github.com/kata-containers/tests/issues/4474" 11 cgroupv2_issue="https://github.com/kata-containers/tests/issues/5218" 12 13 setup() { 14 extract_kata_env 15 16 pod_name="hugepage-pod" 17 get_pod_config_dir 18 19 hugepages_sysfs_dir=hugepages-2048kB 20 if [ "$(uname -m)" = s390x ]; then 21 # Hugepage size(s) must be set at boot on s390x. Use first that is available. 22 # kvm.hpage=1 must also be set. 23 hugepages_sysfs_dir=$(ls /sys/kernel/mm/hugepages | head -1) 24 fi 25 # Hugepages size in bytes 26 # Pattern substitute only directly supported in gawk, not mawk -- use sed 27 hugepages_size=$(<<< "$hugepages_sysfs_dir" sed -E 's/hugepages-(.+)B/\1/' | awk '{print toupper($0)}' | numfmt --from=iec) 28 # Hugepages size as specified by mount(8) (IEC) 29 hugepages_size_mount=$(<<< "$hugepages_size" numfmt --to=iec --format %.0f) 30 # Hugepages size as asked for by k8s (IEC with `i` suffix) 31 hugepages_size_k8s=$(<<< "$hugepages_size" numfmt --to=iec-i --format %.0f) 32 # 4G of hugepages in total 33 hugepages_count=$(<<< "(4 * 2^30) / $hugepages_size" bc) 34 35 sed "s/\${hugepages_size}/$hugepages_size_k8s/" "$pod_config_dir/pod-hugepage.yaml" > "$pod_config_dir/test_hugepage.yaml" 36 37 # Enable hugepages 38 sed -i 's/#enable_hugepages = true/enable_hugepages = true/g' ${RUNTIME_CONFIG_PATH} 39 40 old_pages=$(cat "/sys/kernel/mm/hugepages/$hugepages_sysfs_dir/nr_hugepages") 41 42 sync 43 echo 3 > /proc/sys/vm/drop_caches 44 echo "$hugepages_count" > "/sys/kernel/mm/hugepages/$hugepages_sysfs_dir/nr_hugepages" 45 46 systemctl restart kubelet 47 } 48 49 @test "Hugepages" { 50 [ "${NAME}" == "Ubuntu" ] && [ "$(echo "${VERSION_ID} >= 22.04" | bc -q)" == "1" ] && skip "hugepages test is not working with cgroupsv2 see $cgroupv2_issue" 51 52 # Create pod 53 kubectl create -f "${pod_config_dir}/test_hugepage.yaml" 54 55 # Check pod creation 56 kubectl wait --for=condition=Ready --timeout=$timeout pod "$pod_name" 57 58 # Some `mount`s will indicate a total size, hence the .* 59 kubectl exec $pod_name mount | grep "nodev on /hugepages type hugetlbfs (rw,relatime,pagesize=$hugepages_size_mount.*)" 60 } 61 62 63 @test "Hugepages and sandbox cgroup" { 64 skip "test not working see: $issue" 65 66 # Enable sandbox_cgroup_only 67 # And set default memory to a low value that is not smaller then container's request 68 sed -i 's/sandbox_cgroup_only=false/sandbox_cgroup_only=true/g' ${RUNTIME_CONFIG_PATH} 69 sed -i 's|^default_memory.*|default_memory = 512|g' $RUNTIME_CONFIG_PATH 70 71 # Create pod 72 kubectl create -f "${pod_config_dir}/test_hugepage.yaml" 73 74 # Check pod creation 75 kubectl wait --for=condition=Ready --timeout=$timeout pod "$pod_name" 76 77 kubectl exec $pod_name mount | grep "nodev on /hugepages type hugetlbfs (rw,relatime,pagesize=$hugepages_size_mount.*)" 78 79 # Disable sandbox_cgroup_only 80 sed -i 's/sandbox_cgroup_only=true/sandbox_cgroup_only=false/g' ${RUNTIME_CONFIG_PATH} 81 } 82 83 teardown() { 84 echo "$old_pages" > "/sys/kernel/mm/hugepages/$hugepages_sysfs_dir/nr_hugepages" 85 86 rm "$pod_config_dir/test_hugepage.yaml" 87 kubectl delete pod "$pod_name" 88 89 # Disable sandbox_cgroup_only, in case previous test failed. 90 sed -i 's/sandbox_cgroup_only=true/sandbox_cgroup_only=false/g' ${RUNTIME_CONFIG_PATH} 91 92 # Disable hugepages and set default memory back to 2048Mi 93 sed -i 's/enable_hugepages = true/#enable_hugepages = true/g' ${RUNTIME_CONFIG_PATH} 94 sed -i 's|^default_memory.*|default_memory = 2048|g' $RUNTIME_CONFIG_PATH 95 }