Created
January 19, 2020 11:14
-
-
Save farrokhi/6db6b5775f3f4269410be288e05a9168 to your computer and use it in GitHub Desktop.
Calculate recommended value for HugePages/HugeTLB in Linux
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# hugepages_settings.sh | |
# | |
# Linux bash script to compute values for the | |
# recommended HugePages/HugeTLB configuration | |
# | |
# Note: This script does calculation for all shared memory | |
# segments available when the script is run, no matter it | |
# is an Oracle RDBMS shared memory segment or not. | |
# Check for the kernel version | |
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'` | |
# Find out the HugePage size | |
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk {'print $2'}` | |
# Start from 1 pages to be on the safe side and guarantee 1 free HugePage | |
NUM_PG=1 | |
# Cumulative number of pages required to handle the running shared memory segments | |
for SEG_BYTES in `ipcs -m | awk {'print $5'} | grep "[0-9][0-9]*"` | |
do | |
MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q` | |
if [ $MIN_PG -gt 0 ]; then | |
NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q` | |
fi | |
done | |
# Finish with results | |
case $KERN in | |
'2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`; | |
echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;; | |
'2.6' | '3.8' | '3.10' | '4.1' ) echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;; | |
*) echo "Unrecognized kernel version $KERN. Exiting." ;; | |
esac | |
# End |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment