| #!/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 |