您的位置:首页 > 运维架构 > Shell

[ID 401749.1] Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration

2011-08-18 15:31 921 查看
[ID 401749.1] Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration

In this Document

Purpose

Software Requirements/Prerequisites

Configuring the Script

Running the Script

Caution

Script

Script Output

References

Applies to:

Linux OS - Version: 2.4 to 2.6

Linux OS - Version: 1 to 3.0

Purpose

This script is intended to compute values for the recommended HugePages/HugeTLB configuration for the current shared memory segments.

It 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.

For general information about HugePages / HugeTLB, please see
Note 361323.1

Software Requirements/Prerequisites

Oracle Database instance(s) are up and running
Oracle Database 11g Automatic Memory Management (AMM) is not setup (See
Note 749851.1)
The shared memory segments can be listed by command "ipcs -m"

Configuring the Script

Create a text file named hugepages_settings.sh
Copy the contents below in the file
Run

$ chmod +x hugepages_settings.sh

Running the Script

Be sure that all applications that are meant to use HugePage / HugeTLB are running at the time the script is to be run. This includes the Oracle RDBMS instances and ASM instances in addition to other applications.

Be sure that you have /bin and /usr/bin in $PATH
Run

$ ./hugepages_settings.sh

Caution

This script is provided for educational purposes only and not supported by Oracle Support Services. It has been tested internally, however, and works as documented. We do not guarantee that it will work for you,
so be sure to test it in your environment before relying on it.
Proofread this script before using it! Due to the differences in the way text editors, e-mail packages and operating systems handle text formatting (spaces, tabs and carriage returns), this script may not be in an executable state when you first receive
it. Check over the script to ensure that errors of this type are corrected.

Script

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

#

# This script is provided by Doc ID 401749.1 from My Oracle Support

# http://support.oracle.com 
# Welcome text

echo "

This script is provided by Doc ID 401749.1 from My Oracle Support

(http://support.oracle.com) where it is intended to compute values for

the recommended HugePages/HugeTLB configuration for the current shared

memory segments. Before proceeding with the execution please make sure

that:

* Oracle Database instance(s) are up and running

* Oracle Database 11g Automatic Memory Management (AMM) is not setup

(See Doc ID 749851.1)

* The shared memory segments can be listed by command:

# ipcs -m

Press Enter to proceed..."

read

# 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}'`

# Initialize the counter

NUM_PG=0

# 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

RES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" | bc -q`

# An SGA less than 100MB does not make sense

# Bail out if that is the case

if [ $RES_BYTES -lt 100000000 ]; then

echo "***********"

echo "** ERROR **"

echo "***********"

echo "Sorry! There are not enough total of shared memory segments allocated for

HugePages configuration. HugePages can only be used for shared memory segments

that you can list by command:

# ipcs -m

of a size that can match an Oracle Database SGA. Please make sure that:

* Oracle Database instance is up and running

* Oracle Database 11g Automatic Memory Management (AMM) is not configured"

exit 1

fi

# 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


Script Output

For 2.4 kernel systems:

$ ./hugepages_settings.sh

...

Recommended setting: vm.hugetlb_pool = 764

For 2.6 kernel systems:

$ ./hugepages_settings.sh

...

Recommended setting: vm.nr_hugepages = 67


References

NOTE:361323.1 - HugePages on Linux: What It Is... and What It Is Not...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: