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  }