]> git.ipfire.org Git - thirdparty/linux.git/blobdiff - tools/testing/selftests/mm/run_vmtests.sh
Merge tag 'mm-nonmm-stable-2024-03-14-09-36' of git://git.kernel.org/pub/scm/linux...
[thirdparty/linux.git] / tools / testing / selftests / mm / run_vmtests.sh
index 52f26578a5875bcb1e1b024209165e467ed6b055..c2c542fe7b17bb6a8b8b59b4a4de79ba26a07043 100755 (executable)
@@ -65,6 +65,8 @@ separated by spaces:
        test copy-on-write semantics
 - thp
        test transparent huge pages
+- hugetlb
+       test hugetlbfs huge pages
 - migration
        invoke move_pages(2) to exercise the migration entry code
        paths in the kernel
@@ -176,7 +178,6 @@ if [ -n "$freepgs" ] && [ -n "$hpgsize_KB" ]; then
        if [ "$freepgs" -lt "$needpgs" ]; then
                printf "Not enough huge pages available (%d < %d)\n" \
                       "$freepgs" "$needpgs"
-               exit 1
        fi
 else
        echo "no hugetlbfs support in kernel?"
@@ -209,6 +210,15 @@ pretty_name() {
 # Usage: run_test [test binary] [arbitrary test arguments...]
 run_test() {
        if test_selected ${CATEGORY}; then
+               # On memory constrainted systems some tests can fail to allocate hugepages.
+               # perform some cleanup before the test for a higher success rate.
+               if [ ${CATEGORY} == "thp" ] | [ ${CATEGORY} == "hugetlb" ]; then
+                       echo 3 > /proc/sys/vm/drop_caches
+                       sleep 2
+                       echo 1 > /proc/sys/vm/compact_memory
+                       sleep 2
+               fi
+
                local test=$(pretty_name "$*")
                local title="running $*"
                local sep=$(echo -n "$title" | tr "[:graph:][:space:]" -)
@@ -256,6 +266,7 @@ nr_hugepages_tmp=$(cat /proc/sys/vm/nr_hugepages)
 # For this test, we need one and just one huge page
 echo 1 > /proc/sys/vm/nr_hugepages
 CATEGORY="hugetlb" run_test ./hugetlb_fault_after_madv
+CATEGORY="hugetlb" run_test ./hugetlb_madv_vs_map
 # Restore the previous number of huge pages, since further tests rely on it
 echo "$nr_hugepages_tmp" > /proc/sys/vm/nr_hugepages
 
@@ -400,7 +411,27 @@ CATEGORY="thp" run_test ./khugepaged -s 2
 
 CATEGORY="thp" run_test ./transhuge-stress -d 20
 
-CATEGORY="thp" run_test ./split_huge_page_test
+# Try to create XFS if not provided
+if [ -z "${SPLIT_HUGE_PAGE_TEST_XFS_PATH}" ]; then
+    if test_selected "thp"; then
+        if grep xfs /proc/filesystems &>/dev/null; then
+            XFS_IMG=$(mktemp /tmp/xfs_img_XXXXXX)
+            SPLIT_HUGE_PAGE_TEST_XFS_PATH=$(mktemp -d /tmp/xfs_dir_XXXXXX)
+            truncate -s 314572800 ${XFS_IMG}
+            mkfs.xfs -q ${XFS_IMG}
+            mount -o loop ${XFS_IMG} ${SPLIT_HUGE_PAGE_TEST_XFS_PATH}
+            MOUNTED_XFS=1
+        fi
+    fi
+fi
+
+CATEGORY="thp" run_test ./split_huge_page_test ${SPLIT_HUGE_PAGE_TEST_XFS_PATH}
+
+if [ -n "${MOUNTED_XFS}" ]; then
+    umount ${SPLIT_HUGE_PAGE_TEST_XFS_PATH}
+    rmdir ${SPLIT_HUGE_PAGE_TEST_XFS_PATH}
+    rm -f ${XFS_IMG}
+fi
 
 CATEGORY="migration" run_test ./migration