中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行linux內存的Hugepages優化

發布時間:2021-11-03 17:02:17 來源:億速云 閱讀:206 作者:柒染 欄目:建站服務器

本篇文章給大家分享的是有關如何進行linux內存的Hugepages優化,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

Hugepages是從Linux kernal 2.6后被引入的,其目的是使用更大的memory page size以適應越來越大的系統內存。

理論知識:

(1. Page Table大小

而Hugepages的常見page size為2M,是4k size的500倍,所以可以大大減小page table的size。

這是一個沒有配置Hugepage的系統,系統內存128G,pagetable大小大約為4G。

cat /proc/meminfo
MemTotal: 132086880 kB
PageTables: 4059612 kB

這是配置了Hugepage的系統,系統內存96G, PageTable大小僅為78M
MemTotal: 98999880 kB
PageTables: 79916 kB

      進程的虛擬內存地址段先連接到page tables然后再連接到物理內存。所以在訪問內存時需要先訪問page tables得到虛擬內存和物理內存的映射關系,然后再訪問物理內存。

(3.使用Hugepages的內存頁是不會被交換出去的,永遠常駐在內存中,所以也減少了內存也替換的額外開銷

2、數據庫服務器上使用Hugepages要注意的幾點

比如說Hugepages設置為90G,oracle SGA為91G,那么oracle在啟動的時候就不會使用到這90G的Hugepages。這90G就浪費了。所以在設置Hugepages時要計算SGA的大小,后面會給出一個腳本來計算。

(3. PGA不會使用Hugepages的內存。所以11g的AMM (Automatic Memory Management,memory_target參數)是不被支持的。而ASMM(Automatic Shared Memory Management, SGA_target參數)是被支持的,這兩個不要搞混淆了。

舉例說明:

HugePages_Total: 43000
HugePages_Free: 29493
HugePages_Rsvd: 23550
Hugepagesize: 2048 kB
HugePages_Total為所分配的頁面數目,和Hugepagesize相乘后得到所分配的內存大小。43000*2/1024大約為84GB
HugePages_Free為從來沒有被使用過的Hugepages數目。即使oracle sga已經分配了這部分內存,但是如果沒有實際寫入,那么看到的還是Free的。這是很容易誤解的地方
HugePages_Rsvd為已經被分配預留但是還沒有使用的page數目。在Oracle剛剛啟動時,大部分內存應該都是Reserved并且Free的,隨著oracle SGA的使用,Reserved和Free都會不斷的降低
HugePages_Free – HugePages_Rsvd 這部分是沒有被使用到的內存,如果沒有其他的oracle instance,這部分內存也許永遠都不會被使用到,也就是被浪費了。在該系統上有11.5GB的內存被浪費了。

3、設置HugePages步驟:

在/etc/security/limits.conf文件中添加memlock的限制,注意該值略微小于實際物理內存的大小。比如物理內存是64GB,可以設置為如下:

*  hard   memlock    60397977

如果使用了Oracle Linux的oracle?-validated包,或者Exadata DB compute會自動配置這個參數。

第二步:驗證memlock使用如下命令查看參數值:  這里,最好是重啟一下服務器再驗證,比較穩妥

60397977

第三步:11g中禁用AMM    ----注意

另外:默認情況下ASM instance也是使用AMM的,但因為ASM實例不需要大SGA,所以對ASM實例使用HugePages意義不大。

確保所有的數據庫實例都已經啟動,包括ASM實例。使用hugepages_settings.sh腳本獲取thevm.nr_hugepages內核參數的建議值。

...(略)

...

驗證配置:

      為了確保HugePages配置的有效性,HugePages_Free值應該小于HugePages_Total的值,并且應該等于HugePages_Rsvd的值。

實例:機器配置:128G物理內存+56G的SGA

root># grep HugePages /proc/meminfo
HugePages_Total: 28674
HugePages_Free:    707
HugePages_Rsvd:    706

附計算hugepages腳本:

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


 

以上就是如何進行linux內存的Hugepages優化,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

久治县| 如东县| 射阳县| 环江| 轮台县| 凉山| 嘉义县| 嘉黎县| 衡南县| 南京市| 阜康市| 丰镇市| 曲松县| 恩平市| 长宁区| 浦城县| 通榆县| 嵊州市| 青海省| 会同县| 芷江| 德阳市| 顺义区| 旺苍县| 黄山市| 内乡县| 湘西| 昭苏县| 扶风县| 乌兰县| 体育| 抚远县| 枝江市| 南溪县| 江都市| 义马市| 曲周县| 道真| 南充市| 乌恰县| 仪征市|