本篇文章給大家分享的是有關(guān)如何進(jìn)行l(wèi)inux內(nèi)存的Hugepages優(yōu)化,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
Hugepages是從Linux kernal 2.6后被引入的,其目的是使用更大的memory page size以適應(yīng)越來越大的系統(tǒng)內(nèi)存。
理論知識:
(1. Page Table大小
而Hugepages的常見page size為2M,是4k size的500倍,所以可以大大減小page table的size。
這是一個沒有配置Hugepage的系統(tǒng),系統(tǒng)內(nèi)存128G,pagetable大小大約為4G。
cat /proc/meminfo MemTotal: 132086880 kB PageTables: 4059612 kB 這是配置了Hugepage的系統(tǒng),系統(tǒng)內(nèi)存96G, PageTable大小僅為78M MemTotal: 98999880 kB PageTables: 79916 kB
進(jìn)程的虛擬內(nèi)存地址段先連接到page tables然后再連接到物理內(nèi)存。所以在訪問內(nèi)存時需要先訪問page tables得到虛擬內(nèi)存和物理內(nèi)存的映射關(guān)系,然后再訪問物理內(nèi)存。
(3.使用Hugepages的內(nèi)存頁是不會被交換出去的,永遠(yuǎn)常駐在內(nèi)存中,所以也減少了內(nèi)存也替換的額外開銷
2、數(shù)據(jù)庫服務(wù)器上使用Hugepages要注意的幾點
比如說Hugepages設(shè)置為90G,oracle SGA為91G,那么oracle在啟動的時候就不會使用到這90G的Hugepages。這90G就浪費了。所以在設(shè)置Hugepages時要計算SGA的大小,后面會給出一個腳本來計算。
(3. PGA不會使用Hugepages的內(nèi)存。所以11g的AMM (Automatic Memory Management,memory_target參數(shù))是不被支持的。而ASMM(Automatic Shared Memory Management, SGA_target參數(shù))是被支持的,這兩個不要搞混淆了。
舉例說明:
HugePages_Total: 43000 HugePages_Free: 29493 HugePages_Rsvd: 23550 Hugepagesize: 2048 kB HugePages_Total為所分配的頁面數(shù)目,和Hugepagesize相乘后得到所分配的內(nèi)存大小。43000*2/1024大約為84GB HugePages_Free為從來沒有被使用過的Hugepages數(shù)目。即使oracle sga已經(jīng)分配了這部分內(nèi)存,但是如果沒有實際寫入,那么看到的還是Free的。這是很容易誤解的地方 HugePages_Rsvd為已經(jīng)被分配預(yù)留但是還沒有使用的page數(shù)目。在Oracle剛剛啟動時,大部分內(nèi)存應(yīng)該都是Reserved并且Free的,隨著oracle SGA的使用,Reserved和Free都會不斷的降低 HugePages_Free – HugePages_Rsvd 這部分是沒有被使用到的內(nèi)存,如果沒有其他的oracle instance,這部分內(nèi)存也許永遠(yuǎn)都不會被使用到,也就是被浪費了。在該系統(tǒng)上有11.5GB的內(nèi)存被浪費了。
3、設(shè)置HugePages步驟:
在/etc/security/limits.conf文件中添加memlock的限制,注意該值略微小于實際物理內(nèi)存的大小。比如物理內(nèi)存是64GB,可以設(shè)置為如下:
* hard memlock 60397977
如果使用了Oracle Linux的oracle?-validated包,或者Exadata DB compute會自動配置這個參數(shù)。
第二步:驗證memlock使用如下命令查看參數(shù)值: 這里,最好是重啟一下服務(wù)器再驗證,比較穩(wěn)妥
60397977
第三步:11g中禁用AMM ----注意
另外:默認(rèn)情況下ASM instance也是使用AMM的,但因為ASM實例不需要大SGA,所以對ASM實例使用HugePages意義不大。
確保所有的數(shù)據(jù)庫實例都已經(jīng)啟動,包括ASM實例。使用hugepages_settings.sh腳本獲取thevm.nr_hugepages內(nèi)核參數(shù)的建議值。
...(略)
...
驗證配置:
為了確保HugePages配置的有效性,HugePages_Free值應(yīng)該小于HugePages_Total的值,并且應(yīng)該等于HugePages_Rsvd的值。
實例:機(jī)器配置:128G物理內(nèi)存+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 # /tupian/20230522/ # Welcome text echo " This script is provided by Doc ID 401749.1 from My Oracle Support (/tupian/20230522/) 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
以上就是如何進(jìn)行l(wèi)inux內(nèi)存的Hugepages優(yōu)化,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。
當(dāng)前題目:如何進(jìn)行l(wèi)inux內(nèi)存的Hugepages優(yōu)化-創(chuàng)新互聯(lián)
標(biāo)題URL:http://aaarwkj.com/article20/dspdjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、建站公司、Google、營銷型網(wǎng)站建設(shè)、小程序開發(fā)、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容