Configuring HugePages on Linux
Complete the following steps to configure HugePages on the computer:
-
Edit the
memlock
setting in the/etc/security/limits.conf
file. Thememlock
setting is specified in KB and set slightly lesser than the installed RAM. For example, if you have 64GB RAM installed, add the following entries to increase the max locked memory limit:* soft memlock 60397977 * hard memlock 60397977
You can also set the
memlock
value higher than your SGA requirements. -
Login as the
oracle
user again and run theulimit -l
command to verify the newmemlock
setting:$ ulimit -l 60397977
-
Run the following command to display the value of
Hugepagesize
variable:$ grep Hugepagesize /proc/meminfo
-
Complete the following procedure to create a script that computes recommended values for
hugepages
configuration for the current shared memory segments:Note:
Following is an example that may require modifications.-
Create a text file named
hugepages_settings.sh
. -
Add the following content in the file:
#!/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') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;; *) echo "Unrecognized kernel version $KERN. Exiting." ;; esac # End
-
Run the following command to change the permission of the file:
$ chmod +x hugepages_settings.sh
-
-
Run the
hugepages_settings.sh
script to compute the values forhugepages
configuration:$ ./hugepages_settings.sh
-
Set the following kernel parameter:
# sysctl -w vm.nr_hugepages=value_displayed_in_step_5
-
To make the value of the parameter available for every time you restart the computer, edit the
/etc/sysctl.conf
file and add the following entry:vm.nr_hugepages=value_displayed_in_step_5
-
Restart the server.
Note:
To check the availablehugepages
, run the following command:$ grep Huge /proc/meminfo