![Mike Kravetz](/assets/img/avatar_default.png)
With the addition of hugetlbfs support in memfd_create, the memfd selftests should verify correct functionality with hugetlbfs. Instead of writing a separate memfd hugetlbfs test, modify the memfd_test program to take an optional argument 'hugetlbfs'. If the hugetlbfs argument is specified, basic memfd_create functionality will be exercised on hugetlbfs. If hugetlbfs is not specified, the current functionality of the test is unchanged. Note that many of the tests in memfd_test test file sealing operations. hugetlbfs does not support file sealing, therefore for hugetlbfs all sealing related tests are skipped. In order to test on hugetlbfs, there needs to be preallocated huge pages. A new script (run_tests) is added. This script will first run the existing memfd_create tests. It will then, attempt to allocate the required number of huge pages before running the hugetlbfs test. At the end of testing, it will release any huge pages allocated for testing purposes. Link: http://lkml.kernel.org/r/1502495772-24736-3-git-send-email-mike.kravetz@oracle.com Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Hugh Dickins <hughd@google.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
70 lines
1.5 KiB
Bash
70 lines
1.5 KiB
Bash
#!/bin/bash
|
|
# please run as root
|
|
|
|
#
|
|
# Normal tests requiring no special resources
|
|
#
|
|
./run_fuse_test.sh
|
|
./memfd_test
|
|
|
|
#
|
|
# To test memfd_create with hugetlbfs, there needs to be hpages_test
|
|
# huge pages free. Attempt to allocate enough pages to test.
|
|
#
|
|
hpages_test=8
|
|
|
|
#
|
|
# Get count of free huge pages from /proc/meminfo
|
|
#
|
|
while read name size unit; do
|
|
if [ "$name" = "HugePages_Free:" ]; then
|
|
freepgs=$size
|
|
fi
|
|
done < /proc/meminfo
|
|
|
|
#
|
|
# If not enough free huge pages for test, attempt to increase
|
|
#
|
|
if [ -n "$freepgs" ] && [ $freepgs -lt $hpages_test ]; then
|
|
nr_hugepgs=`cat /proc/sys/vm/nr_hugepages`
|
|
hpages_needed=`expr $hpages_test - $freepgs`
|
|
|
|
echo 3 > /proc/sys/vm/drop_caches
|
|
echo $(( $hpages_needed + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages
|
|
if [ $? -ne 0 ]; then
|
|
echo "Please run this test as root"
|
|
exit 1
|
|
fi
|
|
while read name size unit; do
|
|
if [ "$name" = "HugePages_Free:" ]; then
|
|
freepgs=$size
|
|
fi
|
|
done < /proc/meminfo
|
|
fi
|
|
|
|
#
|
|
# If still not enough huge pages available, exit. But, give back any huge
|
|
# pages potentially allocated above.
|
|
#
|
|
if [ $freepgs -lt $hpages_test ]; then
|
|
# nr_hugepgs non-zero only if we attempted to increase
|
|
if [ -n "$nr_hugepgs" ]; then
|
|
echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
|
|
fi
|
|
printf "Not enough huge pages available (%d < %d)\n" \
|
|
$freepgs $needpgs
|
|
exit 1
|
|
fi
|
|
|
|
#
|
|
# Run the hugetlbfs test
|
|
#
|
|
./memfd_test hugetlbfs
|
|
|
|
#
|
|
# Give back any huge pages allocated for the test
|
|
#
|
|
if [ -n "$nr_hugepgs" ]; then
|
|
echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
|
|
fi
|