ablog

不器用で落着きのない技術者のメモ

hugepages_settings.sh 使うときは PRE_PAGE_SGA=TRUE にしたほうが良いと思う

Linux*1 はデマンド・ページング*2するので、hugepages_settings.sh で vm.nr_hugepages を見積もる場合は、初期化パラメータ PRE_PAGE_SGA=TRUE に設定しインスタンス起動時に物理メモリを割当てた上で、hugepages_settings.sh を実行したほうが良いと思う。

4.現行の共有メモリー・セグメントのhugepages構成の推奨値を計算するスクリプトを作成するには、次の手順を実行します。
a. hugepages_settings.shという名前のテキスト・ファイルを作成します。
b. 次の内容をファイルに追加します。

#!/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
https://docs.oracle.com/cd/E49329_01/server.121/b71275/appi_vlm.htm

*1:に限らないが

*2:必要になるまで物理メモリを割当てない→wikipedia:ページング方式